{"id":"99b7639c96f7edfaabeb37dd3d8bb23a","_format":"hh-sol-build-info-1","solcVersion":"0.8.28","solcLongVersion":"0.8.28+commit.7893614a","input":{"language":"Solidity","sources":{"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\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 * ```solidity\n * contract MyToken is ERC20Upgradeable {\n *     function initialize() initializer public {\n *         __ERC20_init(\"MyToken\", \"MTK\");\n *     }\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 Storage of the initializable contract.\n     *\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n     * when using with upgradeable contracts.\n     *\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n     */\n    struct InitializableStorage {\n        /**\n         * @dev Indicates that the contract has been initialized.\n         */\n        uint64 _initialized;\n        /**\n         * @dev Indicates that the contract is in the process of being initialized.\n         */\n        bool _initializing;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n    /**\n     * @dev The contract is already initialized.\n     */\n    error InvalidInitialization();\n\n    /**\n     * @dev The contract is not initializing.\n     */\n    error NotInitializing();\n\n    /**\n     * @dev Triggered when the contract has been initialized or reinitialized.\n     */\n    event Initialized(uint64 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 in the context of a constructor an `initializer` may be invoked any\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n     * production.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier initializer() {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        // Cache values to avoid duplicated sloads\n        bool isTopLevelCall = !$._initializing;\n        uint64 initialized = $._initialized;\n\n        // Allowed calls:\n        // - initialSetup: the contract is not in the initializing state and no previous version was\n        //                 initialized\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\n        //                 current contract is just being deployed\n        bool initialSetup = initialized == 0 && isTopLevelCall;\n        bool construction = initialized == 1 && address(this).code.length == 0;\n\n        if (!initialSetup && !construction) {\n            revert InvalidInitialization();\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 2**64 - 1 will prevent any future reinitialization.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier reinitializer(uint64 version) {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing || $._initialized >= version) {\n            revert InvalidInitialization();\n        }\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        _checkInitializing();\n        _;\n    }\n\n    /**\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n     */\n    function _checkInitializing() internal view virtual {\n        if (!_isInitializing()) {\n            revert NotInitializing();\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        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing) {\n            revert InvalidInitialization();\n        }\n        if ($._initialized != type(uint64).max) {\n            $._initialized = type(uint64).max;\n            emit Initialized(type(uint64).max);\n        }\n    }\n\n    /**\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\n     */\n    function _getInitializedVersion() internal view returns (uint64) {\n        return _getInitializableStorage()._initialized;\n    }\n\n    /**\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n     */\n    function _isInitializing() internal view returns (bool) {\n        return _getInitializableStorage()._initializing;\n    }\n\n    /**\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\n     *\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\n     */\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\n        return INITIALIZABLE_STORAGE;\n    }\n\n    /**\n     * @dev Returns a pointer to the storage namespace.\n     */\n    // solhint-disable-next-line var-name-mixedcase\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n        bytes32 slot = _initializableStorageSlot();\n        assembly {\n            $.slot := slot\n        }\n    }\n}\n"},"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.22;\n\nimport {IERC1822Proxiable} from \"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\";\nimport {ERC1967Utils} from \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\";\nimport {Initializable} from \"./Initializable.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n */\nabstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n    address private immutable __self = address(this);\n\n    /**\n     * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\n     * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n     * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n     * If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\n     * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\n     * during an upgrade.\n     */\n    string public constant UPGRADE_INTERFACE_VERSION = \"5.0.0\";\n\n    /**\n     * @dev The call is from an unauthorized context.\n     */\n    error UUPSUnauthorizedCallContext();\n\n    /**\n     * @dev The storage `slot` is unsupported as a UUID.\n     */\n    error UUPSUnsupportedProxiableUUID(bytes32 slot);\n\n    /**\n     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n     * a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case\n     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n     * function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n     * fail.\n     */\n    modifier onlyProxy() {\n        _checkProxy();\n        _;\n    }\n\n    /**\n     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n     * callable on the implementing contract but not through proxies.\n     */\n    modifier notDelegated() {\n        _checkNotDelegated();\n        _;\n    }\n\n    function __UUPSUpgradeable_init() internal onlyInitializing {\n    }\n\n    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the\n     * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n     */\n    function proxiableUUID() external view virtual notDelegated returns (bytes32) {\n        return ERC1967Utils.IMPLEMENTATION_SLOT;\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n     * encoded in `data`.\n     *\n     * Calls {_authorizeUpgrade}.\n     *\n     * Emits an {Upgraded} event.\n     *\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n     */\n    function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\n        _authorizeUpgrade(newImplementation);\n        _upgradeToAndCallUUPS(newImplementation, data);\n    }\n\n    /**\n     * @dev Reverts if the execution is not performed via delegatecall or the execution\n     * context is not of a proxy with an ERC-1967 compliant implementation pointing to self.\n     */\n    function _checkProxy() internal view virtual {\n        if (\n            address(this) == __self || // Must be called through delegatecall\n            ERC1967Utils.getImplementation() != __self // Must be called through an active proxy\n        ) {\n            revert UUPSUnauthorizedCallContext();\n        }\n    }\n\n    /**\n     * @dev Reverts if the execution is performed via delegatecall.\n     * See {notDelegated}.\n     */\n    function _checkNotDelegated() internal view virtual {\n        if (address(this) != __self) {\n            // Must not be called through delegatecall\n            revert UUPSUnauthorizedCallContext();\n        }\n    }\n\n    /**\n     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n     * {upgradeToAndCall}.\n     *\n     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n     *\n     * ```solidity\n     * function _authorizeUpgrade(address) internal onlyOwner {}\n     * ```\n     */\n    function _authorizeUpgrade(address newImplementation) internal virtual;\n\n    /**\n     * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\n     *\n     * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\n     * is expected to be the implementation slot in ERC-1967.\n     *\n     * Emits an {IERC1967-Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {\n        try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n            if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {\n                revert UUPSUnsupportedProxiableUUID(slot);\n            }\n            ERC1967Utils.upgradeToAndCall(newImplementation, data);\n        } catch {\n            // The implementation is not UUPS\n            revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);\n        }\n    }\n}\n"},"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n * consider using {ReentrancyGuardTransient} instead.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant NOT_ENTERED = 1;\n    uint256 private constant ENTERED = 2;\n\n    /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard\n    struct ReentrancyGuardStorage {\n        uint256 _status;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n    function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) {\n        assembly {\n            $.slot := ReentrancyGuardStorageLocation\n        }\n    }\n\n    /**\n     * @dev Unauthorized reentrant call.\n     */\n    error ReentrancyGuardReentrantCall();\n\n    function __ReentrancyGuard_init() internal onlyInitializing {\n        __ReentrancyGuard_init_unchained();\n    }\n\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\n        $._status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\n        if ($._status == ENTERED) {\n            revert ReentrancyGuardReentrantCall();\n        }\n\n        // Any calls to nonReentrant after this point will fail\n        $._status = ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        $._status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\n        return $._status == ENTERED;\n    }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n    /**\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n     * address.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy.\n     */\n    function proxiableUUID() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1967.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\n */\ninterface IERC1967 {\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Emitted when the beacon is changed.\n     */\n    event BeaconUpgraded(address indexed beacon);\n}\n"},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n    /**\n     * @dev Must return an address that can be used as a delegate call target.\n     *\n     * {UpgradeableBeacon} will check that this address is a contract.\n     */\n    function implementation() external view returns (address);\n}\n"},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.2.0) (proxy/ERC1967/ERC1967Utils.sol)\n\npragma solidity ^0.8.22;\n\nimport {IBeacon} from \"../beacon/IBeacon.sol\";\nimport {IERC1967} from \"../../interfaces/IERC1967.sol\";\nimport {Address} from \"../../utils/Address.sol\";\nimport {StorageSlot} from \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This library provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.\n */\nlibrary ERC1967Utils {\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev The `implementation` of the proxy is invalid.\n     */\n    error ERC1967InvalidImplementation(address implementation);\n\n    /**\n     * @dev The `admin` of the proxy is invalid.\n     */\n    error ERC1967InvalidAdmin(address admin);\n\n    /**\n     * @dev The `beacon` of the proxy is invalid.\n     */\n    error ERC1967InvalidBeacon(address beacon);\n\n    /**\n     * @dev An upgrade function sees `msg.value > 0` that may be lost.\n     */\n    error ERC1967NonPayable();\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the ERC-1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        if (newImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(newImplementation);\n        }\n        StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Performs implementation upgrade with additional setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-Upgraded} event.\n     */\n    function upgradeToAndCall(address newImplementation, bytes memory data) internal {\n        _setImplementation(newImplementation);\n        emit IERC1967.Upgraded(newImplementation);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(newImplementation, data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\n     * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the ERC-1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        if (newAdmin == address(0)) {\n            revert ERC1967InvalidAdmin(address(0));\n        }\n        StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {IERC1967-AdminChanged} event.\n     */\n    function changeAdmin(address newAdmin) internal {\n        emit IERC1967.AdminChanged(getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the ERC-1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        if (newBeacon.code.length == 0) {\n            revert ERC1967InvalidBeacon(newBeacon);\n        }\n\n        StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\n\n        address beaconImplementation = IBeacon(newBeacon).implementation();\n        if (beaconImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(beaconImplementation);\n        }\n    }\n\n    /**\n     * @dev Change the beacon and trigger a setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-BeaconUpgraded} event.\n     *\n     * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n     * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n     * efficiency.\n     */\n    function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\n        _setBeacon(newBeacon);\n        emit IERC1967.BeaconUpgraded(newBeacon);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n     * if an upgrade doesn't perform an initialization call.\n     */\n    function _checkNonPayable() private {\n        if (msg.value > 0) {\n            revert ERC1967NonPayable();\n        }\n    }\n}\n"},"@openzeppelin/contracts/token/ERC1155/IERC1155.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC1155/IERC1155.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC-1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[ERC].\n */\ninterface IERC1155 is IERC165 {\n    /**\n     * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\n     */\n    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n    /**\n     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n     * transfers.\n     */\n    event TransferBatch(\n        address indexed operator,\n        address indexed from,\n        address indexed to,\n        uint256[] ids,\n        uint256[] values\n    );\n\n    /**\n     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n     * `approved`.\n     */\n    event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n    /**\n     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n     *\n     * If an {URI} event was emitted for `id`, the standard\n     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n     * returned by {IERC1155MetadataURI-uri}.\n     */\n    event URI(string value, uint256 indexed id);\n\n    /**\n     * @dev Returns the value of tokens of token type `id` owned by `account`.\n     */\n    function balanceOf(address account, uint256 id) external view returns (uint256);\n\n    /**\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n     *\n     * Requirements:\n     *\n     * - `accounts` and `ids` must have the same length.\n     */\n    function balanceOfBatch(\n        address[] calldata accounts,\n        uint256[] calldata ids\n    ) external view returns (uint256[] memory);\n\n    /**\n     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n     *\n     * Emits an {ApprovalForAll} event.\n     *\n     * Requirements:\n     *\n     * - `operator` cannot be the zero address.\n     */\n    function setApprovalForAll(address operator, bool approved) external;\n\n    /**\n     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n     *\n     * See {setApprovalForAll}.\n     */\n    function isApprovedForAll(address account, address operator) external view returns (bool);\n\n    /**\n     * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`.\n     *\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver.\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\n     * reentrancy guards when interacting with untrusted contracts.\n     *\n     * Emits a {TransferSingle} event.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n     * - `from` must have a balance of tokens of type `id` of at least `value` amount.\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n     * acceptance magic value.\n     */\n    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n\n    /**\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n     *\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver.\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\n     * reentrancy guards when interacting with untrusted contracts.\n     *\n     * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments.\n     *\n     * Requirements:\n     *\n     * - `ids` and `values` must have the same length.\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n     * acceptance magic value.\n     */\n    function safeBatchTransferFrom(\n        address from,\n        address to,\n        uint256[] calldata ids,\n        uint256[] calldata values,\n        bytes calldata data\n    ) external;\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC721/IERC721.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC-721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n    /**\n     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n     */\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n     */\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n    /**\n     * @dev Returns the number of tokens in ``owner``'s account.\n     */\n    function balanceOf(address owner) external view returns (uint256 balance);\n\n    /**\n     * @dev Returns the owner of the `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function ownerOf(uint256 tokenId) external view returns (address owner);\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n     *   a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n     *   {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n     *   a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Transfers `tokenId` token from `from` to `to`.\n     *\n     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\n     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n     * understand this adds an external call which potentially creates a reentrancy vulnerability.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) external;\n\n    /**\n     * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n     * The approval is cleared when the token is transferred.\n     *\n     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n     *\n     * Requirements:\n     *\n     * - The caller must own the token or be an approved operator.\n     * - `tokenId` must exist.\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address to, uint256 tokenId) external;\n\n    /**\n     * @dev Approve or remove `operator` as an operator for the caller.\n     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n     *\n     * Requirements:\n     *\n     * - The `operator` cannot be the address zero.\n     *\n     * Emits an {ApprovalForAll} event.\n     */\n    function setApprovalForAll(address operator, bool approved) external;\n\n    /**\n     * @dev Returns the account approved for `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function getApproved(uint256 tokenId) external view returns (address operator);\n\n    /**\n     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n     *\n     * See {setApprovalForAll}\n     */\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev There's no code at `target` (it is not a contract).\n     */\n    error AddressEmptyCode(address target);\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        if (address(this).balance < amount) {\n            revert Errors.InsufficientBalance(address(this).balance, amount);\n        }\n\n        (bool success, bytes memory returndata) = recipient.call{value: amount}(\"\");\n        if (!success) {\n            _revert(returndata);\n        }\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason or custom error, it is bubbled\n     * up by this function (like regular Solidity function calls). However, if\n     * the call reverted with no returned reason, this function reverts with a\n     * {Errors.FailedCall} error.\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        if (address(this).balance < value) {\n            revert Errors.InsufficientBalance(address(this).balance, value);\n        }\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n     * of an unsuccessful call.\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata\n    ) internal view returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            // only check if target is a contract if the call was successful and the return data is empty\n            // otherwise we already know that it was a contract\n            if (returndata.length == 0 && target.code.length == 0) {\n                revert AddressEmptyCode(target);\n            }\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n     * revert reason or with a default {Errors.FailedCall} error.\n     */\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n     */\n    function _revert(bytes memory returndata) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            assembly (\"memory-safe\") {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert Errors.FailedCall();\n        }\n    }\n}\n"},"@openzeppelin/contracts/utils/Errors.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n    /**\n     * @dev The ETH balance of the account is not enough to perform the operation.\n     */\n    error InsufficientBalance(uint256 balance, uint256 needed);\n\n    /**\n     * @dev A call to an address target failed. The target may have reverted.\n     */\n    error FailedCall();\n\n    /**\n     * @dev The deployment failed.\n     */\n    error FailedDeployment();\n\n    /**\n     * @dev A necessary precompile is missing.\n     */\n    error MissingPrecompile(address);\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n *     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(newImplementation.code.length > 0);\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    struct Int256Slot {\n        int256 value;\n    }\n\n    struct StringSlot {\n        string value;\n    }\n\n    struct BytesSlot {\n        bytes value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n     */\n    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `StringSlot` with member `value` located at `slot`.\n     */\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n     */\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := store.slot\n        }\n    }\n\n    /**\n     * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n     */\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n     */\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := store.slot\n        }\n    }\n}\n"},"contracts/interfaces/IVideoPayment.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\nimport \"../libraries/VideoPaymentStorage.sol\";\n\n/**\n * @title IVideoPayment\n * @dev Interface for VideoPayment contract\n */\ninterface IVideoPayment {\n    // Content purchase information structure\n    struct ContentPurchaseInfo {\n        uint256 defaultViewCount; // Default view count (0=unlimited, >0=limited)\n        uint256 viewDuration; // View validity duration in seconds\n        bool isActive; // Whether content is purchasable\n        address[] supportedTokens; // Supported payment tokens (address(0)=native)\n        uint256[] tokenPrices; // Corresponding token prices\n        bool isUnlimitedViewing; // Whether unlimited viewing is allowed\n    }\n    // Custom errors\n    error NotOwner();\n    error NotAdmin();\n    error ContractPaused();\n    error InvalidContent();\n    error UnsupportedToken();\n    error InsufficientPayment();\n    error NoValidPermission();\n    error ArrayLengthMismatch();\n    error ZeroAddress();\n    error InvalidAmount();\n    error AlreadyPurchased();\n\n    // Events - Purchase related\n    event ContentPurchased(\n        address indexed user,\n        uint256 indexed contentId,\n        address paymentToken,\n        uint256 amount,\n        uint256 viewCount,\n        uint256 validUntil\n    );\n\n    event BatchPurchased(\n        address indexed user,\n        uint256[] contentIds,\n        address paymentToken,\n        uint256 totalAmount\n    );\n\n    event NFTPurchased(\n        address indexed user,\n        uint256 indexed contentId,\n        address nftContract,\n        uint256 tokenId\n    );\n\n    // Events - Permission related\n    event ViewConsumed(\n        address indexed user,\n        uint256 indexed contentId,\n        uint256 remainingViews\n    );\n\n    event PermissionExpired(address indexed user, uint256 indexed contentId);\n\n    event ViewCountAdded(\n        address indexed user,\n        uint256 indexed contentId,\n        uint256 addedCount,\n        uint256 totalRemaining\n    );\n\n    // Events - Management related\n    event AdminAdded(address indexed admin);\n    event AdminRemoved(address indexed admin);\n    event ContentConfigUpdated(uint256 indexed contentId);\n    event TokenPriceUpdated(\n        uint256 indexed contentId,\n        address indexed token,\n        uint256 price\n    );\n    event SupportedTokenAdded(address indexed token);\n    event SupportedTokenRemoved(address indexed token);\n    event Paused();\n    event Unpaused();\n\n    // Owner management functions\n    function addAdmin(address admin) external;\n    function removeAdmin(address admin) external;\n\n    // Content management functions\n    function setContentConfig(\n        uint256 contentId,\n        uint256 nativePrice,\n        uint256 defaultViewCount,\n        uint256 viewDuration,\n        bool isActive\n    ) external;\n    function batchSetContentConfig(\n        uint256[] memory contentIds,\n        uint256[] memory nativePrices,\n        uint256[] memory defaultViewCounts,\n        uint256[] memory viewDurations,\n        bool[] memory isActiveArray\n    ) external;\n    function isContentActive(uint256 contentId) external view returns (bool);\n\n    // Price management functions\n    function updateTokenPrice(\n        uint256 contentId,\n        address token,\n        uint256 price\n    ) external;\n    function batchUpdateTokenPrice(\n        uint256[] memory contentIds,\n        address token,\n        uint256[] memory prices\n    ) external;\n\n    // Payment token management functions\n    function addSupportedToken(address token) external;\n    function removeSupportedToken(address token) external;\n    function isSupportedToken(address token) external view returns (bool);\n\n    // Purchase functions\n    function purchaseContent(\n        uint256 contentId,\n        address paymentToken,\n        uint256 amount\n    ) external payable;\n    function batchPurchase(\n        uint256[] memory contentIds,\n        address paymentToken,\n        uint256 totalAmount\n    ) external payable;\n    function purchaseWithNFT(\n        uint256 contentId,\n        address nftContract,\n        uint256 tokenId\n    ) external;\n\n    // Permission verification functions\n    function hasViewPermission(\n        address user,\n        uint256 contentId\n    ) external view returns (bool);\n    function getUserPermissions(\n        address user,\n        uint256[] memory contentIds\n    ) external view returns (VideoPaymentStorage.ViewPermission[] memory);\n    function getPermissionDetails(\n        address user,\n        uint256 contentId\n    ) external view returns (VideoPaymentStorage.ViewPermission memory);\n    function consumeView(\n        address user,\n        uint256 contentId\n    ) external returns (bool);\n    function batchConsumeView(\n        address[] memory users,\n        uint256[] memory contentIds\n    ) external returns (bool[] memory);\n\n    // Emergency control functions\n    function pause() external;\n    function unpause() external;\n\n    // Content query functions\n    function getContentPurchaseInfo(\n        uint256 contentId\n    ) external view returns (ContentPurchaseInfo memory);\n\n    // Upgrade functions\n    function version() external view returns (uint256);\n    function migrate() external;\n}\n"},"contracts/libraries/VideoPaymentStorage.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\n/**\n * @title VideoPaymentStorage\n * @dev Storage layout for VideoPayment contract to ensure upgrade compatibility\n */\nlibrary VideoPaymentStorage {\n    // Storage layout version for upgrade compatibility\n    uint256 constant STORAGE_VERSION = 1;\n\n    struct ContentConfig {\n        mapping(address => uint256) tokenPrices; // ERC20 token prices\n        uint256 nativePrice; // Native coin price\n        uint256 defaultViewCount; // Default view count when purchased\n        uint256 viewDuration; // View validity duration in seconds\n        bool isActive; // Whether content is purchasable\n    }\n\n    struct ViewPermission {\n        uint256 purchaseTime; // Purchase timestamp\n        uint256 remainingViews; // Remaining view count\n        bool isValid; // Whether permission is valid\n    }\n\n    struct VideoPaymentStorageStruct {\n        // Owner and admin management\n        address owner;\n        mapping(address => bool) isAdmin;\n        // Content management\n        mapping(uint256 => ContentConfig) contentConfigs;\n        // User permissions\n        mapping(address => mapping(uint256 => ViewPermission)) userPermissions;\n        // Supported payment tokens\n        mapping(address => bool) supportedTokens;\n        // Emergency pause\n        bool paused;\n        // Contract version\n        uint256 version;\n        // Reserved storage slots for future upgrades\n        uint256[50] __gap;\n    }\n}\n"},"contracts/VideoPayment.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\";\nimport \"./interfaces/IVideoPayment.sol\";\nimport \"./libraries/VideoPaymentStorage.sol\";\n\n/**\n * @title VideoPayment\n * @dev Main contract for video content payment and access control\n */\ncontract VideoPayment is\n    Initializable,\n    UUPSUpgradeable,\n    ReentrancyGuardUpgradeable,\n    IVideoPayment\n{\n    using VideoPaymentStorage for VideoPaymentStorage.VideoPaymentStorageStruct;\n\n    // Storage\n    VideoPaymentStorage.VideoPaymentStorageStruct private _storage;\n\n    // Modifiers\n    modifier onlyOwner() {\n        if (msg.sender != _storage.owner) revert NotOwner();\n        _;\n    }\n\n    modifier onlyAdmin() {\n        if (!_storage.isAdmin[msg.sender]) revert NotAdmin();\n        _;\n    }\n\n    modifier whenNotPaused() {\n        if (_storage.paused) revert ContractPaused();\n        _;\n    }\n\n    modifier validContent(uint256 contentId) {\n        if (!_storage.contentConfigs[contentId].isActive)\n            revert InvalidContent();\n        _;\n    }\n\n    /// @custom:oz-upgrades-unsafe-allow constructor\n    constructor() {\n        _disableInitializers();\n    }\n\n    /**\n     * @dev Initialize the contract\n     * @param initialOwner Initial owner address\n     * @param initialAdmins Initial admin addresses array\n     * @param supportedTokenAddresses Initial supported token addresses array\n     */\n    function initialize(\n        address initialOwner,\n        address[] memory initialAdmins,\n        address[] memory supportedTokenAddresses\n    ) public initializer {\n        if (initialOwner == address(0)) revert ZeroAddress();\n\n        __UUPSUpgradeable_init();\n        __ReentrancyGuard_init();\n\n        _storage.owner = initialOwner;\n        _storage.version = 1;\n        _storage.paused = false;\n\n        // Add initial admins\n        for (uint256 i = 0; i < initialAdmins.length; i++) {\n            if (initialAdmins[i] != address(0)) {\n                _storage.isAdmin[initialAdmins[i]] = true;\n                emit AdminAdded(initialAdmins[i]);\n            }\n        }\n\n        // Add initial supported tokens\n        for (uint256 i = 0; i < supportedTokenAddresses.length; i++) {\n            if (supportedTokenAddresses[i] != address(0)) {\n                _storage.supportedTokens[supportedTokenAddresses[i]] = true;\n                emit SupportedTokenAdded(supportedTokenAddresses[i]);\n            }\n        }\n    }\n\n    /**\n     * @dev Get contract version\n     */\n    function version() external view returns (uint256) {\n        return _storage.version;\n    }\n\n    /**\n     * @dev Migration function for future upgrades\n     */\n    function migrate() external onlyOwner {\n        // This function will be implemented in future versions if needed\n        // Migration logic can be added here for data structure updates\n        // No event emission needed as this is not an upgrade operation\n    }\n\n    /**\n     * @dev Authorize upgrade (required by UUPSUpgradeable)\n     */\n    function _authorizeUpgrade(\n        address newImplementation\n    ) internal override onlyOwner {}\n\n    // ============ Owner Management Functions ============\n\n    /**\n     * @dev Add admin\n     * @param admin Admin address to add\n     */\n    function addAdmin(address admin) external onlyOwner {\n        if (admin == address(0)) revert ZeroAddress();\n        _storage.isAdmin[admin] = true;\n        emit AdminAdded(admin);\n    }\n\n    /**\n     * @dev Remove admin\n     * @param admin Admin address to remove\n     */\n    function removeAdmin(address admin) external onlyOwner {\n        if (admin == address(0)) revert ZeroAddress();\n        _storage.isAdmin[admin] = false;\n        emit AdminRemoved(admin);\n    }\n\n    // ============ Content Management Functions ============\n\n    /**\n     * @dev Set content configuration\n     * @param contentId Content ID\n     * @param nativePrice Native coin price\n     * @param defaultViewCount Default view count\n     * @param viewDuration View duration in seconds\n     * @param isActive Whether content is active\n     */\n    function setContentConfig(\n        uint256 contentId,\n        uint256 nativePrice,\n        uint256 defaultViewCount,\n        uint256 viewDuration,\n        bool isActive\n    ) external onlyAdmin {\n        _storage.contentConfigs[contentId].nativePrice = nativePrice;\n        _storage.contentConfigs[contentId].defaultViewCount = defaultViewCount;\n        _storage.contentConfigs[contentId].viewDuration = viewDuration;\n        _storage.contentConfigs[contentId].isActive = isActive;\n\n        emit ContentConfigUpdated(contentId);\n    }\n\n    /**\n     * @dev Batch set content configurations\n     * @param contentIds Content ID array\n     * @param nativePrices Native price array\n     * @param defaultViewCounts Default view count array\n     * @param viewDurations View duration array\n     * @param isActiveArray Active status array\n     */\n    function batchSetContentConfig(\n        uint256[] memory contentIds,\n        uint256[] memory nativePrices,\n        uint256[] memory defaultViewCounts,\n        uint256[] memory viewDurations,\n        bool[] memory isActiveArray\n    ) external onlyAdmin {\n        if (\n            contentIds.length != nativePrices.length ||\n            contentIds.length != defaultViewCounts.length ||\n            contentIds.length != viewDurations.length ||\n            contentIds.length != isActiveArray.length\n        ) revert ArrayLengthMismatch();\n\n        for (uint256 i = 0; i < contentIds.length; i++) {\n            _storage.contentConfigs[contentIds[i]].nativePrice = nativePrices[\n                i\n            ];\n            _storage\n                .contentConfigs[contentIds[i]]\n                .defaultViewCount = defaultViewCounts[i];\n            _storage.contentConfigs[contentIds[i]].viewDuration = viewDurations[\n                i\n            ];\n            _storage.contentConfigs[contentIds[i]].isActive = isActiveArray[i];\n\n            emit ContentConfigUpdated(contentIds[i]);\n        }\n    }\n\n    /**\n     * @dev Check if content is active\n     * @param contentId Content ID\n     * @return Whether content is active\n     */\n    function isContentActive(uint256 contentId) external view returns (bool) {\n        return _storage.contentConfigs[contentId].isActive;\n    }\n\n    // ============ Price Management Functions ============\n\n    /**\n     * @dev Update token price for content (address(0) for native token)\n     * @param contentId Content ID\n     * @param token Token address (address(0) for native)\n     * @param price New price\n     */\n    function updateTokenPrice(\n        uint256 contentId,\n        address token,\n        uint256 price\n    ) external onlyAdmin {\n        if (!_storage.supportedTokens[token]) revert UnsupportedToken();\n\n        _storage.contentConfigs[contentId].tokenPrices[token] = price;\n\n        // Sync with nativePrice for backward compatibility\n        if (token == address(0)) {\n            _storage.contentConfigs[contentId].nativePrice = price;\n        }\n\n        emit TokenPriceUpdated(contentId, token, price);\n    }\n\n    /**\n     * @dev Batch update token prices for multiple contents (address(0) for native token)\n     * @param contentIds Content ID array\n     * @param token Token address (address(0) for native)\n     * @param prices Price array\n     */\n    function batchUpdateTokenPrice(\n        uint256[] memory contentIds,\n        address token,\n        uint256[] memory prices\n    ) external onlyAdmin {\n        if (contentIds.length != prices.length) revert ArrayLengthMismatch();\n        if (!_storage.supportedTokens[token]) revert UnsupportedToken();\n\n        for (uint256 i = 0; i < contentIds.length; i++) {\n            _storage.contentConfigs[contentIds[i]].tokenPrices[token] = prices[\n                i\n            ];\n\n            // Sync with nativePrice for backward compatibility\n            if (token == address(0)) {\n                _storage.contentConfigs[contentIds[i]].nativePrice = prices[i];\n            }\n\n            emit TokenPriceUpdated(contentIds[i], token, prices[i]);\n        }\n    }\n\n    // ============ Payment Token Management Functions ============\n\n    /**\n     * @dev Add supported token (address(0) for native token)\n     * @param token Token address to add (address(0) for native)\n     */\n    function addSupportedToken(address token) external onlyAdmin {\n        _storage.supportedTokens[token] = true;\n        emit SupportedTokenAdded(token);\n    }\n\n    /**\n     * @dev Remove supported token (address(0) for native token)\n     * @param token Token address to remove (address(0) for native)\n     */\n    function removeSupportedToken(address token) external onlyAdmin {\n        _storage.supportedTokens[token] = false;\n        emit SupportedTokenRemoved(token);\n    }\n\n    /**\n     * @dev Check if token is supported\n     * @param token Token address to check\n     * @return Whether token is supported\n     */\n    function isSupportedToken(address token) external view returns (bool) {\n        return _storage.supportedTokens[token];\n    }\n\n    // ============ Purchase Functions ============\n\n    /**\n     * @dev Purchase content with token (address(0) for native token)\n     * @param contentId Content ID\n     * @param paymentToken Payment token address (address(0) for native)\n     * @param amount Payment amount\n     */\n    function purchaseContent(\n        uint256 contentId,\n        address paymentToken,\n        uint256 amount\n    ) external payable nonReentrant whenNotPaused validContent(contentId) {\n        if (!_storage.supportedTokens[paymentToken]) revert UnsupportedToken();\n\n        uint256 expectedPrice;\n        if (paymentToken == address(0)) {\n            // Native token payment\n            expectedPrice = _storage.contentConfigs[contentId].nativePrice;\n            if (msg.value != expectedPrice) revert InsufficientPayment();\n            if (amount != msg.value) revert InsufficientPayment();\n        } else {\n            // ERC20 token payment\n            expectedPrice = _storage.contentConfigs[contentId].tokenPrices[\n                paymentToken\n            ];\n            if (expectedPrice != amount) revert InsufficientPayment();\n            IERC20(paymentToken).transferFrom(\n                msg.sender,\n                address(this),\n                amount\n            );\n        }\n\n        // Create view permission\n        _updateViewPermission(msg.sender, contentId);\n\n        // Emit event\n        uint256 validUntil = block.timestamp +\n            _storage.contentConfigs[contentId].viewDuration;\n        emit ContentPurchased(\n            msg.sender,\n            contentId,\n            paymentToken,\n            amount,\n            _storage.contentConfigs[contentId].defaultViewCount,\n            validUntil\n        );\n    }\n\n    /**\n     * @dev Batch purchase content with token (address(0) for native token)\n     * @param contentIds Content ID array\n     * @param paymentToken Payment token address (address(0) for native)\n     * @param totalAmount Total payment amount\n     */\n    function batchPurchase(\n        uint256[] memory contentIds,\n        address paymentToken,\n        uint256 totalAmount\n    ) external payable nonReentrant whenNotPaused {\n        if (!_storage.supportedTokens[paymentToken]) revert UnsupportedToken();\n\n        uint256 expectedTotal = 0;\n        for (uint256 i = 0; i < contentIds.length; i++) {\n            if (!_storage.contentConfigs[contentIds[i]].isActive)\n                revert InvalidContent();\n\n            if (paymentToken == address(0)) {\n                expectedTotal += _storage\n                    .contentConfigs[contentIds[i]]\n                    .nativePrice;\n            } else {\n                expectedTotal += _storage\n                    .contentConfigs[contentIds[i]]\n                    .tokenPrices[paymentToken];\n            }\n        }\n\n        if (totalAmount != expectedTotal) revert InsufficientPayment();\n\n        if (paymentToken == address(0)) {\n            // Native token payment\n            if (msg.value != totalAmount) revert InsufficientPayment();\n        } else {\n            // ERC20 token payment\n            IERC20(paymentToken).transferFrom(\n                msg.sender,\n                address(this),\n                totalAmount\n            );\n        }\n\n        // Create view permissions\n        for (uint256 i = 0; i < contentIds.length; i++) {\n            _updateViewPermission(msg.sender, contentIds[i]);\n        }\n\n        // Emit event\n        emit BatchPurchased(msg.sender, contentIds, paymentToken, totalAmount);\n    }\n\n    /**\n     * @dev Purchase content with NFT\n     * @param contentId Content ID\n     * @param nftContract NFT contract address\n     * @param tokenId NFT token ID\n     */\n    function purchaseWithNFT(\n        uint256 contentId,\n        address nftContract,\n        uint256 tokenId\n    ) external nonReentrant whenNotPaused validContent(contentId) {\n        // Check NFT ownership\n        if (IERC721(nftContract).ownerOf(tokenId) != msg.sender)\n            revert NoValidPermission();\n\n        // Transfer NFT (burn it by transferring to this contract)\n        IERC721(nftContract).transferFrom(msg.sender, address(this), tokenId);\n\n        // Create view permission\n        _updateViewPermission(msg.sender, contentId);\n\n        // Emit event\n        emit NFTPurchased(msg.sender, contentId, nftContract, tokenId);\n    }\n\n    /**\n     * @dev Internal function to update view permission\n     * @param user User address\n     * @param contentId Content ID\n     */\n    function _updateViewPermission(address user, uint256 contentId) internal {\n        VideoPaymentStorage.ViewPermission storage existing = _storage\n            .userPermissions[user][contentId];\n        uint256 defaultViews = _storage\n            .contentConfigs[contentId]\n            .defaultViewCount;\n        uint256 duration = _storage.contentConfigs[contentId].viewDuration;\n\n        if (defaultViews == 0) {\n            // One-time purchase: Check if already purchased and still valid\n            if (\n                existing.isValid &&\n                block.timestamp <= existing.purchaseTime + duration\n            ) {\n                // User already has valid permission, no need to do anything\n                // This allows the purchase to succeed without duplicate payment\n                return;\n            }\n            // Create new permission for unlimited viewing or refresh expired permission\n            existing.purchaseTime = block.timestamp;\n            existing.remainingViews = 0; // 0 means unlimited\n            existing.isValid = true;\n        } else {\n            // View-count based: Add to existing or create new\n            if (\n                existing.isValid &&\n                block.timestamp <= existing.purchaseTime + duration\n            ) {\n                // Existing permission is still valid, accumulate view count\n                existing.remainingViews += defaultViews;\n                emit ViewCountAdded(\n                    user,\n                    contentId,\n                    defaultViews,\n                    existing.remainingViews\n                );\n            } else {\n                // No existing permission or expired, create new\n                existing.purchaseTime = block.timestamp;\n                existing.remainingViews = defaultViews;\n                existing.isValid = true;\n            }\n        }\n    }\n\n    // ============ Permission Verification Functions ============\n\n    /**\n     * @dev Check if user has valid view permission\n     * @param user User address\n     * @param contentId Content ID\n     * @return Whether user has valid permission\n     */\n    function hasViewPermission(\n        address user,\n        uint256 contentId\n    ) external view returns (bool) {\n        VideoPaymentStorage.ViewPermission memory permission = _storage\n            .userPermissions[user][contentId];\n\n        if (!permission.isValid) {\n            return false;\n        }\n\n        // Check if permission has expired\n        if (\n            block.timestamp >\n            permission.purchaseTime +\n                _storage.contentConfigs[contentId].viewDuration\n        ) {\n            return false;\n        }\n\n        // Get default view count to determine content type\n        uint256 defaultViews = _storage\n            .contentConfigs[contentId]\n            .defaultViewCount;\n\n        if (defaultViews == 0) {\n            // One-time purchase: valid if not expired (remainingViews should be 0)\n            return true;\n        } else {\n            // View-count based: valid if there are remaining views\n            return permission.remainingViews > 0;\n        }\n    }\n\n    /**\n     * @dev Get user permissions for multiple contents\n     * @param user User address\n     * @param contentIds Content ID array\n     * @return Permission array\n     */\n    function getUserPermissions(\n        address user,\n        uint256[] memory contentIds\n    ) external view returns (VideoPaymentStorage.ViewPermission[] memory) {\n        VideoPaymentStorage.ViewPermission[]\n            memory permissions = new VideoPaymentStorage.ViewPermission[](\n                contentIds.length\n            );\n\n        for (uint256 i = 0; i < contentIds.length; i++) {\n            permissions[i] = _storage.userPermissions[user][contentIds[i]];\n        }\n\n        return permissions;\n    }\n\n    /**\n     * @dev Get detailed permission info\n     * @param user User address\n     * @param contentId Content ID\n     * @return Permission details\n     */\n    function getPermissionDetails(\n        address user,\n        uint256 contentId\n    ) external view returns (VideoPaymentStorage.ViewPermission memory) {\n        return _storage.userPermissions[user][contentId];\n    }\n\n    /**\n     * @dev Consume one view for user\n     * @param user User address\n     * @param contentId Content ID\n     * @return Success status\n     */\n    function consumeView(\n        address user,\n        uint256 contentId\n    ) external onlyAdmin returns (bool) {\n        VideoPaymentStorage.ViewPermission storage permission = _storage\n            .userPermissions[user][contentId];\n\n        if (!permission.isValid) {\n            revert NoValidPermission();\n        }\n\n        // Check if permission has expired\n        if (\n            block.timestamp >\n            permission.purchaseTime +\n                _storage.contentConfigs[contentId].viewDuration\n        ) {\n            revert NoValidPermission();\n        }\n\n        // Get default view count to determine if this is unlimited or count-based\n        uint256 defaultViews = _storage\n            .contentConfigs[contentId]\n            .defaultViewCount;\n\n        if (defaultViews == 0) {\n            // One-time purchase with unlimited viewing - don't decrement\n            emit ViewConsumed(user, contentId, 0); // 0 indicates unlimited\n            return true;\n        } else {\n            // View-count based purchase - check and decrement\n            if (permission.remainingViews == 0) {\n                revert NoValidPermission();\n            }\n\n            // Consume one view\n            permission.remainingViews--;\n\n            emit ViewConsumed(user, contentId, permission.remainingViews);\n\n            // Mark as invalid if no views remaining\n            if (permission.remainingViews == 0) {\n                permission.isValid = false;\n                emit PermissionExpired(user, contentId);\n            }\n\n            return true;\n        }\n    }\n\n    /**\n     * @dev Batch consume views for multiple users\n     * @param users User address array\n     * @param contentIds Content ID array\n     * @return Success status array\n     */\n    function batchConsumeView(\n        address[] memory users,\n        uint256[] memory contentIds\n    ) external onlyAdmin returns (bool[] memory) {\n        if (users.length != contentIds.length) revert ArrayLengthMismatch();\n\n        bool[] memory results = new bool[](users.length);\n\n        for (uint256 i = 0; i < users.length; i++) {\n            VideoPaymentStorage.ViewPermission storage permission = _storage\n                .userPermissions[users[i]][contentIds[i]];\n\n            if (!permission.isValid) {\n                results[i] = false;\n                continue;\n            }\n\n            // Check if permission has expired\n            if (\n                block.timestamp >\n                permission.purchaseTime +\n                    _storage.contentConfigs[contentIds[i]].viewDuration\n            ) {\n                results[i] = false;\n                continue;\n            }\n\n            // Get default view count to determine if this is unlimited or count-based\n            uint256 defaultViews = _storage\n                .contentConfigs[contentIds[i]]\n                .defaultViewCount;\n\n            if (defaultViews == 0) {\n                // One-time purchase with unlimited viewing - don't decrement\n                emit ViewConsumed(users[i], contentIds[i], 0); // 0 indicates unlimited\n                results[i] = true;\n            } else {\n                // View-count based purchase - check and decrement\n                if (permission.remainingViews == 0) {\n                    results[i] = false;\n                    continue;\n                }\n\n                // Consume one view\n                permission.remainingViews--;\n                emit ViewConsumed(\n                    users[i],\n                    contentIds[i],\n                    permission.remainingViews\n                );\n\n                // Mark as invalid if no views remaining\n                if (permission.remainingViews == 0) {\n                    permission.isValid = false;\n                    emit PermissionExpired(users[i], contentIds[i]);\n                }\n\n                results[i] = true;\n            }\n        }\n\n        return results;\n    }\n\n    // ============ Content Query Functions ============\n\n    /**\n     * @dev Get content purchase information\n     * @param contentId Content ID\n     * @return Purchase information including supported tokens and prices\n     */\n    function getContentPurchaseInfo(\n        uint256 contentId\n    ) external view returns (IVideoPayment.ContentPurchaseInfo memory) {\n        VideoPaymentStorage.ContentConfig storage config = _storage\n            .contentConfigs[contentId];\n\n        // Get supported tokens for this content\n        (\n            address[] memory supportedTokens,\n            uint256[] memory prices\n        ) = _getSupportedTokensForContent(contentId);\n\n        return\n            IVideoPayment.ContentPurchaseInfo({\n                defaultViewCount: config.defaultViewCount,\n                viewDuration: config.viewDuration,\n                isActive: config.isActive,\n                supportedTokens: supportedTokens,\n                tokenPrices: prices,\n                isUnlimitedViewing: config.defaultViewCount == 0\n            });\n    }\n\n    /**\n     * @dev Internal function to get supported tokens and prices for content\n     * @param contentId Content ID\n     * @return supportedTokens Array of supported token addresses\n     * @return prices Array of corresponding prices\n     */\n    function _getSupportedTokensForContent(\n        uint256 contentId\n    )\n        internal\n        view\n        returns (address[] memory supportedTokens, uint256[] memory prices)\n    {\n        // Count supported tokens\n        uint256 count = 0;\n\n        // Check native token\n        if (\n            _storage.supportedTokens[address(0)] &&\n            _storage.contentConfigs[contentId].nativePrice > 0\n        ) {\n            count++;\n        }\n\n        // This is a simplified approach - in practice, you'd need to iterate through known tokens\n        // For now, we'll create arrays for known supported tokens from the contract state\n        // This requires tracking supported tokens in a more efficient way\n\n        supportedTokens = new address[](count);\n        prices = new uint256[](count);\n\n        uint256 index = 0;\n\n        // Add native token if supported and has price\n        if (\n            _storage.supportedTokens[address(0)] &&\n            _storage.contentConfigs[contentId].nativePrice > 0\n        ) {\n            supportedTokens[index] = address(0);\n            prices[index] = _storage.contentConfigs[contentId].nativePrice;\n            index++;\n        }\n\n        // Note: For ERC20 tokens, we'd need to iterate through known tokens\n        // This implementation is simplified for the upgrade\n    }\n\n    // ============ Emergency Control Functions ============\n\n    /**\n     * @dev Pause contract\n     */\n    function pause() external onlyOwner {\n        _storage.paused = true;\n        emit Paused();\n    }\n\n    /**\n     * @dev Unpause contract\n     */\n    function unpause() external onlyOwner {\n        _storage.paused = false;\n        emit Unpaused();\n    }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":200},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"sources":{"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","exportedSymbols":{"Initializable":[267]},"id":268,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"113:24:0"},{"abstract":true,"baseContracts":[],"canonicalName":"Initializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"139:2209:0","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 ```solidity\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":267,"linearizedBaseContracts":[267],"name":"Initializable","nameLocation":"2367:13:0","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Initializable.InitializableStorage","documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"2387:293:0","text":" @dev Storage of the initializable contract.\n It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n when using with upgradeable contracts.\n @custom:storage-location erc7201:openzeppelin.storage.Initializable"},"id":10,"members":[{"constant":false,"id":6,"mutability":"mutable","name":"_initialized","nameLocation":"2820:12:0","nodeType":"VariableDeclaration","scope":10,"src":"2813:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":5,"name":"uint64","nodeType":"ElementaryTypeName","src":"2813:6:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":9,"mutability":"mutable","name":"_initializing","nameLocation":"2955:13:0","nodeType":"VariableDeclaration","scope":10,"src":"2950:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8,"name":"bool","nodeType":"ElementaryTypeName","src":"2950:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"InitializableStorage","nameLocation":"2692:20:0","nodeType":"StructDefinition","scope":267,"src":"2685:290:0","visibility":"public"},{"constant":true,"id":13,"mutability":"constant","name":"INITIALIZABLE_STORAGE","nameLocation":"3123:21:0","nodeType":"VariableDeclaration","scope":267,"src":"3098:115:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3098:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307866306335376531363834306466303430663135303838646332663831666533393163333932336265633733653233613936363265666339633232396336613030","id":12,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3147:66:0","typeDescriptions":{"typeIdentifier":"t_rational_108904022758810753673719992590105913556127789646572562039383141376366747609600_by_1","typeString":"int_const 1089...(70 digits omitted)...9600"},"value":"0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00"},"visibility":"private"},{"documentation":{"id":14,"nodeType":"StructuredDocumentation","src":"3220:60:0","text":" @dev The contract is already initialized."},"errorSelector":"f92ee8a9","id":16,"name":"InvalidInitialization","nameLocation":"3291:21:0","nodeType":"ErrorDefinition","parameters":{"id":15,"nodeType":"ParameterList","parameters":[],"src":"3312:2:0"},"src":"3285:30:0"},{"documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"3321:57:0","text":" @dev The contract is not initializing."},"errorSelector":"d7e6bcf8","id":19,"name":"NotInitializing","nameLocation":"3389:15:0","nodeType":"ErrorDefinition","parameters":{"id":18,"nodeType":"ParameterList","parameters":[],"src":"3404:2:0"},"src":"3383:24:0"},{"anonymous":false,"documentation":{"id":20,"nodeType":"StructuredDocumentation","src":"3413:90:0","text":" @dev Triggered when the contract has been initialized or reinitialized."},"eventSelector":"c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2","id":24,"name":"Initialized","nameLocation":"3514:11:0","nodeType":"EventDefinition","parameters":{"id":23,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22,"indexed":false,"mutability":"mutable","name":"version","nameLocation":"3533:7:0","nodeType":"VariableDeclaration","scope":24,"src":"3526:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":21,"name":"uint64","nodeType":"ElementaryTypeName","src":"3526:6:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"3525:16:0"},"src":"3508:34:0"},{"body":{"id":106,"nodeType":"Block","src":"4092:1079:0","statements":[{"assignments":[29],"declarations":[{"constant":false,"id":29,"mutability":"mutable","name":"$","nameLocation":"4187:1:0","nodeType":"VariableDeclaration","scope":106,"src":"4158:30:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"},"typeName":{"id":28,"nodeType":"UserDefinedTypeName","pathNode":{"id":27,"name":"InitializableStorage","nameLocations":["4158:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":10,"src":"4158:20:0"},"referencedDeclaration":10,"src":"4158:20:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"}},"visibility":"internal"}],"id":32,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":30,"name":"_getInitializableStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"4191:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$","typeString":"function () pure returns (struct Initializable.InitializableStorage storage pointer)"}},"id":31,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4191:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4158:59:0"},{"assignments":[34],"declarations":[{"constant":false,"id":34,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"4284:14:0","nodeType":"VariableDeclaration","scope":106,"src":"4279:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33,"name":"bool","nodeType":"ElementaryTypeName","src":"4279:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":38,"initialValue":{"id":37,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4301:16:0","subExpression":{"expression":{"id":35,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"4302:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":36,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4304:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"4302:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4279:38:0"},{"assignments":[40],"declarations":[{"constant":false,"id":40,"mutability":"mutable","name":"initialized","nameLocation":"4334:11:0","nodeType":"VariableDeclaration","scope":106,"src":"4327:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":39,"name":"uint64","nodeType":"ElementaryTypeName","src":"4327:6:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"id":43,"initialValue":{"expression":{"id":41,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"4348:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":42,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4350:12:0","memberName":"_initialized","nodeType":"MemberAccess","referencedDeclaration":6,"src":"4348:14:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"4327:35:0"},{"assignments":[45],"declarations":[{"constant":false,"id":45,"mutability":"mutable","name":"initialSetup","nameLocation":"4709:12:0","nodeType":"VariableDeclaration","scope":106,"src":"4704:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":44,"name":"bool","nodeType":"ElementaryTypeName","src":"4704:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":51,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":48,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"4724:11:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":47,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4739:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4724:16:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":49,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34,"src":"4744:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4724:34:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4704:54:0"},{"assignments":[53],"declarations":[{"constant":false,"id":53,"mutability":"mutable","name":"construction","nameLocation":"4773:12:0","nodeType":"VariableDeclaration","scope":106,"src":"4768:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":52,"name":"bool","nodeType":"ElementaryTypeName","src":"4768:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":66,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":65,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":56,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"4788:11:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":55,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4803:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4788:16:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":64,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":59,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4816:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Initializable_$267","typeString":"contract Initializable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Initializable_$267","typeString":"contract Initializable"}],"id":58,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4808:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":57,"name":"address","nodeType":"ElementaryTypeName","src":"4808:7:0","typeDescriptions":{}}},"id":60,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4808:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4822:4:0","memberName":"code","nodeType":"MemberAccess","src":"4808:18:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":62,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4827:6:0","memberName":"length","nodeType":"MemberAccess","src":"4808:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":63,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4808:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4788:50:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4768:70:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":71,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":68,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4853:13:0","subExpression":{"id":67,"name":"initialSetup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45,"src":"4854:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":70,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4870:13:0","subExpression":{"id":69,"name":"construction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53,"src":"4871:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4853:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":76,"nodeType":"IfStatement","src":"4849:91:0","trueBody":{"id":75,"nodeType":"Block","src":"4885:55:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":72,"name":"InvalidInitialization","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16,"src":"4906:21:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":73,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4906:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":74,"nodeType":"RevertStatement","src":"4899:30:0"}]}},{"expression":{"id":81,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":77,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"4949:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":79,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4951:12:0","memberName":"_initialized","nodeType":"MemberAccess","referencedDeclaration":6,"src":"4949:14:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":80,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4966:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4949:18:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":82,"nodeType":"ExpressionStatement","src":"4949:18:0"},{"condition":{"id":83,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34,"src":"4981:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":91,"nodeType":"IfStatement","src":"4977:67:0","trueBody":{"id":90,"nodeType":"Block","src":"4997:47:0","statements":[{"expression":{"id":88,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":84,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5011:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":86,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5013:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"5011:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":87,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5029:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5011:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":89,"nodeType":"ExpressionStatement","src":"5011:22:0"}]}},{"id":92,"nodeType":"PlaceholderStatement","src":"5053:1:0"},{"condition":{"id":93,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34,"src":"5068:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":105,"nodeType":"IfStatement","src":"5064:101:0","trueBody":{"id":104,"nodeType":"Block","src":"5084:81:0","statements":[{"expression":{"id":98,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":94,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"5098:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":96,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5100:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"5098:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":97,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5116:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5098:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":99,"nodeType":"ExpressionStatement","src":"5098:23:0"},{"eventCall":{"arguments":[{"hexValue":"31","id":101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5152:1:0","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":100,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"5140:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5140:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":103,"nodeType":"EmitStatement","src":"5135:19:0"}]}}]},"documentation":{"id":25,"nodeType":"StructuredDocumentation","src":"3548:516:0","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 in the context of a constructor an `initializer` may be invoked any\n number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n production.\n Emits an {Initialized} event."},"id":107,"name":"initializer","nameLocation":"4078:11:0","nodeType":"ModifierDefinition","parameters":{"id":26,"nodeType":"ParameterList","parameters":[],"src":"4089:2:0"},"src":"4069:1102:0","virtual":false,"visibility":"internal"},{"body":{"id":153,"nodeType":"Block","src":"6289:392:0","statements":[{"assignments":[114],"declarations":[{"constant":false,"id":114,"mutability":"mutable","name":"$","nameLocation":"6384:1:0","nodeType":"VariableDeclaration","scope":153,"src":"6355:30:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"},"typeName":{"id":113,"nodeType":"UserDefinedTypeName","pathNode":{"id":112,"name":"InitializableStorage","nameLocations":["6355:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":10,"src":"6355:20:0"},"referencedDeclaration":10,"src":"6355:20:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"}},"visibility":"internal"}],"id":117,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":115,"name":"_getInitializableStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"6388:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$","typeString":"function () pure returns (struct Initializable.InitializableStorage storage pointer)"}},"id":116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6388:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6355:59:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":118,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"6429:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6431:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"6429:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":120,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"6448:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6450:12:0","memberName":"_initialized","nodeType":"MemberAccess","referencedDeclaration":6,"src":"6448:14:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":122,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110,"src":"6466:7:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"6448:25:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6429:44:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":129,"nodeType":"IfStatement","src":"6425:105:0","trueBody":{"id":128,"nodeType":"Block","src":"6475:55:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":125,"name":"InvalidInitialization","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16,"src":"6496:21:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6496:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":127,"nodeType":"RevertStatement","src":"6489:30:0"}]}},{"expression":{"id":134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":130,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"6539:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6541:12:0","memberName":"_initialized","nodeType":"MemberAccess","referencedDeclaration":6,"src":"6539:14:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":133,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110,"src":"6556:7:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"6539:24:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":135,"nodeType":"ExpressionStatement","src":"6539:24:0"},{"expression":{"id":140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":136,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"6573:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6575:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"6573:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6591:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6573:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":141,"nodeType":"ExpressionStatement","src":"6573:22:0"},{"id":142,"nodeType":"PlaceholderStatement","src":"6605:1:0"},{"expression":{"id":147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":143,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"6616:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6618:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"6616:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6634:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6616:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":148,"nodeType":"ExpressionStatement","src":"6616:23:0"},{"eventCall":{"arguments":[{"id":150,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110,"src":"6666:7:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":149,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"6654:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6654:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":152,"nodeType":"EmitStatement","src":"6649:25:0"}]},"documentation":{"id":108,"nodeType":"StructuredDocumentation","src":"5177:1068:0","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 2**64 - 1 will prevent any future reinitialization.\n Emits an {Initialized} event."},"id":154,"name":"reinitializer","nameLocation":"6259:13:0","nodeType":"ModifierDefinition","parameters":{"id":111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110,"mutability":"mutable","name":"version","nameLocation":"6280:7:0","nodeType":"VariableDeclaration","scope":154,"src":"6273:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":109,"name":"uint64","nodeType":"ElementaryTypeName","src":"6273:6:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6272:16:0"},"src":"6250:431:0","virtual":false,"visibility":"internal"},{"body":{"id":161,"nodeType":"Block","src":"6919:48:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":157,"name":"_checkInitializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":175,"src":"6929:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6929:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":159,"nodeType":"ExpressionStatement","src":"6929:20:0"},{"id":160,"nodeType":"PlaceholderStatement","src":"6959:1:0"}]},"documentation":{"id":155,"nodeType":"StructuredDocumentation","src":"6687:199:0","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":162,"name":"onlyInitializing","nameLocation":"6900:16:0","nodeType":"ModifierDefinition","parameters":{"id":156,"nodeType":"ParameterList","parameters":[],"src":"6916:2:0"},"src":"6891:76:0","virtual":false,"visibility":"internal"},{"body":{"id":174,"nodeType":"Block","src":"7134:89:0","statements":[{"condition":{"id":168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7148:18:0","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":166,"name":"_isInitializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":243,"src":"7149:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7149:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":173,"nodeType":"IfStatement","src":"7144:73:0","trueBody":{"id":172,"nodeType":"Block","src":"7168:49:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":169,"name":"NotInitializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19,"src":"7189:15:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7189:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":171,"nodeType":"RevertStatement","src":"7182:24:0"}]}}]},"documentation":{"id":163,"nodeType":"StructuredDocumentation","src":"6973:104:0","text":" @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}."},"id":175,"implemented":true,"kind":"function","modifiers":[],"name":"_checkInitializing","nameLocation":"7091:18:0","nodeType":"FunctionDefinition","parameters":{"id":164,"nodeType":"ParameterList","parameters":[],"src":"7109:2:0"},"returnParameters":{"id":165,"nodeType":"ParameterList","parameters":[],"src":"7134:0:0"},"scope":267,"src":"7082:141:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":220,"nodeType":"Block","src":"7758:373:0","statements":[{"assignments":[181],"declarations":[{"constant":false,"id":181,"mutability":"mutable","name":"$","nameLocation":"7853:1:0","nodeType":"VariableDeclaration","scope":220,"src":"7824:30:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"},"typeName":{"id":180,"nodeType":"UserDefinedTypeName","pathNode":{"id":179,"name":"InitializableStorage","nameLocations":["7824:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":10,"src":"7824:20:0"},"referencedDeclaration":10,"src":"7824:20:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"}},"visibility":"internal"}],"id":184,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":182,"name":"_getInitializableStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"7857:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$","typeString":"function () pure returns (struct Initializable.InitializableStorage storage pointer)"}},"id":183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7857:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7824:59:0"},{"condition":{"expression":{"id":185,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":181,"src":"7898:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7900:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"7898:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":191,"nodeType":"IfStatement","src":"7894:76:0","trueBody":{"id":190,"nodeType":"Block","src":"7915:55:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":187,"name":"InvalidInitialization","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16,"src":"7936:21:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7936:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":189,"nodeType":"RevertStatement","src":"7929:30:0"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":192,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":181,"src":"7983:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7985:12:0","memberName":"_initialized","nodeType":"MemberAccess","referencedDeclaration":6,"src":"7983:14:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8006:6:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":195,"name":"uint64","nodeType":"ElementaryTypeName","src":"8006:6:0","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":194,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8001:4:0","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8001:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8014:3:0","memberName":"max","nodeType":"MemberAccess","src":"8001:16:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"7983:34:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":219,"nodeType":"IfStatement","src":"7979:146:0","trueBody":{"id":218,"nodeType":"Block","src":"8019:106:0","statements":[{"expression":{"id":208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":200,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":181,"src":"8033:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8035:12:0","memberName":"_initialized","nodeType":"MemberAccess","referencedDeclaration":6,"src":"8033:14:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8055:6:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":204,"name":"uint64","nodeType":"ElementaryTypeName","src":"8055:6:0","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":203,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8050:4:0","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8050:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8063:3:0","memberName":"max","nodeType":"MemberAccess","src":"8050:16:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"8033:33:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":209,"nodeType":"ExpressionStatement","src":"8033:33:0"},{"eventCall":{"arguments":[{"expression":{"arguments":[{"id":213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8102:6:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":212,"name":"uint64","nodeType":"ElementaryTypeName","src":"8102:6:0","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":211,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8097:4:0","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8097:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8110:3:0","memberName":"max","nodeType":"MemberAccess","src":"8097:16:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":210,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"8085:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8085:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":217,"nodeType":"EmitStatement","src":"8080:34:0"}]}}]},"documentation":{"id":176,"nodeType":"StructuredDocumentation","src":"7229:475:0","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":221,"implemented":true,"kind":"function","modifiers":[],"name":"_disableInitializers","nameLocation":"7718:20:0","nodeType":"FunctionDefinition","parameters":{"id":177,"nodeType":"ParameterList","parameters":[],"src":"7738:2:0"},"returnParameters":{"id":178,"nodeType":"ParameterList","parameters":[],"src":"7758:0:0"},"scope":267,"src":"7709:422:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":231,"nodeType":"Block","src":"8306:63:0","statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":227,"name":"_getInitializableStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"8323:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$","typeString":"function () pure returns (struct Initializable.InitializableStorage storage pointer)"}},"id":228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8323:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8350:12:0","memberName":"_initialized","nodeType":"MemberAccess","referencedDeclaration":6,"src":"8323:39:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":226,"id":230,"nodeType":"Return","src":"8316:46:0"}]},"documentation":{"id":222,"nodeType":"StructuredDocumentation","src":"8137:99:0","text":" @dev Returns the highest version that has been initialized. See {reinitializer}."},"id":232,"implemented":true,"kind":"function","modifiers":[],"name":"_getInitializedVersion","nameLocation":"8250:22:0","nodeType":"FunctionDefinition","parameters":{"id":223,"nodeType":"ParameterList","parameters":[],"src":"8272:2:0"},"returnParameters":{"id":226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":232,"src":"8298:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":224,"name":"uint64","nodeType":"ElementaryTypeName","src":"8298:6:0","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"8297:8:0"},"scope":267,"src":"8241:128:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":242,"nodeType":"Block","src":"8541:64:0","statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":238,"name":"_getInitializableStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"8558:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$10_storage_ptr_$","typeString":"function () pure returns (struct Initializable.InitializableStorage storage pointer)"}},"id":239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8558:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage storage pointer"}},"id":240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8585:13:0","memberName":"_initializing","nodeType":"MemberAccess","referencedDeclaration":9,"src":"8558:40:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":237,"id":241,"nodeType":"Return","src":"8551:47:0"}]},"documentation":{"id":233,"nodeType":"StructuredDocumentation","src":"8375:105:0","text":" @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}."},"id":243,"implemented":true,"kind":"function","modifiers":[],"name":"_isInitializing","nameLocation":"8494:15:0","nodeType":"FunctionDefinition","parameters":{"id":234,"nodeType":"ParameterList","parameters":[],"src":"8509:2:0"},"returnParameters":{"id":237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":243,"src":"8535:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":235,"name":"bool","nodeType":"ElementaryTypeName","src":"8535:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8534:6:0"},"scope":267,"src":"8485:120:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":251,"nodeType":"Block","src":"8896:45:0","statements":[{"expression":{"id":249,"name":"INITIALIZABLE_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"8913:21:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":248,"id":250,"nodeType":"Return","src":"8906:28:0"}]},"documentation":{"id":244,"nodeType":"StructuredDocumentation","src":"8611:203:0","text":" @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\n NOTE: Consider following the ERC-7201 formula to derive storage locations."},"id":252,"implemented":true,"kind":"function","modifiers":[],"name":"_initializableStorageSlot","nameLocation":"8828:25:0","nodeType":"FunctionDefinition","parameters":{"id":245,"nodeType":"ParameterList","parameters":[],"src":"8853:2:0"},"returnParameters":{"id":248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":247,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":252,"src":"8887:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":246,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8887:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8886:9:0"},"scope":267,"src":"8819:122:0","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":265,"nodeType":"Block","src":"9161:115:0","statements":[{"assignments":[260],"declarations":[{"constant":false,"id":260,"mutability":"mutable","name":"slot","nameLocation":"9179:4:0","nodeType":"VariableDeclaration","scope":265,"src":"9171:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":259,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9171:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":263,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":261,"name":"_initializableStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":252,"src":"9186:25:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bytes32_$","typeString":"function () pure returns (bytes32)"}},"id":262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9186:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9171:42:0"},{"AST":{"nativeSrc":"9232:38:0","nodeType":"YulBlock","src":"9232:38:0","statements":[{"nativeSrc":"9246:14:0","nodeType":"YulAssignment","src":"9246:14:0","value":{"name":"slot","nativeSrc":"9256:4:0","nodeType":"YulIdentifier","src":"9256:4:0"},"variableNames":[{"name":"$.slot","nativeSrc":"9246:6:0","nodeType":"YulIdentifier","src":"9246:6:0"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":257,"isOffset":false,"isSlot":true,"src":"9246:6:0","suffix":"slot","valueSize":1},{"declaration":260,"isOffset":false,"isSlot":false,"src":"9256:4:0","valueSize":1}],"id":264,"nodeType":"InlineAssembly","src":"9223:47:0"}]},"documentation":{"id":253,"nodeType":"StructuredDocumentation","src":"8947:67:0","text":" @dev Returns a pointer to the storage namespace."},"id":266,"implemented":true,"kind":"function","modifiers":[],"name":"_getInitializableStorage","nameLocation":"9080:24:0","nodeType":"FunctionDefinition","parameters":{"id":254,"nodeType":"ParameterList","parameters":[],"src":"9104:2:0"},"returnParameters":{"id":258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"$","nameLocation":"9158:1:0","nodeType":"VariableDeclaration","scope":266,"src":"9129:30:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"},"typeName":{"id":256,"nodeType":"UserDefinedTypeName","pathNode":{"id":255,"name":"InitializableStorage","nameLocations":["9129:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":10,"src":"9129:20:0"},"referencedDeclaration":10,"src":"9129:20:0","typeDescriptions":{"typeIdentifier":"t_struct$_InitializableStorage_$10_storage_ptr","typeString":"struct Initializable.InitializableStorage"}},"visibility":"internal"}],"src":"9128:32:0"},"scope":267,"src":"9071:205:0","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":268,"src":"2349:6929:0","usedErrors":[16,19],"usedEvents":[24]}],"src":"113:9166:0"},"id":0},"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","exportedSymbols":{"ERC1967Utils":[903],"IERC1822Proxiable":[609],"Initializable":[267],"UUPSUpgradeable":[449]},"id":450,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":269,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"115:24:1"},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC1822.sol","file":"@openzeppelin/contracts/interfaces/draft-IERC1822.sol","id":271,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":450,"sourceUnit":610,"src":"141:88:1","symbolAliases":[{"foreign":{"id":270,"name":"IERC1822Proxiable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"149:17:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol","id":273,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":450,"sourceUnit":904,"src":"230:84:1","symbolAliases":[{"foreign":{"id":272,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"238:12:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"./Initializable.sol","id":275,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":450,"sourceUnit":268,"src":"315:50:1","symbolAliases":[{"foreign":{"id":274,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":267,"src":"323:13:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":277,"name":"Initializable","nameLocations":["1023:13:1"],"nodeType":"IdentifierPath","referencedDeclaration":267,"src":"1023:13:1"},"id":278,"nodeType":"InheritanceSpecifier","src":"1023:13:1"},{"baseName":{"id":279,"name":"IERC1822Proxiable","nameLocations":["1038:17:1"],"nodeType":"IdentifierPath","referencedDeclaration":609,"src":"1038:17:1"},"id":280,"nodeType":"InheritanceSpecifier","src":"1038:17:1"}],"canonicalName":"UUPSUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":276,"nodeType":"StructuredDocumentation","src":"367:618:1","text":" @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n `UUPSUpgradeable` with a custom implementation of upgrades.\n The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism."},"fullyImplemented":false,"id":449,"linearizedBaseContracts":[449,609,267],"name":"UUPSUpgradeable","nameLocation":"1004:15:1","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"1062:61:1","text":"@custom:oz-upgrades-unsafe-allow state-variable-immutable"},"id":287,"mutability":"immutable","name":"__self","nameLocation":"1154:6:1","nodeType":"VariableDeclaration","scope":449,"src":"1128:48:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":282,"name":"address","nodeType":"ElementaryTypeName","src":"1128:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"id":285,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1171:4:1","typeDescriptions":{"typeIdentifier":"t_contract$_UUPSUpgradeable_$449","typeString":"contract UUPSUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UUPSUpgradeable_$449","typeString":"contract UUPSUpgradeable"}],"id":284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1163:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":283,"name":"address","nodeType":"ElementaryTypeName","src":"1163:7:1","typeDescriptions":{}}},"id":286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1163:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":true,"documentation":{"id":288,"nodeType":"StructuredDocumentation","src":"1183:631:1","text":" @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\n and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\n be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\n during an upgrade."},"functionSelector":"ad3cb1cc","id":291,"mutability":"constant","name":"UPGRADE_INTERFACE_VERSION","nameLocation":"1842:25:1","nodeType":"VariableDeclaration","scope":449,"src":"1819:58:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":289,"name":"string","nodeType":"ElementaryTypeName","src":"1819:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"352e302e30","id":290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1870:7:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ade050ecfcf8ae20ae1d10a23573f9d7e0bad85e74a2cf8338a65401e64558c","typeString":"literal_string \"5.0.0\""},"value":"5.0.0"},"visibility":"public"},{"documentation":{"id":292,"nodeType":"StructuredDocumentation","src":"1884:65:1","text":" @dev The call is from an unauthorized context."},"errorSelector":"e07c8dba","id":294,"name":"UUPSUnauthorizedCallContext","nameLocation":"1960:27:1","nodeType":"ErrorDefinition","parameters":{"id":293,"nodeType":"ParameterList","parameters":[],"src":"1987:2:1"},"src":"1954:36:1"},{"documentation":{"id":295,"nodeType":"StructuredDocumentation","src":"1996:68:1","text":" @dev The storage `slot` is unsupported as a UUID."},"errorSelector":"aa1d49a4","id":299,"name":"UUPSUnsupportedProxiableUUID","nameLocation":"2075:28:1","nodeType":"ErrorDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":297,"mutability":"mutable","name":"slot","nameLocation":"2112:4:1","nodeType":"VariableDeclaration","scope":299,"src":"2104:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":296,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2104:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2103:14:1"},"src":"2069:49:1"},{"body":{"id":306,"nodeType":"Block","src":"2645:41:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":302,"name":"_checkProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":381,"src":"2655:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2655:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":304,"nodeType":"ExpressionStatement","src":"2655:13:1"},{"id":305,"nodeType":"PlaceholderStatement","src":"2678:1:1"}]},"documentation":{"id":300,"nodeType":"StructuredDocumentation","src":"2124:495:1","text":" @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case\n for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n fail."},"id":307,"name":"onlyProxy","nameLocation":"2633:9:1","nodeType":"ModifierDefinition","parameters":{"id":301,"nodeType":"ParameterList","parameters":[],"src":"2642:2:1"},"src":"2624:62:1","virtual":false,"visibility":"internal"},{"body":{"id":314,"nodeType":"Block","src":"2916:48:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":310,"name":"_checkNotDelegated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"2926:18:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2926:20:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":312,"nodeType":"ExpressionStatement","src":"2926:20:1"},{"id":313,"nodeType":"PlaceholderStatement","src":"2956:1:1"}]},"documentation":{"id":308,"nodeType":"StructuredDocumentation","src":"2692:195:1","text":" @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n callable on the implementing contract but not through proxies."},"id":315,"name":"notDelegated","nameLocation":"2901:12:1","nodeType":"ModifierDefinition","parameters":{"id":309,"nodeType":"ParameterList","parameters":[],"src":"2913:2:1"},"src":"2892:72:1","virtual":false,"visibility":"internal"},{"body":{"id":320,"nodeType":"Block","src":"3030:7:1","statements":[]},"id":321,"implemented":true,"kind":"function","modifiers":[{"id":318,"kind":"modifierInvocation","modifierName":{"id":317,"name":"onlyInitializing","nameLocations":["3013:16:1"],"nodeType":"IdentifierPath","referencedDeclaration":162,"src":"3013:16:1"},"nodeType":"ModifierInvocation","src":"3013:16:1"}],"name":"__UUPSUpgradeable_init","nameLocation":"2979:22:1","nodeType":"FunctionDefinition","parameters":{"id":316,"nodeType":"ParameterList","parameters":[],"src":"3001:2:1"},"returnParameters":{"id":319,"nodeType":"ParameterList","parameters":[],"src":"3030:0:1"},"scope":449,"src":"2970:67:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":326,"nodeType":"Block","src":"3113:7:1","statements":[]},"id":327,"implemented":true,"kind":"function","modifiers":[{"id":324,"kind":"modifierInvocation","modifierName":{"id":323,"name":"onlyInitializing","nameLocations":["3096:16:1"],"nodeType":"IdentifierPath","referencedDeclaration":162,"src":"3096:16:1"},"nodeType":"ModifierInvocation","src":"3096:16:1"}],"name":"__UUPSUpgradeable_init_unchained","nameLocation":"3052:32:1","nodeType":"FunctionDefinition","parameters":{"id":322,"nodeType":"ParameterList","parameters":[],"src":"3084:2:1"},"returnParameters":{"id":325,"nodeType":"ParameterList","parameters":[],"src":"3113:0:1"},"scope":449,"src":"3043:77:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[608],"body":{"id":338,"nodeType":"Block","src":"3786:56:1","statements":[{"expression":{"expression":{"id":335,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"3803:12:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$903_$","typeString":"type(library ERC1967Utils)"}},"id":336,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3816:19:1","memberName":"IMPLEMENTATION_SLOT","nodeType":"MemberAccess","referencedDeclaration":624,"src":"3803:32:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":334,"id":337,"nodeType":"Return","src":"3796:39:1"}]},"documentation":{"id":328,"nodeType":"StructuredDocumentation","src":"3125:578:1","text":" @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the\n implementation. It is used to validate the implementation's compatibility when performing an upgrade.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"functionSelector":"52d1902d","id":339,"implemented":true,"kind":"function","modifiers":[{"id":331,"kind":"modifierInvocation","modifierName":{"id":330,"name":"notDelegated","nameLocations":["3755:12:1"],"nodeType":"IdentifierPath","referencedDeclaration":315,"src":"3755:12:1"},"nodeType":"ModifierInvocation","src":"3755:12:1"}],"name":"proxiableUUID","nameLocation":"3717:13:1","nodeType":"FunctionDefinition","parameters":{"id":329,"nodeType":"ParameterList","parameters":[],"src":"3730:2:1"},"returnParameters":{"id":334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":339,"src":"3777:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":332,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3777:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3776:9:1"},"scope":449,"src":"3708:134:1","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":358,"nodeType":"Block","src":"4266:109:1","statements":[{"expression":{"arguments":[{"id":350,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":342,"src":"4294:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":349,"name":"_authorizeUpgrade","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":403,"src":"4276:17:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4276:36:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":352,"nodeType":"ExpressionStatement","src":"4276:36:1"},{"expression":{"arguments":[{"id":354,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":342,"src":"4344:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":355,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":344,"src":"4363:4:1","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":353,"name":"_upgradeToAndCallUUPS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":448,"src":"4322:21:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4322:46:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":357,"nodeType":"ExpressionStatement","src":"4322:46:1"}]},"documentation":{"id":340,"nodeType":"StructuredDocumentation","src":"3848:308:1","text":" @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n encoded in `data`.\n Calls {_authorizeUpgrade}.\n Emits an {Upgraded} event.\n @custom:oz-upgrades-unsafe-allow-reachable delegatecall"},"functionSelector":"4f1ef286","id":359,"implemented":true,"kind":"function","modifiers":[{"id":347,"kind":"modifierInvocation","modifierName":{"id":346,"name":"onlyProxy","nameLocations":["4256:9:1"],"nodeType":"IdentifierPath","referencedDeclaration":307,"src":"4256:9:1"},"nodeType":"ModifierInvocation","src":"4256:9:1"}],"name":"upgradeToAndCall","nameLocation":"4170:16:1","nodeType":"FunctionDefinition","parameters":{"id":345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":342,"mutability":"mutable","name":"newImplementation","nameLocation":"4195:17:1","nodeType":"VariableDeclaration","scope":359,"src":"4187:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":341,"name":"address","nodeType":"ElementaryTypeName","src":"4187:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":344,"mutability":"mutable","name":"data","nameLocation":"4227:4:1","nodeType":"VariableDeclaration","scope":359,"src":"4214:17:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":343,"name":"bytes","nodeType":"ElementaryTypeName","src":"4214:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4186:46:1"},"returnParameters":{"id":348,"nodeType":"ParameterList","parameters":[],"src":"4266:0:1"},"scope":449,"src":"4161:214:1","stateMutability":"payable","virtual":true,"visibility":"public"},{"body":{"id":380,"nodeType":"Block","src":"4623:267:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":365,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4658:4:1","typeDescriptions":{"typeIdentifier":"t_contract$_UUPSUpgradeable_$449","typeString":"contract UUPSUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UUPSUpgradeable_$449","typeString":"contract UUPSUpgradeable"}],"id":364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4650:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":363,"name":"address","nodeType":"ElementaryTypeName","src":"4650:7:1","typeDescriptions":{}}},"id":366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4650:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":367,"name":"__self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"4667:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4650:23:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":369,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"4728:12:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$903_$","typeString":"type(library ERC1967Utils)"}},"id":370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4741:17:1","memberName":"getImplementation","nodeType":"MemberAccess","referencedDeclaration":655,"src":"4728:30:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4728:32:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":372,"name":"__self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"4764:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4728:42:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4650:120:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":379,"nodeType":"IfStatement","src":"4633:251:1","trueBody":{"id":378,"nodeType":"Block","src":"4823:61:1","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":375,"name":"UUPSUnauthorizedCallContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":294,"src":"4844:27:1","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4844:29:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":377,"nodeType":"RevertStatement","src":"4837:36:1"}]}}]},"documentation":{"id":360,"nodeType":"StructuredDocumentation","src":"4381:192:1","text":" @dev Reverts if the execution is not performed via delegatecall or the execution\n context is not of a proxy with an ERC-1967 compliant implementation pointing to self."},"id":381,"implemented":true,"kind":"function","modifiers":[],"name":"_checkProxy","nameLocation":"4587:11:1","nodeType":"FunctionDefinition","parameters":{"id":361,"nodeType":"ParameterList","parameters":[],"src":"4598:2:1"},"returnParameters":{"id":362,"nodeType":"ParameterList","parameters":[],"src":"4623:0:1"},"scope":449,"src":"4578:312:1","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":396,"nodeType":"Block","src":"5059:161:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":387,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5081:4:1","typeDescriptions":{"typeIdentifier":"t_contract$_UUPSUpgradeable_$449","typeString":"contract UUPSUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UUPSUpgradeable_$449","typeString":"contract UUPSUpgradeable"}],"id":386,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5073:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":385,"name":"address","nodeType":"ElementaryTypeName","src":"5073:7:1","typeDescriptions":{}}},"id":388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5073:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":389,"name":"__self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"5090:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5073:23:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":395,"nodeType":"IfStatement","src":"5069:145:1","trueBody":{"id":394,"nodeType":"Block","src":"5098:116:1","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":391,"name":"UUPSUnauthorizedCallContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":294,"src":"5174:27:1","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5174:29:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":393,"nodeType":"RevertStatement","src":"5167:36:1"}]}}]},"documentation":{"id":382,"nodeType":"StructuredDocumentation","src":"4896:106:1","text":" @dev Reverts if the execution is performed via delegatecall.\n See {notDelegated}."},"id":397,"implemented":true,"kind":"function","modifiers":[],"name":"_checkNotDelegated","nameLocation":"5016:18:1","nodeType":"FunctionDefinition","parameters":{"id":383,"nodeType":"ParameterList","parameters":[],"src":"5034:2:1"},"returnParameters":{"id":384,"nodeType":"ParameterList","parameters":[],"src":"5059:0:1"},"scope":449,"src":"5007:213:1","stateMutability":"view","virtual":true,"visibility":"internal"},{"documentation":{"id":398,"nodeType":"StructuredDocumentation","src":"5226:372:1","text":" @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n {upgradeToAndCall}.\n Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n ```solidity\n function _authorizeUpgrade(address) internal onlyOwner {}\n ```"},"id":403,"implemented":false,"kind":"function","modifiers":[],"name":"_authorizeUpgrade","nameLocation":"5612:17:1","nodeType":"FunctionDefinition","parameters":{"id":401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"newImplementation","nameLocation":"5638:17:1","nodeType":"VariableDeclaration","scope":403,"src":"5630:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":399,"name":"address","nodeType":"ElementaryTypeName","src":"5630:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5629:27:1"},"returnParameters":{"id":402,"nodeType":"ParameterList","parameters":[],"src":"5673:0:1"},"scope":449,"src":"5603:71:1","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":447,"nodeType":"Block","src":"6117:453:1","statements":[{"clauses":[{"block":{"id":436,"nodeType":"Block","src":"6207:212:1","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":419,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"6225:4:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":420,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"6233:12:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$903_$","typeString":"type(library ERC1967Utils)"}},"id":421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6246:19:1","memberName":"IMPLEMENTATION_SLOT","nodeType":"MemberAccess","referencedDeclaration":624,"src":"6233:32:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6225:40:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":428,"nodeType":"IfStatement","src":"6221:120:1","trueBody":{"id":427,"nodeType":"Block","src":"6267:74:1","statements":[{"errorCall":{"arguments":[{"id":424,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":417,"src":"6321:4:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":423,"name":"UUPSUnsupportedProxiableUUID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"6292:28:1","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes32_$returns$_t_error_$","typeString":"function (bytes32) pure returns (error)"}},"id":425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6292:34:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":426,"nodeType":"RevertStatement","src":"6285:41:1"}]}},{"expression":{"arguments":[{"id":432,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"6384:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":433,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":408,"src":"6403:4:1","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":429,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"6354:12:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$903_$","typeString":"type(library ERC1967Utils)"}},"id":431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6367:16:1","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":718,"src":"6354:29:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6354:54:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":435,"nodeType":"ExpressionStatement","src":"6354:54:1"}]},"errorName":"","id":437,"nodeType":"TryCatchClause","parameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":417,"mutability":"mutable","name":"slot","nameLocation":"6201:4:1","nodeType":"VariableDeclaration","scope":437,"src":"6193:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":416,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6193:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6192:14:1"},"src":"6184:235:1"},{"block":{"id":444,"nodeType":"Block","src":"6426:138:1","statements":[{"errorCall":{"arguments":[{"id":441,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"6535:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":438,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"6493:12:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$903_$","typeString":"type(library ERC1967Utils)"}},"id":440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6506:28:1","memberName":"ERC1967InvalidImplementation","nodeType":"MemberAccess","referencedDeclaration":629,"src":"6493:41:1","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6493:60:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":443,"nodeType":"RevertStatement","src":"6486:67:1"}]},"errorName":"","id":445,"nodeType":"TryCatchClause","src":"6420:144:1"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":412,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":406,"src":"6149:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":411,"name":"IERC1822Proxiable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"6131:17:1","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1822Proxiable_$609_$","typeString":"type(contract IERC1822Proxiable)"}},"id":413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6131:36:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC1822Proxiable_$609","typeString":"contract IERC1822Proxiable"}},"id":414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6168:13:1","memberName":"proxiableUUID","nodeType":"MemberAccess","referencedDeclaration":608,"src":"6131:50:1","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6131:52:1","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":446,"nodeType":"TryStatement","src":"6127:437:1"}]},"documentation":{"id":404,"nodeType":"StructuredDocumentation","src":"5680:347:1","text":" @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\n As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\n is expected to be the implementation slot in ERC-1967.\n Emits an {IERC1967-Upgraded} event."},"id":448,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCallUUPS","nameLocation":"6041:21:1","nodeType":"FunctionDefinition","parameters":{"id":409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":406,"mutability":"mutable","name":"newImplementation","nameLocation":"6071:17:1","nodeType":"VariableDeclaration","scope":448,"src":"6063:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":405,"name":"address","nodeType":"ElementaryTypeName","src":"6063:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":408,"mutability":"mutable","name":"data","nameLocation":"6103:4:1","nodeType":"VariableDeclaration","scope":448,"src":"6090:17:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":407,"name":"bytes","nodeType":"ElementaryTypeName","src":"6090:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6062:46:1"},"returnParameters":{"id":410,"nodeType":"ParameterList","parameters":[],"src":"6117:0:1"},"scope":449,"src":"6032:538:1","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":450,"src":"986:5586:1","usedErrors":[16,19,294,299,629,642,1241,1504],"usedEvents":[24,586]}],"src":"115:6458:1"},"id":1},"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","exportedSymbols":{"Initializable":[267],"ReentrancyGuardUpgradeable":[578]},"id":579,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":451,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:2"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":453,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":579,"sourceUnit":268,"src":"134:63:2","symbolAliases":[{"foreign":{"id":452,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":267,"src":"142:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":455,"name":"Initializable","nameLocations":["1142:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":267,"src":"1142:13:2"},"id":456,"nodeType":"InheritanceSpecifier","src":"1142:13:2"}],"canonicalName":"ReentrancyGuardUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":454,"nodeType":"StructuredDocumentation","src":"199:894:2","text":" @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\n consider using {ReentrancyGuardTransient} instead.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."},"fullyImplemented":true,"id":578,"linearizedBaseContracts":[578,267],"name":"ReentrancyGuardUpgradeable","nameLocation":"1112:26:2","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":459,"mutability":"constant","name":"NOT_ENTERED","nameLocation":"1935:11:2","nodeType":"VariableDeclaration","scope":578,"src":"1910:40:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":457,"name":"uint256","nodeType":"ElementaryTypeName","src":"1910:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1949:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":462,"mutability":"constant","name":"ENTERED","nameLocation":"1981:7:2","nodeType":"VariableDeclaration","scope":578,"src":"1956:36:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":460,"name":"uint256","nodeType":"ElementaryTypeName","src":"1956:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1991:1:2","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"canonicalName":"ReentrancyGuardUpgradeable.ReentrancyGuardStorage","documentation":{"id":463,"nodeType":"StructuredDocumentation","src":"1999:73:2","text":"@custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard"},"id":466,"members":[{"constant":false,"id":465,"mutability":"mutable","name":"_status","nameLocation":"2125:7:2","nodeType":"VariableDeclaration","scope":466,"src":"2117:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":464,"name":"uint256","nodeType":"ElementaryTypeName","src":"2117:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ReentrancyGuardStorage","nameLocation":"2084:22:2","nodeType":"StructDefinition","scope":578,"src":"2077:62:2","visibility":"public"},{"constant":true,"id":469,"mutability":"constant","name":"ReentrancyGuardStorageLocation","nameLocation":"2289:30:2","nodeType":"VariableDeclaration","scope":578,"src":"2264:124:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":467,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2264:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2322:66:2","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"body":{"id":476,"nodeType":"Block","src":"2489:89:2","statements":[{"AST":{"nativeSrc":"2508:64:2","nodeType":"YulBlock","src":"2508:64:2","statements":[{"nativeSrc":"2522:40:2","nodeType":"YulAssignment","src":"2522:40:2","value":{"name":"ReentrancyGuardStorageLocation","nativeSrc":"2532:30:2","nodeType":"YulIdentifier","src":"2532:30:2"},"variableNames":[{"name":"$.slot","nativeSrc":"2522:6:2","nodeType":"YulIdentifier","src":"2522:6:2"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":473,"isOffset":false,"isSlot":true,"src":"2522:6:2","suffix":"slot","valueSize":1},{"declaration":469,"isOffset":false,"isSlot":false,"src":"2532:30:2","valueSize":1}],"id":475,"nodeType":"InlineAssembly","src":"2499:73:2"}]},"id":477,"implemented":true,"kind":"function","modifiers":[],"name":"_getReentrancyGuardStorage","nameLocation":"2404:26:2","nodeType":"FunctionDefinition","parameters":{"id":470,"nodeType":"ParameterList","parameters":[],"src":"2430:2:2"},"returnParameters":{"id":474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":473,"mutability":"mutable","name":"$","nameLocation":"2486:1:2","nodeType":"VariableDeclaration","scope":477,"src":"2455:32:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"},"typeName":{"id":472,"nodeType":"UserDefinedTypeName","pathNode":{"id":471,"name":"ReentrancyGuardStorage","nameLocations":["2455:22:2"],"nodeType":"IdentifierPath","referencedDeclaration":466,"src":"2455:22:2"},"referencedDeclaration":466,"src":"2455:22:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"}},"visibility":"internal"}],"src":"2454:34:2"},"scope":578,"src":"2395:183:2","stateMutability":"pure","virtual":false,"visibility":"private"},{"documentation":{"id":478,"nodeType":"StructuredDocumentation","src":"2584:52:2","text":" @dev Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":480,"name":"ReentrancyGuardReentrantCall","nameLocation":"2647:28:2","nodeType":"ErrorDefinition","parameters":{"id":479,"nodeType":"ParameterList","parameters":[],"src":"2675:2:2"},"src":"2641:37:2"},{"body":{"id":488,"nodeType":"Block","src":"2744:51:2","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":485,"name":"__ReentrancyGuard_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"2754:32:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2754:34:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":487,"nodeType":"ExpressionStatement","src":"2754:34:2"}]},"id":489,"implemented":true,"kind":"function","modifiers":[{"id":483,"kind":"modifierInvocation","modifierName":{"id":482,"name":"onlyInitializing","nameLocations":["2727:16:2"],"nodeType":"IdentifierPath","referencedDeclaration":162,"src":"2727:16:2"},"nodeType":"ModifierInvocation","src":"2727:16:2"}],"name":"__ReentrancyGuard_init","nameLocation":"2693:22:2","nodeType":"FunctionDefinition","parameters":{"id":481,"nodeType":"ParameterList","parameters":[],"src":"2715:2:2"},"returnParameters":{"id":484,"nodeType":"ParameterList","parameters":[],"src":"2744:0:2"},"scope":578,"src":"2684:111:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":506,"nodeType":"Block","src":"2871:113:2","statements":[{"assignments":[496],"declarations":[{"constant":false,"id":496,"mutability":"mutable","name":"$","nameLocation":"2912:1:2","nodeType":"VariableDeclaration","scope":506,"src":"2881:32:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"},"typeName":{"id":495,"nodeType":"UserDefinedTypeName","pathNode":{"id":494,"name":"ReentrancyGuardStorage","nameLocations":["2881:22:2"],"nodeType":"IdentifierPath","referencedDeclaration":466,"src":"2881:22:2"},"referencedDeclaration":466,"src":"2881:22:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"}},"visibility":"internal"}],"id":499,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":497,"name":"_getReentrancyGuardStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":477,"src":"2916:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ReentrancyGuardStorage_$466_storage_ptr_$","typeString":"function () pure returns (struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer)"}},"id":498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2916:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2881:63:2"},{"expression":{"id":504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":500,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":496,"src":"2954:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"id":502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2956:7:2","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":465,"src":"2954:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":503,"name":"NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":459,"src":"2966:11:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2954:23:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":505,"nodeType":"ExpressionStatement","src":"2954:23:2"}]},"id":507,"implemented":true,"kind":"function","modifiers":[{"id":492,"kind":"modifierInvocation","modifierName":{"id":491,"name":"onlyInitializing","nameLocations":["2854:16:2"],"nodeType":"IdentifierPath","referencedDeclaration":162,"src":"2854:16:2"},"nodeType":"ModifierInvocation","src":"2854:16:2"}],"name":"__ReentrancyGuard_init_unchained","nameLocation":"2810:32:2","nodeType":"FunctionDefinition","parameters":{"id":490,"nodeType":"ParameterList","parameters":[],"src":"2842:2:2"},"returnParameters":{"id":493,"nodeType":"ParameterList","parameters":[],"src":"2871:0:2"},"scope":578,"src":"2801:183:2","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":517,"nodeType":"Block","src":"3385:79:2","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":510,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":543,"src":"3395:19:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3395:21:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":512,"nodeType":"ExpressionStatement","src":"3395:21:2"},{"id":513,"nodeType":"PlaceholderStatement","src":"3426:1:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":514,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":559,"src":"3437:18:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3437:20:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":516,"nodeType":"ExpressionStatement","src":"3437:20:2"}]},"documentation":{"id":508,"nodeType":"StructuredDocumentation","src":"2990:366:2","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":518,"name":"nonReentrant","nameLocation":"3370:12:2","nodeType":"ModifierDefinition","parameters":{"id":509,"nodeType":"ParameterList","parameters":[],"src":"3382:2:2"},"src":"3361:103:2","virtual":false,"visibility":"internal"},{"body":{"id":542,"nodeType":"Block","src":"3509:345:2","statements":[{"assignments":[523],"declarations":[{"constant":false,"id":523,"mutability":"mutable","name":"$","nameLocation":"3550:1:2","nodeType":"VariableDeclaration","scope":542,"src":"3519:32:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"},"typeName":{"id":522,"nodeType":"UserDefinedTypeName","pathNode":{"id":521,"name":"ReentrancyGuardStorage","nameLocations":["3519:22:2"],"nodeType":"IdentifierPath","referencedDeclaration":466,"src":"3519:22:2"},"referencedDeclaration":466,"src":"3519:22:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"}},"visibility":"internal"}],"id":526,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":524,"name":"_getReentrancyGuardStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":477,"src":"3554:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ReentrancyGuardStorage_$466_storage_ptr_$","typeString":"function () pure returns (struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer)"}},"id":525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3554:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3519:63:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":527,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"3670:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"id":528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3672:7:2","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":465,"src":"3670:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":529,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":462,"src":"3683:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3670:20:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":535,"nodeType":"IfStatement","src":"3666:88:2","trueBody":{"id":534,"nodeType":"Block","src":"3692:62:2","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":531,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"3713:28:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3713:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":533,"nodeType":"RevertStatement","src":"3706:37:2"}]}},{"expression":{"id":540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":536,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"3828:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"id":538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3830:7:2","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":465,"src":"3828:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":539,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":462,"src":"3840:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3828:19:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":541,"nodeType":"ExpressionStatement","src":"3828:19:2"}]},"id":543,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"3479:19:2","nodeType":"FunctionDefinition","parameters":{"id":519,"nodeType":"ParameterList","parameters":[],"src":"3498:2:2"},"returnParameters":{"id":520,"nodeType":"ParameterList","parameters":[],"src":"3509:0:2"},"scope":578,"src":"3470:384:2","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":558,"nodeType":"Block","src":"3898:245:2","statements":[{"assignments":[548],"declarations":[{"constant":false,"id":548,"mutability":"mutable","name":"$","nameLocation":"3939:1:2","nodeType":"VariableDeclaration","scope":558,"src":"3908:32:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"},"typeName":{"id":547,"nodeType":"UserDefinedTypeName","pathNode":{"id":546,"name":"ReentrancyGuardStorage","nameLocations":["3908:22:2"],"nodeType":"IdentifierPath","referencedDeclaration":466,"src":"3908:22:2"},"referencedDeclaration":466,"src":"3908:22:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"}},"visibility":"internal"}],"id":551,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":549,"name":"_getReentrancyGuardStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":477,"src":"3943:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ReentrancyGuardStorage_$466_storage_ptr_$","typeString":"function () pure returns (struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer)"}},"id":550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3943:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3908:63:2"},{"expression":{"id":556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":552,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":548,"src":"4113:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"id":554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4115:7:2","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":465,"src":"4113:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":555,"name":"NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":459,"src":"4125:11:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4113:23:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":557,"nodeType":"ExpressionStatement","src":"4113:23:2"}]},"id":559,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"3869:18:2","nodeType":"FunctionDefinition","parameters":{"id":544,"nodeType":"ParameterList","parameters":[],"src":"3887:2:2"},"returnParameters":{"id":545,"nodeType":"ParameterList","parameters":[],"src":"3898:0:2"},"scope":578,"src":"3860:283:2","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":576,"nodeType":"Block","src":"4386:117:2","statements":[{"assignments":[567],"declarations":[{"constant":false,"id":567,"mutability":"mutable","name":"$","nameLocation":"4427:1:2","nodeType":"VariableDeclaration","scope":576,"src":"4396:32:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"},"typeName":{"id":566,"nodeType":"UserDefinedTypeName","pathNode":{"id":565,"name":"ReentrancyGuardStorage","nameLocations":["4396:22:2"],"nodeType":"IdentifierPath","referencedDeclaration":466,"src":"4396:22:2"},"referencedDeclaration":466,"src":"4396:22:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage"}},"visibility":"internal"}],"id":570,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":568,"name":"_getReentrancyGuardStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":477,"src":"4431:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_ReentrancyGuardStorage_$466_storage_ptr_$","typeString":"function () pure returns (struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer)"}},"id":569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4431:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4396:63:2"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":571,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":567,"src":"4476:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_ReentrancyGuardStorage_$466_storage_ptr","typeString":"struct ReentrancyGuardUpgradeable.ReentrancyGuardStorage storage pointer"}},"id":572,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4478:7:2","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":465,"src":"4476:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":573,"name":"ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":462,"src":"4489:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4476:20:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":564,"id":575,"nodeType":"Return","src":"4469:27:2"}]},"documentation":{"id":560,"nodeType":"StructuredDocumentation","src":"4149:168:2","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":577,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"4331:23:2","nodeType":"FunctionDefinition","parameters":{"id":561,"nodeType":"ParameterList","parameters":[],"src":"4354:2:2"},"returnParameters":{"id":564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":563,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":577,"src":"4380:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":562,"name":"bool","nodeType":"ElementaryTypeName","src":"4380:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4379:6:2"},"scope":578,"src":"4322:181:2","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":579,"src":"1094:3411:2","usedErrors":[16,19,480],"usedEvents":[24]}],"src":"109:4397:2"},"id":2},"@openzeppelin/contracts/interfaces/IERC1967.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1967.sol","exportedSymbols":{"IERC1967":[599]},"id":600,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":580,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1967","contractDependencies":[],"contractKind":"interface","documentation":{"id":581,"nodeType":"StructuredDocumentation","src":"133:101:3","text":" @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC."},"fullyImplemented":true,"id":599,"linearizedBaseContracts":[599],"name":"IERC1967","nameLocation":"245:8:3","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":582,"nodeType":"StructuredDocumentation","src":"260:68:3","text":" @dev Emitted when the implementation is upgraded."},"eventSelector":"bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","id":586,"name":"Upgraded","nameLocation":"339:8:3","nodeType":"EventDefinition","parameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":584,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"364:14:3","nodeType":"VariableDeclaration","scope":586,"src":"348:30:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":583,"name":"address","nodeType":"ElementaryTypeName","src":"348:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"347:32:3"},"src":"333:47:3"},{"anonymous":false,"documentation":{"id":587,"nodeType":"StructuredDocumentation","src":"386:67:3","text":" @dev Emitted when the admin account has changed."},"eventSelector":"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f","id":593,"name":"AdminChanged","nameLocation":"464:12:3","nodeType":"EventDefinition","parameters":{"id":592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":589,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"485:13:3","nodeType":"VariableDeclaration","scope":593,"src":"477:21:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":588,"name":"address","nodeType":"ElementaryTypeName","src":"477:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":591,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"508:8:3","nodeType":"VariableDeclaration","scope":593,"src":"500:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":590,"name":"address","nodeType":"ElementaryTypeName","src":"500:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"476:41:3"},"src":"458:60:3"},{"anonymous":false,"documentation":{"id":594,"nodeType":"StructuredDocumentation","src":"524:59:3","text":" @dev Emitted when the beacon is changed."},"eventSelector":"1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e","id":598,"name":"BeaconUpgraded","nameLocation":"594:14:3","nodeType":"EventDefinition","parameters":{"id":597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":596,"indexed":true,"mutability":"mutable","name":"beacon","nameLocation":"625:6:3","nodeType":"VariableDeclaration","scope":598,"src":"609:22:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":595,"name":"address","nodeType":"ElementaryTypeName","src":"609:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"608:24:3"},"src":"588:45:3"}],"scope":600,"src":"235:400:3","usedErrors":[],"usedEvents":[586,593,598]}],"src":"107:529:3"},"id":3},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC1822.sol","exportedSymbols":{"IERC1822Proxiable":[609]},"id":610,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":601,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"113:24:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1822Proxiable","contractDependencies":[],"contractKind":"interface","documentation":{"id":602,"nodeType":"StructuredDocumentation","src":"139:204:4","text":" @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n proxy whose upgrades are fully controlled by the current implementation."},"fullyImplemented":false,"id":609,"linearizedBaseContracts":[609],"name":"IERC1822Proxiable","nameLocation":"354:17:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":603,"nodeType":"StructuredDocumentation","src":"378:438:4","text":" @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n address.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy."},"functionSelector":"52d1902d","id":608,"implemented":false,"kind":"function","modifiers":[],"name":"proxiableUUID","nameLocation":"830:13:4","nodeType":"FunctionDefinition","parameters":{"id":604,"nodeType":"ParameterList","parameters":[],"src":"843:2:4"},"returnParameters":{"id":607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":608,"src":"869:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":605,"name":"bytes32","nodeType":"ElementaryTypeName","src":"869:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"868:9:4"},"scope":609,"src":"821:57:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":610,"src":"344:536:4","usedErrors":[],"usedEvents":[]}],"src":"113:768:4"},"id":4},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol","exportedSymbols":{"Address":[1491],"ERC1967Utils":[903],"IBeacon":[913],"IERC1967":[599],"StorageSlot":[1637]},"id":904,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":611,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"114:24:5"},{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","file":"../beacon/IBeacon.sol","id":613,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":904,"sourceUnit":914,"src":"140:46:5","symbolAliases":[{"foreign":{"id":612,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"148:7:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1967.sol","file":"../../interfaces/IERC1967.sol","id":615,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":904,"sourceUnit":600,"src":"187:55:5","symbolAliases":[{"foreign":{"id":614,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"195:8:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../utils/Address.sol","id":617,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":904,"sourceUnit":1492,"src":"243:48:5","symbolAliases":[{"foreign":{"id":616,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1491,"src":"251:7:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"../../utils/StorageSlot.sol","id":619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":904,"sourceUnit":1638,"src":"292:56:5","symbolAliases":[{"foreign":{"id":618,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1637,"src":"300:11:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ERC1967Utils","contractDependencies":[],"contractKind":"library","documentation":{"id":620,"nodeType":"StructuredDocumentation","src":"350:145:5","text":" @dev This library provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots."},"fullyImplemented":true,"id":903,"linearizedBaseContracts":[903],"name":"ERC1967Utils","nameLocation":"504:12:5","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":621,"nodeType":"StructuredDocumentation","src":"523:170:5","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1."},"id":624,"mutability":"constant","name":"IMPLEMENTATION_SLOT","nameLocation":"789:19:5","nodeType":"VariableDeclaration","scope":903,"src":"763:114:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"763:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"811:66:5","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"documentation":{"id":625,"nodeType":"StructuredDocumentation","src":"884:69:5","text":" @dev The `implementation` of the proxy is invalid."},"errorSelector":"4c9c8ce3","id":629,"name":"ERC1967InvalidImplementation","nameLocation":"964:28:5","nodeType":"ErrorDefinition","parameters":{"id":628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":627,"mutability":"mutable","name":"implementation","nameLocation":"1001:14:5","nodeType":"VariableDeclaration","scope":629,"src":"993:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":626,"name":"address","nodeType":"ElementaryTypeName","src":"993:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"992:24:5"},"src":"958:59:5"},{"documentation":{"id":630,"nodeType":"StructuredDocumentation","src":"1023:60:5","text":" @dev The `admin` of the proxy is invalid."},"errorSelector":"62e77ba2","id":634,"name":"ERC1967InvalidAdmin","nameLocation":"1094:19:5","nodeType":"ErrorDefinition","parameters":{"id":633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":632,"mutability":"mutable","name":"admin","nameLocation":"1122:5:5","nodeType":"VariableDeclaration","scope":634,"src":"1114:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":631,"name":"address","nodeType":"ElementaryTypeName","src":"1114:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1113:15:5"},"src":"1088:41:5"},{"documentation":{"id":635,"nodeType":"StructuredDocumentation","src":"1135:61:5","text":" @dev The `beacon` of the proxy is invalid."},"errorSelector":"64ced0ec","id":639,"name":"ERC1967InvalidBeacon","nameLocation":"1207:20:5","nodeType":"ErrorDefinition","parameters":{"id":638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":637,"mutability":"mutable","name":"beacon","nameLocation":"1236:6:5","nodeType":"VariableDeclaration","scope":639,"src":"1228:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":636,"name":"address","nodeType":"ElementaryTypeName","src":"1228:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1227:16:5"},"src":"1201:43:5"},{"documentation":{"id":640,"nodeType":"StructuredDocumentation","src":"1250:82:5","text":" @dev An upgrade function sees `msg.value > 0` that may be lost."},"errorSelector":"b398979f","id":642,"name":"ERC1967NonPayable","nameLocation":"1343:17:5","nodeType":"ErrorDefinition","parameters":{"id":641,"nodeType":"ParameterList","parameters":[],"src":"1360:2:5"},"src":"1337:26:5"},{"body":{"id":654,"nodeType":"Block","src":"1502:77:5","statements":[{"expression":{"expression":{"arguments":[{"id":650,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":624,"src":"1546:19:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":648,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1637,"src":"1519:11:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$1637_$","typeString":"type(library StorageSlot)"}},"id":649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1531:14:5","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":1548,"src":"1519:26:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$1519_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1519:47:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1567:5:5","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":1518,"src":"1519:53:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":647,"id":653,"nodeType":"Return","src":"1512:60:5"}]},"documentation":{"id":643,"nodeType":"StructuredDocumentation","src":"1369:67:5","text":" @dev Returns the current implementation address."},"id":655,"implemented":true,"kind":"function","modifiers":[],"name":"getImplementation","nameLocation":"1450:17:5","nodeType":"FunctionDefinition","parameters":{"id":644,"nodeType":"ParameterList","parameters":[],"src":"1467:2:5"},"returnParameters":{"id":647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":655,"src":"1493:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":645,"name":"address","nodeType":"ElementaryTypeName","src":"1493:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1492:9:5"},"scope":903,"src":"1441:138:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":681,"nodeType":"Block","src":"1734:218:5","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":661,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"1748:17:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1766:4:5","memberName":"code","nodeType":"MemberAccess","src":"1748:22:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1771:6:5","memberName":"length","nodeType":"MemberAccess","src":"1748:29:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1781:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1748:34:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":671,"nodeType":"IfStatement","src":"1744:119:5","trueBody":{"id":670,"nodeType":"Block","src":"1784:79:5","statements":[{"errorCall":{"arguments":[{"id":667,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"1834:17:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":666,"name":"ERC1967InvalidImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"1805:28:5","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1805:47:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":669,"nodeType":"RevertStatement","src":"1798:54:5"}]}},{"expression":{"id":679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":675,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":624,"src":"1899:19:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":672,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1637,"src":"1872:11:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$1637_$","typeString":"type(library StorageSlot)"}},"id":674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1884:14:5","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":1548,"src":"1872:26:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$1519_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1872:47:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1920:5:5","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":1518,"src":"1872:53:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":678,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"1928:17:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1872:73:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":680,"nodeType":"ExpressionStatement","src":"1872:73:5"}]},"documentation":{"id":656,"nodeType":"StructuredDocumentation","src":"1585:81:5","text":" @dev Stores a new address in the ERC-1967 implementation slot."},"id":682,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"1680:18:5","nodeType":"FunctionDefinition","parameters":{"id":659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":658,"mutability":"mutable","name":"newImplementation","nameLocation":"1707:17:5","nodeType":"VariableDeclaration","scope":682,"src":"1699:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":657,"name":"address","nodeType":"ElementaryTypeName","src":"1699:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1698:27:5"},"returnParameters":{"id":660,"nodeType":"ParameterList","parameters":[],"src":"1734:0:5"},"scope":903,"src":"1671:281:5","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":717,"nodeType":"Block","src":"2345:263:5","statements":[{"expression":{"arguments":[{"id":691,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":685,"src":"2374:17:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":690,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":682,"src":"2355:18:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2355:37:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":693,"nodeType":"ExpressionStatement","src":"2355:37:5"},{"eventCall":{"arguments":[{"id":697,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":685,"src":"2425:17:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":694,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"2407:8:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1967_$599_$","typeString":"type(contract IERC1967)"}},"id":696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2416:8:5","memberName":"Upgraded","nodeType":"MemberAccess","referencedDeclaration":586,"src":"2407:17:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2407:36:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":699,"nodeType":"EmitStatement","src":"2402:41:5"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":700,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":687,"src":"2458:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2463:6:5","memberName":"length","nodeType":"MemberAccess","src":"2458:11:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2472:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2458:15:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":715,"nodeType":"Block","src":"2559:43:5","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":712,"name":"_checkNonPayable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"2573:16:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2573:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":714,"nodeType":"ExpressionStatement","src":"2573:18:5"}]},"id":716,"nodeType":"IfStatement","src":"2454:148:5","trueBody":{"id":711,"nodeType":"Block","src":"2475:78:5","statements":[{"expression":{"arguments":[{"id":707,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":685,"src":"2518:17:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":708,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":687,"src":"2537:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":704,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1491,"src":"2489:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$1491_$","typeString":"type(library Address)"}},"id":706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2497:20:5","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":1408,"src":"2489:28:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2489:53:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":710,"nodeType":"ExpressionStatement","src":"2489:53:5"}]}}]},"documentation":{"id":683,"nodeType":"StructuredDocumentation","src":"1958:301:5","text":" @dev Performs implementation upgrade with additional setup call if data is nonempty.\n This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n to avoid stuck value in the contract.\n Emits an {IERC1967-Upgraded} event."},"id":718,"implemented":true,"kind":"function","modifiers":[],"name":"upgradeToAndCall","nameLocation":"2273:16:5","nodeType":"FunctionDefinition","parameters":{"id":688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":685,"mutability":"mutable","name":"newImplementation","nameLocation":"2298:17:5","nodeType":"VariableDeclaration","scope":718,"src":"2290:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":684,"name":"address","nodeType":"ElementaryTypeName","src":"2290:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":687,"mutability":"mutable","name":"data","nameLocation":"2330:4:5","nodeType":"VariableDeclaration","scope":718,"src":"2317:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":686,"name":"bytes","nodeType":"ElementaryTypeName","src":"2317:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2289:46:5"},"returnParameters":{"id":689,"nodeType":"ParameterList","parameters":[],"src":"2345:0:5"},"scope":903,"src":"2264:344:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":719,"nodeType":"StructuredDocumentation","src":"2614:145:5","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1."},"id":722,"mutability":"constant","name":"ADMIN_SLOT","nameLocation":"2855:10:5","nodeType":"VariableDeclaration","scope":903,"src":"2829:105:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":720,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2829:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2868:66:5","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"body":{"id":734,"nodeType":"Block","src":"3339:68:5","statements":[{"expression":{"expression":{"arguments":[{"id":730,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":722,"src":"3383:10:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":728,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1637,"src":"3356:11:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$1637_$","typeString":"type(library StorageSlot)"}},"id":729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3368:14:5","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":1548,"src":"3356:26:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$1519_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3356:38:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3395:5:5","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":1518,"src":"3356:44:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":727,"id":733,"nodeType":"Return","src":"3349:51:5"}]},"documentation":{"id":723,"nodeType":"StructuredDocumentation","src":"2941:341:5","text":" @dev Returns the current admin.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\n the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"id":735,"implemented":true,"kind":"function","modifiers":[],"name":"getAdmin","nameLocation":"3296:8:5","nodeType":"FunctionDefinition","parameters":{"id":724,"nodeType":"ParameterList","parameters":[],"src":"3304:2:5"},"returnParameters":{"id":727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":735,"src":"3330:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":725,"name":"address","nodeType":"ElementaryTypeName","src":"3330:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3329:9:5"},"scope":903,"src":"3287:120:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":765,"nodeType":"Block","src":"3535:172:5","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":741,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":738,"src":"3549:8:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3569:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3561:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":742,"name":"address","nodeType":"ElementaryTypeName","src":"3561:7:5","typeDescriptions":{}}},"id":745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3549:22:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":755,"nodeType":"IfStatement","src":"3545:91:5","trueBody":{"id":754,"nodeType":"Block","src":"3573:63:5","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3622:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3614:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":748,"name":"address","nodeType":"ElementaryTypeName","src":"3614:7:5","typeDescriptions":{}}},"id":751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3614:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":747,"name":"ERC1967InvalidAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"3594:19:5","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3594:31:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":753,"nodeType":"RevertStatement","src":"3587:38:5"}]}},{"expression":{"id":763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":759,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":722,"src":"3672:10:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":756,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1637,"src":"3645:11:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$1637_$","typeString":"type(library StorageSlot)"}},"id":758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3657:14:5","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":1548,"src":"3645:26:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$1519_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3645:38:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3684:5:5","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":1518,"src":"3645:44:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":762,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":738,"src":"3692:8:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3645:55:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":764,"nodeType":"ExpressionStatement","src":"3645:55:5"}]},"documentation":{"id":736,"nodeType":"StructuredDocumentation","src":"3413:72:5","text":" @dev Stores a new address in the ERC-1967 admin slot."},"id":766,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"3499:9:5","nodeType":"FunctionDefinition","parameters":{"id":739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":738,"mutability":"mutable","name":"newAdmin","nameLocation":"3517:8:5","nodeType":"VariableDeclaration","scope":766,"src":"3509:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":737,"name":"address","nodeType":"ElementaryTypeName","src":"3509:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3508:18:5"},"returnParameters":{"id":740,"nodeType":"ParameterList","parameters":[],"src":"3535:0:5"},"scope":903,"src":"3490:217:5","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":784,"nodeType":"Block","src":"3875:94:5","statements":[{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":775,"name":"getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":735,"src":"3912:8:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3912:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":777,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":769,"src":"3924:8:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":772,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"3890:8:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1967_$599_$","typeString":"type(contract IERC1967)"}},"id":774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3899:12:5","memberName":"AdminChanged","nodeType":"MemberAccess","referencedDeclaration":593,"src":"3890:21:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3890:43:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":779,"nodeType":"EmitStatement","src":"3885:48:5"},{"expression":{"arguments":[{"id":781,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":769,"src":"3953:8:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":780,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"3943:9:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3943:19:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":783,"nodeType":"ExpressionStatement","src":"3943:19:5"}]},"documentation":{"id":767,"nodeType":"StructuredDocumentation","src":"3713:109:5","text":" @dev Changes the admin of the proxy.\n Emits an {IERC1967-AdminChanged} event."},"id":785,"implemented":true,"kind":"function","modifiers":[],"name":"changeAdmin","nameLocation":"3836:11:5","nodeType":"FunctionDefinition","parameters":{"id":770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":769,"mutability":"mutable","name":"newAdmin","nameLocation":"3856:8:5","nodeType":"VariableDeclaration","scope":785,"src":"3848:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":768,"name":"address","nodeType":"ElementaryTypeName","src":"3848:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3847:18:5"},"returnParameters":{"id":771,"nodeType":"ParameterList","parameters":[],"src":"3875:0:5"},"scope":903,"src":"3827:142:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":786,"nodeType":"StructuredDocumentation","src":"3975:201:5","text":" @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1."},"id":789,"mutability":"constant","name":"BEACON_SLOT","nameLocation":"4272:11:5","nodeType":"VariableDeclaration","scope":903,"src":"4246:106:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":787,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4246:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530","id":788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4286:66:5","typeDescriptions":{"typeIdentifier":"t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1","typeString":"int_const 7415...(69 digits omitted)...4704"},"value":"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"},"visibility":"internal"},{"body":{"id":801,"nodeType":"Block","src":"4468:69:5","statements":[{"expression":{"expression":{"arguments":[{"id":797,"name":"BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":789,"src":"4512:11:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":795,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1637,"src":"4485:11:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$1637_$","typeString":"type(library StorageSlot)"}},"id":796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4497:14:5","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":1548,"src":"4485:26:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$1519_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4485:39:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":799,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4525:5:5","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":1518,"src":"4485:45:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":794,"id":800,"nodeType":"Return","src":"4478:52:5"}]},"documentation":{"id":790,"nodeType":"StructuredDocumentation","src":"4359:51:5","text":" @dev Returns the current beacon."},"id":802,"implemented":true,"kind":"function","modifiers":[],"name":"getBeacon","nameLocation":"4424:9:5","nodeType":"FunctionDefinition","parameters":{"id":791,"nodeType":"ParameterList","parameters":[],"src":"4433:2:5"},"returnParameters":{"id":794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":793,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":802,"src":"4459:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":792,"name":"address","nodeType":"ElementaryTypeName","src":"4459:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4458:9:5"},"scope":903,"src":"4415:122:5","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":847,"nodeType":"Block","src":"4667:390:5","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":808,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"4681:9:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4691:4:5","memberName":"code","nodeType":"MemberAccess","src":"4681:14:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4696:6:5","memberName":"length","nodeType":"MemberAccess","src":"4681:21:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4706:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4681:26:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":818,"nodeType":"IfStatement","src":"4677:95:5","trueBody":{"id":817,"nodeType":"Block","src":"4709:63:5","statements":[{"errorCall":{"arguments":[{"id":814,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"4751:9:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":813,"name":"ERC1967InvalidBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":639,"src":"4730:20:5","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4730:31:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":816,"nodeType":"RevertStatement","src":"4723:38:5"}]}},{"expression":{"id":826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":822,"name":"BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":789,"src":"4809:11:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":819,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1637,"src":"4782:11:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$1637_$","typeString":"type(library StorageSlot)"}},"id":821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4794:14:5","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":1548,"src":"4782:26:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$1519_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4782:39:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4822:5:5","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":1518,"src":"4782:45:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":825,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"4830:9:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4782:57:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":827,"nodeType":"ExpressionStatement","src":"4782:57:5"},{"assignments":[829],"declarations":[{"constant":false,"id":829,"mutability":"mutable","name":"beaconImplementation","nameLocation":"4858:20:5","nodeType":"VariableDeclaration","scope":847,"src":"4850:28:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":828,"name":"address","nodeType":"ElementaryTypeName","src":"4850:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":835,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":831,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"4889:9:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":830,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"4881:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$913_$","typeString":"type(contract IBeacon)"}},"id":832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4881:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$913","typeString":"contract IBeacon"}},"id":833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4900:14:5","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":912,"src":"4881:33:5","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4881:35:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4850:66:5"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":836,"name":"beaconImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"4930:20:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4951:4:5","memberName":"code","nodeType":"MemberAccess","src":"4930:25:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4956:6:5","memberName":"length","nodeType":"MemberAccess","src":"4930:32:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4966:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4930:37:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":846,"nodeType":"IfStatement","src":"4926:125:5","trueBody":{"id":845,"nodeType":"Block","src":"4969:82:5","statements":[{"errorCall":{"arguments":[{"id":842,"name":"beaconImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"5019:20:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":841,"name":"ERC1967InvalidImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"4990:28:5","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4990:50:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":844,"nodeType":"RevertStatement","src":"4983:57:5"}]}}]},"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"4543:72:5","text":" @dev Stores a new beacon in the ERC-1967 beacon slot."},"id":848,"implemented":true,"kind":"function","modifiers":[],"name":"_setBeacon","nameLocation":"4629:10:5","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"newBeacon","nameLocation":"4648:9:5","nodeType":"VariableDeclaration","scope":848,"src":"4640:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":804,"name":"address","nodeType":"ElementaryTypeName","src":"4640:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4639:19:5"},"returnParameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"4667:0:5"},"scope":903,"src":"4620:437:5","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":887,"nodeType":"Block","src":"5661:263:5","statements":[{"expression":{"arguments":[{"id":857,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":851,"src":"5682:9:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":856,"name":"_setBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":848,"src":"5671:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5671:21:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":859,"nodeType":"ExpressionStatement","src":"5671:21:5"},{"eventCall":{"arguments":[{"id":863,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":851,"src":"5731:9:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":860,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"5707:8:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1967_$599_$","typeString":"type(contract IERC1967)"}},"id":862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5716:14:5","memberName":"BeaconUpgraded","nodeType":"MemberAccess","referencedDeclaration":598,"src":"5707:23:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5707:34:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":865,"nodeType":"EmitStatement","src":"5702:39:5"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":866,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":853,"src":"5756:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5761:6:5","memberName":"length","nodeType":"MemberAccess","src":"5756:11:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5770:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5756:15:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":885,"nodeType":"Block","src":"5875:43:5","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":882,"name":"_checkNonPayable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"5889:16:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5889:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":884,"nodeType":"ExpressionStatement","src":"5889:18:5"}]},"id":886,"nodeType":"IfStatement","src":"5752:166:5","trueBody":{"id":881,"nodeType":"Block","src":"5773:96:5","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":874,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":851,"src":"5824:9:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":873,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"5816:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$913_$","typeString":"type(contract IBeacon)"}},"id":875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5816:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$913","typeString":"contract IBeacon"}},"id":876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5835:14:5","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":912,"src":"5816:33:5","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5816:35:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":878,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":853,"src":"5853:4:5","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":870,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1491,"src":"5787:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$1491_$","typeString":"type(library Address)"}},"id":872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5795:20:5","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":1408,"src":"5787:28:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5787:71:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":880,"nodeType":"ExpressionStatement","src":"5787:71:5"}]}}]},"documentation":{"id":849,"nodeType":"StructuredDocumentation","src":"5063:514:5","text":" @dev Change the beacon and trigger a setup call if data is nonempty.\n This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n to avoid stuck value in the contract.\n Emits an {IERC1967-BeaconUpgraded} event.\n CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n efficiency."},"id":888,"implemented":true,"kind":"function","modifiers":[],"name":"upgradeBeaconToAndCall","nameLocation":"5591:22:5","nodeType":"FunctionDefinition","parameters":{"id":854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":851,"mutability":"mutable","name":"newBeacon","nameLocation":"5622:9:5","nodeType":"VariableDeclaration","scope":888,"src":"5614:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":850,"name":"address","nodeType":"ElementaryTypeName","src":"5614:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":853,"mutability":"mutable","name":"data","nameLocation":"5646:4:5","nodeType":"VariableDeclaration","scope":888,"src":"5633:17:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":852,"name":"bytes","nodeType":"ElementaryTypeName","src":"5633:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5613:38:5"},"returnParameters":{"id":855,"nodeType":"ParameterList","parameters":[],"src":"5661:0:5"},"scope":903,"src":"5582:342:5","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":901,"nodeType":"Block","src":"6149:86:5","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":892,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6163:3:5","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6167:5:5","memberName":"value","nodeType":"MemberAccess","src":"6163:9:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6175:1:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6163:13:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":900,"nodeType":"IfStatement","src":"6159:70:5","trueBody":{"id":899,"nodeType":"Block","src":"6178:51:5","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":896,"name":"ERC1967NonPayable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":642,"src":"6199:17:5","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6199:19:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":898,"nodeType":"RevertStatement","src":"6192:26:5"}]}}]},"documentation":{"id":889,"nodeType":"StructuredDocumentation","src":"5930:178:5","text":" @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n if an upgrade doesn't perform an initialization call."},"id":902,"implemented":true,"kind":"function","modifiers":[],"name":"_checkNonPayable","nameLocation":"6122:16:5","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[],"src":"6138:2:5"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"6149:0:5"},"scope":903,"src":"6113:122:5","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":904,"src":"496:5741:5","usedErrors":[629,634,639,642],"usedEvents":[]}],"src":"114:6124:5"},"id":5},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","exportedSymbols":{"IBeacon":[913]},"id":914,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":905,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"108:24:6"},{"abstract":false,"baseContracts":[],"canonicalName":"IBeacon","contractDependencies":[],"contractKind":"interface","documentation":{"id":906,"nodeType":"StructuredDocumentation","src":"134:79:6","text":" @dev This is the interface that {BeaconProxy} expects of its beacon."},"fullyImplemented":false,"id":913,"linearizedBaseContracts":[913],"name":"IBeacon","nameLocation":"224:7:6","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":907,"nodeType":"StructuredDocumentation","src":"238:168:6","text":" @dev Must return an address that can be used as a delegate call target.\n {UpgradeableBeacon} will check that this address is a contract."},"functionSelector":"5c60da1b","id":912,"implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"420:14:6","nodeType":"FunctionDefinition","parameters":{"id":908,"nodeType":"ParameterList","parameters":[],"src":"434:2:6"},"returnParameters":{"id":911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":912,"src":"460:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":909,"name":"address","nodeType":"ElementaryTypeName","src":"460:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"459:9:6"},"scope":913,"src":"411:58:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":914,"src":"214:257:6","usedErrors":[],"usedEvents":[]}],"src":"108:364:6"},"id":6},"@openzeppelin/contracts/token/ERC1155/IERC1155.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC1155/IERC1155.sol","exportedSymbols":{"IERC1155":[1036],"IERC165":[1649]},"id":1037,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":915,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"110:24:7"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../../utils/introspection/IERC165.sol","id":917,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1037,"sourceUnit":1650,"src":"136:62:7","symbolAliases":[{"foreign":{"id":916,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"144:7:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":919,"name":"IERC165","nameLocations":["359:7:7"],"nodeType":"IdentifierPath","referencedDeclaration":1649,"src":"359:7:7"},"id":920,"nodeType":"InheritanceSpecifier","src":"359:7:7"}],"canonicalName":"IERC1155","contractDependencies":[],"contractKind":"interface","documentation":{"id":918,"nodeType":"StructuredDocumentation","src":"200:136:7","text":" @dev Required interface of an ERC-1155 compliant contract, as defined in the\n https://eips.ethereum.org/EIPS/eip-1155[ERC]."},"fullyImplemented":false,"id":1036,"linearizedBaseContracts":[1036,1649],"name":"IERC1155","nameLocation":"347:8:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":921,"nodeType":"StructuredDocumentation","src":"373:125:7","text":" @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`."},"eventSelector":"c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62","id":933,"name":"TransferSingle","nameLocation":"509:14:7","nodeType":"EventDefinition","parameters":{"id":932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":923,"indexed":true,"mutability":"mutable","name":"operator","nameLocation":"540:8:7","nodeType":"VariableDeclaration","scope":933,"src":"524:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":922,"name":"address","nodeType":"ElementaryTypeName","src":"524:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":925,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"566:4:7","nodeType":"VariableDeclaration","scope":933,"src":"550:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":924,"name":"address","nodeType":"ElementaryTypeName","src":"550:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":927,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"588:2:7","nodeType":"VariableDeclaration","scope":933,"src":"572:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":926,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":929,"indexed":false,"mutability":"mutable","name":"id","nameLocation":"600:2:7","nodeType":"VariableDeclaration","scope":933,"src":"592:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":928,"name":"uint256","nodeType":"ElementaryTypeName","src":"592:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":931,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"612:5:7","nodeType":"VariableDeclaration","scope":933,"src":"604:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":930,"name":"uint256","nodeType":"ElementaryTypeName","src":"604:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"523:95:7"},"src":"503:116:7"},{"anonymous":false,"documentation":{"id":934,"nodeType":"StructuredDocumentation","src":"625:144:7","text":" @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n transfers."},"eventSelector":"4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb","id":948,"name":"TransferBatch","nameLocation":"780:13:7","nodeType":"EventDefinition","parameters":{"id":947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":936,"indexed":true,"mutability":"mutable","name":"operator","nameLocation":"819:8:7","nodeType":"VariableDeclaration","scope":948,"src":"803:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":935,"name":"address","nodeType":"ElementaryTypeName","src":"803:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":938,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"853:4:7","nodeType":"VariableDeclaration","scope":948,"src":"837:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":937,"name":"address","nodeType":"ElementaryTypeName","src":"837:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":940,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"883:2:7","nodeType":"VariableDeclaration","scope":948,"src":"867:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":939,"name":"address","nodeType":"ElementaryTypeName","src":"867:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":943,"indexed":false,"mutability":"mutable","name":"ids","nameLocation":"905:3:7","nodeType":"VariableDeclaration","scope":948,"src":"895:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":941,"name":"uint256","nodeType":"ElementaryTypeName","src":"895:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":942,"nodeType":"ArrayTypeName","src":"895:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":946,"indexed":false,"mutability":"mutable","name":"values","nameLocation":"928:6:7","nodeType":"VariableDeclaration","scope":948,"src":"918:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":944,"name":"uint256","nodeType":"ElementaryTypeName","src":"918:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":945,"nodeType":"ArrayTypeName","src":"918:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"793:147:7"},"src":"774:167:7"},{"anonymous":false,"documentation":{"id":949,"nodeType":"StructuredDocumentation","src":"947:147:7","text":" @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n `approved`."},"eventSelector":"17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31","id":957,"name":"ApprovalForAll","nameLocation":"1105:14:7","nodeType":"EventDefinition","parameters":{"id":956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":951,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1136:7:7","nodeType":"VariableDeclaration","scope":957,"src":"1120:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":950,"name":"address","nodeType":"ElementaryTypeName","src":"1120:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":953,"indexed":true,"mutability":"mutable","name":"operator","nameLocation":"1161:8:7","nodeType":"VariableDeclaration","scope":957,"src":"1145:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":952,"name":"address","nodeType":"ElementaryTypeName","src":"1145:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":955,"indexed":false,"mutability":"mutable","name":"approved","nameLocation":"1176:8:7","nodeType":"VariableDeclaration","scope":957,"src":"1171:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":954,"name":"bool","nodeType":"ElementaryTypeName","src":"1171:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1119:66:7"},"src":"1099:87:7"},{"anonymous":false,"documentation":{"id":958,"nodeType":"StructuredDocumentation","src":"1192:343:7","text":" @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n If an {URI} event was emitted for `id`, the standard\n https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n returned by {IERC1155MetadataURI-uri}."},"eventSelector":"6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b","id":964,"name":"URI","nameLocation":"1546:3:7","nodeType":"EventDefinition","parameters":{"id":963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":960,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"1557:5:7","nodeType":"VariableDeclaration","scope":964,"src":"1550:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":959,"name":"string","nodeType":"ElementaryTypeName","src":"1550:6:7","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":962,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"1580:2:7","nodeType":"VariableDeclaration","scope":964,"src":"1564:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":961,"name":"uint256","nodeType":"ElementaryTypeName","src":"1564:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:34:7"},"src":"1540:44:7"},{"documentation":{"id":965,"nodeType":"StructuredDocumentation","src":"1590:90:7","text":" @dev Returns the value of tokens of token type `id` owned by `account`."},"functionSelector":"00fdd58e","id":974,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"1694:9:7","nodeType":"FunctionDefinition","parameters":{"id":970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":967,"mutability":"mutable","name":"account","nameLocation":"1712:7:7","nodeType":"VariableDeclaration","scope":974,"src":"1704:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":966,"name":"address","nodeType":"ElementaryTypeName","src":"1704:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":969,"mutability":"mutable","name":"id","nameLocation":"1729:2:7","nodeType":"VariableDeclaration","scope":974,"src":"1721:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":968,"name":"uint256","nodeType":"ElementaryTypeName","src":"1721:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1703:29:7"},"returnParameters":{"id":973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":974,"src":"1756:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":971,"name":"uint256","nodeType":"ElementaryTypeName","src":"1756:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1755:9:7"},"scope":1036,"src":"1685:80:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":975,"nodeType":"StructuredDocumentation","src":"1771:188:7","text":" @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n Requirements:\n - `accounts` and `ids` must have the same length."},"functionSelector":"4e1273f4","id":987,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOfBatch","nameLocation":"1973:14:7","nodeType":"FunctionDefinition","parameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":978,"mutability":"mutable","name":"accounts","nameLocation":"2016:8:7","nodeType":"VariableDeclaration","scope":987,"src":"1997:27:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":976,"name":"address","nodeType":"ElementaryTypeName","src":"1997:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":977,"nodeType":"ArrayTypeName","src":"1997:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":981,"mutability":"mutable","name":"ids","nameLocation":"2053:3:7","nodeType":"VariableDeclaration","scope":987,"src":"2034:22:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":979,"name":"uint256","nodeType":"ElementaryTypeName","src":"2034:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":980,"nodeType":"ArrayTypeName","src":"2034:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1987:75:7"},"returnParameters":{"id":986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":985,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":987,"src":"2086:16:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":983,"name":"uint256","nodeType":"ElementaryTypeName","src":"2086:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":984,"nodeType":"ArrayTypeName","src":"2086:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2085:18:7"},"scope":1036,"src":"1964:140:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":988,"nodeType":"StructuredDocumentation","src":"2110:254:7","text":" @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n Emits an {ApprovalForAll} event.\n Requirements:\n - `operator` cannot be the zero address."},"functionSelector":"a22cb465","id":995,"implemented":false,"kind":"function","modifiers":[],"name":"setApprovalForAll","nameLocation":"2378:17:7","nodeType":"FunctionDefinition","parameters":{"id":993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":990,"mutability":"mutable","name":"operator","nameLocation":"2404:8:7","nodeType":"VariableDeclaration","scope":995,"src":"2396:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":989,"name":"address","nodeType":"ElementaryTypeName","src":"2396:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":992,"mutability":"mutable","name":"approved","nameLocation":"2419:8:7","nodeType":"VariableDeclaration","scope":995,"src":"2414:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":991,"name":"bool","nodeType":"ElementaryTypeName","src":"2414:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2395:33:7"},"returnParameters":{"id":994,"nodeType":"ParameterList","parameters":[],"src":"2437:0:7"},"scope":1036,"src":"2369:69:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":996,"nodeType":"StructuredDocumentation","src":"2444:135:7","text":" @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n See {setApprovalForAll}."},"functionSelector":"e985e9c5","id":1005,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedForAll","nameLocation":"2593:16:7","nodeType":"FunctionDefinition","parameters":{"id":1001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":998,"mutability":"mutable","name":"account","nameLocation":"2618:7:7","nodeType":"VariableDeclaration","scope":1005,"src":"2610:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":997,"name":"address","nodeType":"ElementaryTypeName","src":"2610:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1000,"mutability":"mutable","name":"operator","nameLocation":"2635:8:7","nodeType":"VariableDeclaration","scope":1005,"src":"2627:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":999,"name":"address","nodeType":"ElementaryTypeName","src":"2627:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2609:35:7"},"returnParameters":{"id":1004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1003,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1005,"src":"2668:4:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1002,"name":"bool","nodeType":"ElementaryTypeName","src":"2668:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2667:6:7"},"scope":1036,"src":"2584:90:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1006,"nodeType":"StructuredDocumentation","src":"2680:927:7","text":" @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`.\n WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver.\n Ensure to follow the checks-effects-interactions pattern and consider employing\n reentrancy guards when interacting with untrusted contracts.\n Emits a {TransferSingle} event.\n Requirements:\n - `to` cannot be the zero address.\n - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n - `from` must have a balance of tokens of type `id` of at least `value` amount.\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n acceptance magic value."},"functionSelector":"f242432a","id":1019,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"3621:16:7","nodeType":"FunctionDefinition","parameters":{"id":1017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1008,"mutability":"mutable","name":"from","nameLocation":"3646:4:7","nodeType":"VariableDeclaration","scope":1019,"src":"3638:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1007,"name":"address","nodeType":"ElementaryTypeName","src":"3638:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1010,"mutability":"mutable","name":"to","nameLocation":"3660:2:7","nodeType":"VariableDeclaration","scope":1019,"src":"3652:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1009,"name":"address","nodeType":"ElementaryTypeName","src":"3652:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1012,"mutability":"mutable","name":"id","nameLocation":"3672:2:7","nodeType":"VariableDeclaration","scope":1019,"src":"3664:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1011,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1014,"mutability":"mutable","name":"value","nameLocation":"3684:5:7","nodeType":"VariableDeclaration","scope":1019,"src":"3676:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1013,"name":"uint256","nodeType":"ElementaryTypeName","src":"3676:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1016,"mutability":"mutable","name":"data","nameLocation":"3706:4:7","nodeType":"VariableDeclaration","scope":1019,"src":"3691:19:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1015,"name":"bytes","nodeType":"ElementaryTypeName","src":"3691:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3637:74:7"},"returnParameters":{"id":1018,"nodeType":"ParameterList","parameters":[],"src":"3720:0:7"},"scope":1036,"src":"3612:109:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1020,"nodeType":"StructuredDocumentation","src":"3727:831:7","text":" @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver.\n Ensure to follow the checks-effects-interactions pattern and consider employing\n reentrancy guards when interacting with untrusted contracts.\n Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments.\n Requirements:\n - `ids` and `values` must have the same length.\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n acceptance magic value."},"functionSelector":"2eb2c2d6","id":1035,"implemented":false,"kind":"function","modifiers":[],"name":"safeBatchTransferFrom","nameLocation":"4572:21:7","nodeType":"FunctionDefinition","parameters":{"id":1033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1022,"mutability":"mutable","name":"from","nameLocation":"4611:4:7","nodeType":"VariableDeclaration","scope":1035,"src":"4603:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1021,"name":"address","nodeType":"ElementaryTypeName","src":"4603:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1024,"mutability":"mutable","name":"to","nameLocation":"4633:2:7","nodeType":"VariableDeclaration","scope":1035,"src":"4625:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1023,"name":"address","nodeType":"ElementaryTypeName","src":"4625:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1027,"mutability":"mutable","name":"ids","nameLocation":"4664:3:7","nodeType":"VariableDeclaration","scope":1035,"src":"4645:22:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1025,"name":"uint256","nodeType":"ElementaryTypeName","src":"4645:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1026,"nodeType":"ArrayTypeName","src":"4645:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1030,"mutability":"mutable","name":"values","nameLocation":"4696:6:7","nodeType":"VariableDeclaration","scope":1035,"src":"4677:25:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1028,"name":"uint256","nodeType":"ElementaryTypeName","src":"4677:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1029,"nodeType":"ArrayTypeName","src":"4677:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1032,"mutability":"mutable","name":"data","nameLocation":"4727:4:7","nodeType":"VariableDeclaration","scope":1035,"src":"4712:19:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1031,"name":"bytes","nodeType":"ElementaryTypeName","src":"4712:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4593:144:7"},"returnParameters":{"id":1034,"nodeType":"ParameterList","parameters":[],"src":"4746:0:7"},"scope":1036,"src":"4563:184:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1037,"src":"337:4412:7","usedErrors":[],"usedEvents":[933,948,957,964]}],"src":"110:4640:7"},"id":7},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[1114]},"id":1115,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1038,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:8"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":1039,"nodeType":"StructuredDocumentation","src":"132:71:8","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":1114,"linearizedBaseContracts":[1114],"name":"IERC20","nameLocation":"214:6:8","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1040,"nodeType":"StructuredDocumentation","src":"227:158:8","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":1048,"name":"Transfer","nameLocation":"396:8:8","nodeType":"EventDefinition","parameters":{"id":1047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1042,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"421:4:8","nodeType":"VariableDeclaration","scope":1048,"src":"405:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1041,"name":"address","nodeType":"ElementaryTypeName","src":"405:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1044,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"443:2:8","nodeType":"VariableDeclaration","scope":1048,"src":"427:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1043,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1046,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"455:5:8","nodeType":"VariableDeclaration","scope":1048,"src":"447:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1045,"name":"uint256","nodeType":"ElementaryTypeName","src":"447:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:57:8"},"src":"390:72:8"},{"anonymous":false,"documentation":{"id":1049,"nodeType":"StructuredDocumentation","src":"468:148:8","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":1057,"name":"Approval","nameLocation":"627:8:8","nodeType":"EventDefinition","parameters":{"id":1056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1051,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"652:5:8","nodeType":"VariableDeclaration","scope":1057,"src":"636:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1050,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1053,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"675:7:8","nodeType":"VariableDeclaration","scope":1057,"src":"659:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1052,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1055,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"692:5:8","nodeType":"VariableDeclaration","scope":1057,"src":"684:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1054,"name":"uint256","nodeType":"ElementaryTypeName","src":"684:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"635:63:8"},"src":"621:78:8"},{"documentation":{"id":1058,"nodeType":"StructuredDocumentation","src":"705:65:8","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":1063,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"784:11:8","nodeType":"FunctionDefinition","parameters":{"id":1059,"nodeType":"ParameterList","parameters":[],"src":"795:2:8"},"returnParameters":{"id":1062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1063,"src":"821:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1060,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"820:9:8"},"scope":1114,"src":"775:55:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1064,"nodeType":"StructuredDocumentation","src":"836:71:8","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":1071,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"921:9:8","nodeType":"FunctionDefinition","parameters":{"id":1067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1066,"mutability":"mutable","name":"account","nameLocation":"939:7:8","nodeType":"VariableDeclaration","scope":1071,"src":"931:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1065,"name":"address","nodeType":"ElementaryTypeName","src":"931:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"930:17:8"},"returnParameters":{"id":1070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1071,"src":"971:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1068,"name":"uint256","nodeType":"ElementaryTypeName","src":"971:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:9:8"},"scope":1114,"src":"912:68:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1072,"nodeType":"StructuredDocumentation","src":"986:213:8","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":1081,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:8","nodeType":"FunctionDefinition","parameters":{"id":1077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1074,"mutability":"mutable","name":"to","nameLocation":"1230:2:8","nodeType":"VariableDeclaration","scope":1081,"src":"1222:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1073,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1076,"mutability":"mutable","name":"value","nameLocation":"1242:5:8","nodeType":"VariableDeclaration","scope":1081,"src":"1234:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1075,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:27:8"},"returnParameters":{"id":1080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1079,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1081,"src":"1267:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1078,"name":"bool","nodeType":"ElementaryTypeName","src":"1267:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1266:6:8"},"scope":1114,"src":"1204:69:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1082,"nodeType":"StructuredDocumentation","src":"1279:264:8","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":1091,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1557:9:8","nodeType":"FunctionDefinition","parameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1084,"mutability":"mutable","name":"owner","nameLocation":"1575:5:8","nodeType":"VariableDeclaration","scope":1091,"src":"1567:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1083,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1086,"mutability":"mutable","name":"spender","nameLocation":"1590:7:8","nodeType":"VariableDeclaration","scope":1091,"src":"1582:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1085,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:32:8"},"returnParameters":{"id":1090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1091,"src":"1622:7:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1088,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:9:8"},"scope":1114,"src":"1548:83:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1092,"nodeType":"StructuredDocumentation","src":"1637:667:8","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":1101,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2318:7:8","nodeType":"FunctionDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1094,"mutability":"mutable","name":"spender","nameLocation":"2334:7:8","nodeType":"VariableDeclaration","scope":1101,"src":"2326:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1093,"name":"address","nodeType":"ElementaryTypeName","src":"2326:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1096,"mutability":"mutable","name":"value","nameLocation":"2351:5:8","nodeType":"VariableDeclaration","scope":1101,"src":"2343:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1095,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:32:8"},"returnParameters":{"id":1100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1099,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1101,"src":"2376:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1098,"name":"bool","nodeType":"ElementaryTypeName","src":"2376:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2375:6:8"},"scope":1114,"src":"2309:73:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1102,"nodeType":"StructuredDocumentation","src":"2388:297:8","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":1113,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2699:12:8","nodeType":"FunctionDefinition","parameters":{"id":1109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1104,"mutability":"mutable","name":"from","nameLocation":"2720:4:8","nodeType":"VariableDeclaration","scope":1113,"src":"2712:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1103,"name":"address","nodeType":"ElementaryTypeName","src":"2712:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1106,"mutability":"mutable","name":"to","nameLocation":"2734:2:8","nodeType":"VariableDeclaration","scope":1113,"src":"2726:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1105,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1108,"mutability":"mutable","name":"value","nameLocation":"2746:5:8","nodeType":"VariableDeclaration","scope":1113,"src":"2738:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1107,"name":"uint256","nodeType":"ElementaryTypeName","src":"2738:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2711:41:8"},"returnParameters":{"id":1112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1111,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1113,"src":"2771:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1110,"name":"bool","nodeType":"ElementaryTypeName","src":"2771:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2770:6:8"},"scope":1114,"src":"2690:87:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1115,"src":"204:2575:8","usedErrors":[],"usedEvents":[1048,1057]}],"src":"106:2674:8"},"id":8},"@openzeppelin/contracts/token/ERC721/IERC721.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721.sol","exportedSymbols":{"IERC165":[1649],"IERC721":[1231]},"id":1232,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1116,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"108:24:9"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../../utils/introspection/IERC165.sol","id":1118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1232,"sourceUnit":1650,"src":"134:62:9","symbolAliases":[{"foreign":{"id":1117,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1649,"src":"142:7:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1120,"name":"IERC165","nameLocations":["288:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":1649,"src":"288:7:9"},"id":1121,"nodeType":"InheritanceSpecifier","src":"288:7:9"}],"canonicalName":"IERC721","contractDependencies":[],"contractKind":"interface","documentation":{"id":1119,"nodeType":"StructuredDocumentation","src":"198:68:9","text":" @dev Required interface of an ERC-721 compliant contract."},"fullyImplemented":false,"id":1231,"linearizedBaseContracts":[1231,1649],"name":"IERC721","nameLocation":"277:7:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1122,"nodeType":"StructuredDocumentation","src":"302:88:9","text":" @dev Emitted when `tokenId` token is transferred from `from` to `to`."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":1130,"name":"Transfer","nameLocation":"401:8:9","nodeType":"EventDefinition","parameters":{"id":1129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1124,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"426:4:9","nodeType":"VariableDeclaration","scope":1130,"src":"410:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1123,"name":"address","nodeType":"ElementaryTypeName","src":"410:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1126,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"448:2:9","nodeType":"VariableDeclaration","scope":1130,"src":"432:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1125,"name":"address","nodeType":"ElementaryTypeName","src":"432:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1128,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"468:7:9","nodeType":"VariableDeclaration","scope":1130,"src":"452:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1127,"name":"uint256","nodeType":"ElementaryTypeName","src":"452:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"409:67:9"},"src":"395:82:9"},{"anonymous":false,"documentation":{"id":1131,"nodeType":"StructuredDocumentation","src":"483:94:9","text":" @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":1139,"name":"Approval","nameLocation":"588:8:9","nodeType":"EventDefinition","parameters":{"id":1138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1133,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"613:5:9","nodeType":"VariableDeclaration","scope":1139,"src":"597:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1132,"name":"address","nodeType":"ElementaryTypeName","src":"597:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1135,"indexed":true,"mutability":"mutable","name":"approved","nameLocation":"636:8:9","nodeType":"VariableDeclaration","scope":1139,"src":"620:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1134,"name":"address","nodeType":"ElementaryTypeName","src":"620:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1137,"indexed":true,"mutability":"mutable","name":"tokenId","nameLocation":"662:7:9","nodeType":"VariableDeclaration","scope":1139,"src":"646:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1136,"name":"uint256","nodeType":"ElementaryTypeName","src":"646:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"596:74:9"},"src":"582:89:9"},{"anonymous":false,"documentation":{"id":1140,"nodeType":"StructuredDocumentation","src":"677:117:9","text":" @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."},"eventSelector":"17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31","id":1148,"name":"ApprovalForAll","nameLocation":"805:14:9","nodeType":"EventDefinition","parameters":{"id":1147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1142,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"836:5:9","nodeType":"VariableDeclaration","scope":1148,"src":"820:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1141,"name":"address","nodeType":"ElementaryTypeName","src":"820:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1144,"indexed":true,"mutability":"mutable","name":"operator","nameLocation":"859:8:9","nodeType":"VariableDeclaration","scope":1148,"src":"843:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"843:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1146,"indexed":false,"mutability":"mutable","name":"approved","nameLocation":"874:8:9","nodeType":"VariableDeclaration","scope":1148,"src":"869:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1145,"name":"bool","nodeType":"ElementaryTypeName","src":"869:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"819:64:9"},"src":"799:85:9"},{"documentation":{"id":1149,"nodeType":"StructuredDocumentation","src":"890:76:9","text":" @dev Returns the number of tokens in ``owner``'s account."},"functionSelector":"70a08231","id":1156,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"980:9:9","nodeType":"FunctionDefinition","parameters":{"id":1152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1151,"mutability":"mutable","name":"owner","nameLocation":"998:5:9","nodeType":"VariableDeclaration","scope":1156,"src":"990:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1150,"name":"address","nodeType":"ElementaryTypeName","src":"990:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"989:15:9"},"returnParameters":{"id":1155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1154,"mutability":"mutable","name":"balance","nameLocation":"1036:7:9","nodeType":"VariableDeclaration","scope":1156,"src":"1028:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1153,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1027:17:9"},"scope":1231,"src":"971:74:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1157,"nodeType":"StructuredDocumentation","src":"1051:131:9","text":" @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."},"functionSelector":"6352211e","id":1164,"implemented":false,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"1196:7:9","nodeType":"FunctionDefinition","parameters":{"id":1160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1159,"mutability":"mutable","name":"tokenId","nameLocation":"1212:7:9","nodeType":"VariableDeclaration","scope":1164,"src":"1204:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1158,"name":"uint256","nodeType":"ElementaryTypeName","src":"1204:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1203:17:9"},"returnParameters":{"id":1163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1162,"mutability":"mutable","name":"owner","nameLocation":"1252:5:9","nodeType":"VariableDeclaration","scope":1164,"src":"1244:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1161,"name":"address","nodeType":"ElementaryTypeName","src":"1244:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1243:15:9"},"scope":1231,"src":"1187:72:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1165,"nodeType":"StructuredDocumentation","src":"1265:565:9","text":" @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n   a safe transfer.\n Emits a {Transfer} event."},"functionSelector":"b88d4fde","id":1176,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1844:16:9","nodeType":"FunctionDefinition","parameters":{"id":1174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1167,"mutability":"mutable","name":"from","nameLocation":"1869:4:9","nodeType":"VariableDeclaration","scope":1176,"src":"1861:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1166,"name":"address","nodeType":"ElementaryTypeName","src":"1861:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1169,"mutability":"mutable","name":"to","nameLocation":"1883:2:9","nodeType":"VariableDeclaration","scope":1176,"src":"1875:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1168,"name":"address","nodeType":"ElementaryTypeName","src":"1875:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1171,"mutability":"mutable","name":"tokenId","nameLocation":"1895:7:9","nodeType":"VariableDeclaration","scope":1176,"src":"1887:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1170,"name":"uint256","nodeType":"ElementaryTypeName","src":"1887:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1173,"mutability":"mutable","name":"data","nameLocation":"1919:4:9","nodeType":"VariableDeclaration","scope":1176,"src":"1904:19:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1172,"name":"bytes","nodeType":"ElementaryTypeName","src":"1904:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1860:64:9"},"returnParameters":{"id":1175,"nodeType":"ParameterList","parameters":[],"src":"1933:0:9"},"scope":1231,"src":"1835:99:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1177,"nodeType":"StructuredDocumentation","src":"1940:706:9","text":" @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC-721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\n   {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\n   a safe transfer.\n Emits a {Transfer} event."},"functionSelector":"42842e0e","id":1186,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"2660:16:9","nodeType":"FunctionDefinition","parameters":{"id":1184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1179,"mutability":"mutable","name":"from","nameLocation":"2685:4:9","nodeType":"VariableDeclaration","scope":1186,"src":"2677:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1178,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1181,"mutability":"mutable","name":"to","nameLocation":"2699:2:9","nodeType":"VariableDeclaration","scope":1186,"src":"2691:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1180,"name":"address","nodeType":"ElementaryTypeName","src":"2691:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1183,"mutability":"mutable","name":"tokenId","nameLocation":"2711:7:9","nodeType":"VariableDeclaration","scope":1186,"src":"2703:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1182,"name":"uint256","nodeType":"ElementaryTypeName","src":"2703:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2676:43:9"},"returnParameters":{"id":1185,"nodeType":"ParameterList","parameters":[],"src":"2728:0:9"},"scope":1231,"src":"2651:78:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1187,"nodeType":"StructuredDocumentation","src":"2735:733:9","text":" @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\n or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n understand this adds an external call which potentially creates a reentrancy vulnerability.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":1196,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"3482:12:9","nodeType":"FunctionDefinition","parameters":{"id":1194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1189,"mutability":"mutable","name":"from","nameLocation":"3503:4:9","nodeType":"VariableDeclaration","scope":1196,"src":"3495:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1188,"name":"address","nodeType":"ElementaryTypeName","src":"3495:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1191,"mutability":"mutable","name":"to","nameLocation":"3517:2:9","nodeType":"VariableDeclaration","scope":1196,"src":"3509:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1190,"name":"address","nodeType":"ElementaryTypeName","src":"3509:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1193,"mutability":"mutable","name":"tokenId","nameLocation":"3529:7:9","nodeType":"VariableDeclaration","scope":1196,"src":"3521:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1192,"name":"uint256","nodeType":"ElementaryTypeName","src":"3521:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3494:43:9"},"returnParameters":{"id":1195,"nodeType":"ParameterList","parameters":[],"src":"3546:0:9"},"scope":1231,"src":"3473:74:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1197,"nodeType":"StructuredDocumentation","src":"3553:452:9","text":" @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":1204,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4019:7:9","nodeType":"FunctionDefinition","parameters":{"id":1202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1199,"mutability":"mutable","name":"to","nameLocation":"4035:2:9","nodeType":"VariableDeclaration","scope":1204,"src":"4027:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1198,"name":"address","nodeType":"ElementaryTypeName","src":"4027:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1201,"mutability":"mutable","name":"tokenId","nameLocation":"4047:7:9","nodeType":"VariableDeclaration","scope":1204,"src":"4039:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1200,"name":"uint256","nodeType":"ElementaryTypeName","src":"4039:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4026:29:9"},"returnParameters":{"id":1203,"nodeType":"ParameterList","parameters":[],"src":"4064:0:9"},"scope":1231,"src":"4010:55:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1205,"nodeType":"StructuredDocumentation","src":"4071:315:9","text":" @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the address zero.\n Emits an {ApprovalForAll} event."},"functionSelector":"a22cb465","id":1212,"implemented":false,"kind":"function","modifiers":[],"name":"setApprovalForAll","nameLocation":"4400:17:9","nodeType":"FunctionDefinition","parameters":{"id":1210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1207,"mutability":"mutable","name":"operator","nameLocation":"4426:8:9","nodeType":"VariableDeclaration","scope":1212,"src":"4418:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1206,"name":"address","nodeType":"ElementaryTypeName","src":"4418:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1209,"mutability":"mutable","name":"approved","nameLocation":"4441:8:9","nodeType":"VariableDeclaration","scope":1212,"src":"4436:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1208,"name":"bool","nodeType":"ElementaryTypeName","src":"4436:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4417:33:9"},"returnParameters":{"id":1211,"nodeType":"ParameterList","parameters":[],"src":"4459:0:9"},"scope":1231,"src":"4391:69:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1213,"nodeType":"StructuredDocumentation","src":"4466:139:9","text":" @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."},"functionSelector":"081812fc","id":1220,"implemented":false,"kind":"function","modifiers":[],"name":"getApproved","nameLocation":"4619:11:9","nodeType":"FunctionDefinition","parameters":{"id":1216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1215,"mutability":"mutable","name":"tokenId","nameLocation":"4639:7:9","nodeType":"VariableDeclaration","scope":1220,"src":"4631:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1214,"name":"uint256","nodeType":"ElementaryTypeName","src":"4631:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4630:17:9"},"returnParameters":{"id":1219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1218,"mutability":"mutable","name":"operator","nameLocation":"4679:8:9","nodeType":"VariableDeclaration","scope":1220,"src":"4671:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1217,"name":"address","nodeType":"ElementaryTypeName","src":"4671:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4670:18:9"},"scope":1231,"src":"4610:79:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1221,"nodeType":"StructuredDocumentation","src":"4695:138:9","text":" @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"},"functionSelector":"e985e9c5","id":1230,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedForAll","nameLocation":"4847:16:9","nodeType":"FunctionDefinition","parameters":{"id":1226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1223,"mutability":"mutable","name":"owner","nameLocation":"4872:5:9","nodeType":"VariableDeclaration","scope":1230,"src":"4864:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1222,"name":"address","nodeType":"ElementaryTypeName","src":"4864:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1225,"mutability":"mutable","name":"operator","nameLocation":"4887:8:9","nodeType":"VariableDeclaration","scope":1230,"src":"4879:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1224,"name":"address","nodeType":"ElementaryTypeName","src":"4879:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4863:33:9"},"returnParameters":{"id":1229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1230,"src":"4920:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1227,"name":"bool","nodeType":"ElementaryTypeName","src":"4920:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4919:6:9"},"scope":1231,"src":"4838:88:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1232,"src":"267:4661:9","usedErrors":[],"usedEvents":[1130,1139,1148]}],"src":"108:4821:9"},"id":9},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[1491],"Errors":[1513]},"id":1492,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1233,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:10"},{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","file":"./Errors.sol","id":1235,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1492,"sourceUnit":1514,"src":"127:36:10","symbolAliases":[{"foreign":{"id":1234,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"135:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":1236,"nodeType":"StructuredDocumentation","src":"165:67:10","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":1491,"linearizedBaseContracts":[1491],"name":"Address","nameLocation":"241:7:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1237,"nodeType":"StructuredDocumentation","src":"255:75:10","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":1241,"name":"AddressEmptyCode","nameLocation":"341:16:10","nodeType":"ErrorDefinition","parameters":{"id":1240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1239,"mutability":"mutable","name":"target","nameLocation":"366:6:10","nodeType":"VariableDeclaration","scope":1241,"src":"358:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1238,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"357:16:10"},"src":"335:39:10"},{"body":{"id":1288,"nodeType":"Block","src":"1361:294:10","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":1251,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1383:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}],"id":1250,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1375:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1249,"name":"address","nodeType":"ElementaryTypeName","src":"1375:7:10","typeDescriptions":{}}},"id":1252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1389:7:10","memberName":"balance","nodeType":"MemberAccess","src":"1375:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1254,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1246,"src":"1399:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1375:30:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1268,"nodeType":"IfStatement","src":"1371:125:10","trueBody":{"id":1267,"nodeType":"Block","src":"1407:89:10","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":1261,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1463:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}],"id":1260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1455:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1259,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:10","typeDescriptions":{}}},"id":1262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1469:7:10","memberName":"balance","nodeType":"MemberAccess","src":"1455:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1264,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1246,"src":"1478:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1256,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"1428:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$1513_$","typeString":"type(library Errors)"}},"id":1258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:19:10","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":1501,"src":"1428:26:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":1265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1428:57:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1266,"nodeType":"RevertStatement","src":"1421:64:10"}]}},{"assignments":[1270,1272],"declarations":[{"constant":false,"id":1270,"mutability":"mutable","name":"success","nameLocation":"1512:7:10","nodeType":"VariableDeclaration","scope":1288,"src":"1507:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1269,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"returndata","nameLocation":"1534:10:10","nodeType":"VariableDeclaration","scope":1288,"src":"1521:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1271,"name":"bytes","nodeType":"ElementaryTypeName","src":"1521:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1279,"initialValue":{"arguments":[{"hexValue":"","id":1277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1578:2:10","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":1273,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1244,"src":"1548:9:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":1274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1558:4:10","memberName":"call","nodeType":"MemberAccess","src":"1548:14:10","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":1276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":1275,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1246,"src":"1570:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1548:29:10","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":1278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:33:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1506:75:10"},{"condition":{"id":1281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1595:8:10","subExpression":{"id":1280,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1270,"src":"1596:7:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1287,"nodeType":"IfStatement","src":"1591:58:10","trueBody":{"id":1286,"nodeType":"Block","src":"1605:44:10","statements":[{"expression":{"arguments":[{"id":1283,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1272,"src":"1627:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1282,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1490,"src":"1619:7:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":1284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:19:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1285,"nodeType":"ExpressionStatement","src":"1619:19:10"}]}}]},"documentation":{"id":1242,"nodeType":"StructuredDocumentation","src":"380:905:10","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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":1289,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1299:9:10","nodeType":"FunctionDefinition","parameters":{"id":1247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1244,"mutability":"mutable","name":"recipient","nameLocation":"1325:9:10","nodeType":"VariableDeclaration","scope":1289,"src":"1309:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1243,"name":"address","nodeType":"ElementaryTypeName","src":"1309:15:10","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1246,"mutability":"mutable","name":"amount","nameLocation":"1344:6:10","nodeType":"VariableDeclaration","scope":1289,"src":"1336:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1245,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1308:43:10"},"returnParameters":{"id":1248,"nodeType":"ParameterList","parameters":[],"src":"1361:0:10"},"scope":1491,"src":"1290:365:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1305,"nodeType":"Block","src":"2589:62:10","statements":[{"expression":{"arguments":[{"id":1300,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1292,"src":"2628:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1301,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1294,"src":"2636:4:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":1302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2642:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"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"}],"id":1299,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1356,"src":"2606:21:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":1303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2606:38:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1298,"id":1304,"nodeType":"Return","src":"2599:45:10"}]},"documentation":{"id":1290,"nodeType":"StructuredDocumentation","src":"1661:834:10","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 or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {Errors.FailedCall} error.\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."},"id":1306,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2509:12:10","nodeType":"FunctionDefinition","parameters":{"id":1295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1292,"mutability":"mutable","name":"target","nameLocation":"2530:6:10","nodeType":"VariableDeclaration","scope":1306,"src":"2522:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1291,"name":"address","nodeType":"ElementaryTypeName","src":"2522:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1294,"mutability":"mutable","name":"data","nameLocation":"2551:4:10","nodeType":"VariableDeclaration","scope":1306,"src":"2538:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1293,"name":"bytes","nodeType":"ElementaryTypeName","src":"2538:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2521:35:10"},"returnParameters":{"id":1298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1306,"src":"2575:12:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1296,"name":"bytes","nodeType":"ElementaryTypeName","src":"2575:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2574:14:10"},"scope":1491,"src":"2500:151:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1355,"nodeType":"Block","src":"3088:294:10","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":1320,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3110:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}],"id":1319,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3102:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1318,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:10","typeDescriptions":{}}},"id":1321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3102:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3116:7:10","memberName":"balance","nodeType":"MemberAccess","src":"3102:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1323,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"3126:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3102:29:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1337,"nodeType":"IfStatement","src":"3098:123:10","trueBody":{"id":1336,"nodeType":"Block","src":"3133:88:10","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":1330,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3189:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$1491","typeString":"library Address"}],"id":1329,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3181:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1328,"name":"address","nodeType":"ElementaryTypeName","src":"3181:7:10","typeDescriptions":{}}},"id":1331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3181:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3195:7:10","memberName":"balance","nodeType":"MemberAccess","src":"3181:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1333,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"3204:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1325,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"3154:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$1513_$","typeString":"type(library Errors)"}},"id":1327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3161:19:10","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":1501,"src":"3154:26:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":1334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:56:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1335,"nodeType":"RevertStatement","src":"3147:63:10"}]}},{"assignments":[1339,1341],"declarations":[{"constant":false,"id":1339,"mutability":"mutable","name":"success","nameLocation":"3236:7:10","nodeType":"VariableDeclaration","scope":1355,"src":"3231:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1338,"name":"bool","nodeType":"ElementaryTypeName","src":"3231:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1341,"mutability":"mutable","name":"returndata","nameLocation":"3258:10:10","nodeType":"VariableDeclaration","scope":1355,"src":"3245:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1340,"name":"bytes","nodeType":"ElementaryTypeName","src":"3245:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1348,"initialValue":{"arguments":[{"id":1346,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1311,"src":"3298:4:10","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":1342,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1309,"src":"3272:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3279:4:10","memberName":"call","nodeType":"MemberAccess","src":"3272:11:10","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":1345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":1344,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1313,"src":"3291:5:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3272:25:10","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":1347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:31:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3230:73:10"},{"expression":{"arguments":[{"id":1350,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1309,"src":"3347:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1351,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1339,"src":"3355:7:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1352,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"3364:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1349,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1448,"src":"3320:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":1353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3320:55:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1317,"id":1354,"nodeType":"Return","src":"3313:62:10"}]},"documentation":{"id":1307,"nodeType":"StructuredDocumentation","src":"2657:313:10","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`."},"id":1356,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"2984:21:10","nodeType":"FunctionDefinition","parameters":{"id":1314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1309,"mutability":"mutable","name":"target","nameLocation":"3014:6:10","nodeType":"VariableDeclaration","scope":1356,"src":"3006:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1308,"name":"address","nodeType":"ElementaryTypeName","src":"3006:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1311,"mutability":"mutable","name":"data","nameLocation":"3035:4:10","nodeType":"VariableDeclaration","scope":1356,"src":"3022:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1310,"name":"bytes","nodeType":"ElementaryTypeName","src":"3022:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1313,"mutability":"mutable","name":"value","nameLocation":"3049:5:10","nodeType":"VariableDeclaration","scope":1356,"src":"3041:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1312,"name":"uint256","nodeType":"ElementaryTypeName","src":"3041:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3005:50:10"},"returnParameters":{"id":1317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1356,"src":"3074:12:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1315,"name":"bytes","nodeType":"ElementaryTypeName","src":"3074:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3073:14:10"},"scope":1491,"src":"2975:407:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1381,"nodeType":"Block","src":"3621:154:10","statements":[{"assignments":[1367,1369],"declarations":[{"constant":false,"id":1367,"mutability":"mutable","name":"success","nameLocation":"3637:7:10","nodeType":"VariableDeclaration","scope":1381,"src":"3632:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1366,"name":"bool","nodeType":"ElementaryTypeName","src":"3632:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1369,"mutability":"mutable","name":"returndata","nameLocation":"3659:10:10","nodeType":"VariableDeclaration","scope":1381,"src":"3646:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1368,"name":"bytes","nodeType":"ElementaryTypeName","src":"3646:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1374,"initialValue":{"arguments":[{"id":1372,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"3691:4:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1370,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1359,"src":"3673:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3680:10:10","memberName":"staticcall","nodeType":"MemberAccess","src":"3673:17:10","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":1373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3673:23:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3631:65:10"},{"expression":{"arguments":[{"id":1376,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1359,"src":"3740:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1377,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1367,"src":"3748:7:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1378,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1369,"src":"3757:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1375,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1448,"src":"3713:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":1379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3713:55:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1365,"id":1380,"nodeType":"Return","src":"3706:62:10"}]},"documentation":{"id":1357,"nodeType":"StructuredDocumentation","src":"3388:128:10","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":1382,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3530:18:10","nodeType":"FunctionDefinition","parameters":{"id":1362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1359,"mutability":"mutable","name":"target","nameLocation":"3557:6:10","nodeType":"VariableDeclaration","scope":1382,"src":"3549:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1358,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1361,"mutability":"mutable","name":"data","nameLocation":"3578:4:10","nodeType":"VariableDeclaration","scope":1382,"src":"3565:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1360,"name":"bytes","nodeType":"ElementaryTypeName","src":"3565:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3548:35:10"},"returnParameters":{"id":1365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1382,"src":"3607:12:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1363,"name":"bytes","nodeType":"ElementaryTypeName","src":"3607:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3606:14:10"},"scope":1491,"src":"3521:254:10","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1407,"nodeType":"Block","src":"4013:156:10","statements":[{"assignments":[1393,1395],"declarations":[{"constant":false,"id":1393,"mutability":"mutable","name":"success","nameLocation":"4029:7:10","nodeType":"VariableDeclaration","scope":1407,"src":"4024:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1392,"name":"bool","nodeType":"ElementaryTypeName","src":"4024:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1395,"mutability":"mutable","name":"returndata","nameLocation":"4051:10:10","nodeType":"VariableDeclaration","scope":1407,"src":"4038:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1394,"name":"bytes","nodeType":"ElementaryTypeName","src":"4038:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1400,"initialValue":{"arguments":[{"id":1398,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1387,"src":"4085:4:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1396,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1385,"src":"4065:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4072:12:10","memberName":"delegatecall","nodeType":"MemberAccess","src":"4065:19:10","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":1399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4065:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4023:67:10"},{"expression":{"arguments":[{"id":1402,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1385,"src":"4134:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1403,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1393,"src":"4142:7:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":1404,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1395,"src":"4151:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1401,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1448,"src":"4107:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":1405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4107:55:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1391,"id":1406,"nodeType":"Return","src":"4100:62:10"}]},"documentation":{"id":1383,"nodeType":"StructuredDocumentation","src":"3781:130:10","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":1408,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"3925:20:10","nodeType":"FunctionDefinition","parameters":{"id":1388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1385,"mutability":"mutable","name":"target","nameLocation":"3954:6:10","nodeType":"VariableDeclaration","scope":1408,"src":"3946:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1384,"name":"address","nodeType":"ElementaryTypeName","src":"3946:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1387,"mutability":"mutable","name":"data","nameLocation":"3975:4:10","nodeType":"VariableDeclaration","scope":1408,"src":"3962:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1386,"name":"bytes","nodeType":"ElementaryTypeName","src":"3962:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3945:35:10"},"returnParameters":{"id":1391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1408,"src":"3999:12:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1389,"name":"bytes","nodeType":"ElementaryTypeName","src":"3999:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3998:14:10"},"scope":1491,"src":"3916:253:10","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1447,"nodeType":"Block","src":"4595:424:10","statements":[{"condition":{"id":1421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4609:8:10","subExpression":{"id":1420,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1413,"src":"4610:7:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1445,"nodeType":"Block","src":"4669:344:10","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1427,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"4857:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4868:6:10","memberName":"length","nodeType":"MemberAccess","src":"4857:17:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4878:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4857:22:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":1431,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1411,"src":"4883:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:4:10","memberName":"code","nodeType":"MemberAccess","src":"4883:11:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:6:10","memberName":"length","nodeType":"MemberAccess","src":"4883:18:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4905:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4883:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4857:49:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1442,"nodeType":"IfStatement","src":"4853:119:10","trueBody":{"id":1441,"nodeType":"Block","src":"4908:64:10","statements":[{"errorCall":{"arguments":[{"id":1438,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1411,"src":"4950:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1437,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1241,"src":"4933:16:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":1439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4933:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1440,"nodeType":"RevertStatement","src":"4926:31:10"}]}},{"expression":{"id":1443,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"4992:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1419,"id":1444,"nodeType":"Return","src":"4985:17:10"}]},"id":1446,"nodeType":"IfStatement","src":"4605:408:10","trueBody":{"id":1426,"nodeType":"Block","src":"4619:44:10","statements":[{"expression":{"arguments":[{"id":1423,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"4641:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1422,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1490,"src":"4633:7:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":1424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4633:19:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1425,"nodeType":"ExpressionStatement","src":"4633:19:10"}]}}]},"documentation":{"id":1409,"nodeType":"StructuredDocumentation","src":"4175:257:10","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n of an unsuccessful call."},"id":1448,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4446:26:10","nodeType":"FunctionDefinition","parameters":{"id":1416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1411,"mutability":"mutable","name":"target","nameLocation":"4490:6:10","nodeType":"VariableDeclaration","scope":1448,"src":"4482:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1410,"name":"address","nodeType":"ElementaryTypeName","src":"4482:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1413,"mutability":"mutable","name":"success","nameLocation":"4511:7:10","nodeType":"VariableDeclaration","scope":1448,"src":"4506:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1412,"name":"bool","nodeType":"ElementaryTypeName","src":"4506:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1415,"mutability":"mutable","name":"returndata","nameLocation":"4541:10:10","nodeType":"VariableDeclaration","scope":1448,"src":"4528:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1414,"name":"bytes","nodeType":"ElementaryTypeName","src":"4528:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4472:85:10"},"returnParameters":{"id":1419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1418,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1448,"src":"4581:12:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1417,"name":"bytes","nodeType":"ElementaryTypeName","src":"4581:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4580:14:10"},"scope":1491,"src":"4437:582:10","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1469,"nodeType":"Block","src":"5323:122:10","statements":[{"condition":{"id":1459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5337:8:10","subExpression":{"id":1458,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1451,"src":"5338:7:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1467,"nodeType":"Block","src":"5397:42:10","statements":[{"expression":{"id":1465,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1453,"src":"5418:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":1457,"id":1466,"nodeType":"Return","src":"5411:17:10"}]},"id":1468,"nodeType":"IfStatement","src":"5333:106:10","trueBody":{"id":1464,"nodeType":"Block","src":"5347:44:10","statements":[{"expression":{"arguments":[{"id":1461,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1453,"src":"5369:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1460,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1490,"src":"5361:7:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":1462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5361:19:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1463,"nodeType":"ExpressionStatement","src":"5361:19:10"}]}}]},"documentation":{"id":1449,"nodeType":"StructuredDocumentation","src":"5025:191:10","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {Errors.FailedCall} error."},"id":1470,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5230:16:10","nodeType":"FunctionDefinition","parameters":{"id":1454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1451,"mutability":"mutable","name":"success","nameLocation":"5252:7:10","nodeType":"VariableDeclaration","scope":1470,"src":"5247:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1450,"name":"bool","nodeType":"ElementaryTypeName","src":"5247:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1453,"mutability":"mutable","name":"returndata","nameLocation":"5274:10:10","nodeType":"VariableDeclaration","scope":1470,"src":"5261:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1452,"name":"bytes","nodeType":"ElementaryTypeName","src":"5261:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5246:39:10"},"returnParameters":{"id":1457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1470,"src":"5309:12:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1455,"name":"bytes","nodeType":"ElementaryTypeName","src":"5309:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5308:14:10"},"scope":1491,"src":"5221:224:10","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1489,"nodeType":"Block","src":"5614:432:10","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1476,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1473,"src":"5690:10:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5701:6:10","memberName":"length","nodeType":"MemberAccess","src":"5690:17:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5690:21:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1487,"nodeType":"Block","src":"5989:51:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1482,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1513,"src":"6010:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$1513_$","typeString":"type(library Errors)"}},"id":1484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6017:10:10","memberName":"FailedCall","nodeType":"MemberAccess","referencedDeclaration":1504,"src":"6010:17:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6010:19:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1486,"nodeType":"RevertStatement","src":"6003:26:10"}]},"id":1488,"nodeType":"IfStatement","src":"5686:354:10","trueBody":{"id":1481,"nodeType":"Block","src":"5713:270:10","statements":[{"AST":{"nativeSrc":"5840:133:10","nodeType":"YulBlock","src":"5840:133:10","statements":[{"nativeSrc":"5858:40:10","nodeType":"YulVariableDeclaration","src":"5858:40:10","value":{"arguments":[{"name":"returndata","nativeSrc":"5887:10:10","nodeType":"YulIdentifier","src":"5887:10:10"}],"functionName":{"name":"mload","nativeSrc":"5881:5:10","nodeType":"YulIdentifier","src":"5881:5:10"},"nativeSrc":"5881:17:10","nodeType":"YulFunctionCall","src":"5881:17:10"},"variables":[{"name":"returndata_size","nativeSrc":"5862:15:10","nodeType":"YulTypedName","src":"5862:15:10","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"5926:2:10","nodeType":"YulLiteral","src":"5926:2:10","type":"","value":"32"},{"name":"returndata","nativeSrc":"5930:10:10","nodeType":"YulIdentifier","src":"5930:10:10"}],"functionName":{"name":"add","nativeSrc":"5922:3:10","nodeType":"YulIdentifier","src":"5922:3:10"},"nativeSrc":"5922:19:10","nodeType":"YulFunctionCall","src":"5922:19:10"},{"name":"returndata_size","nativeSrc":"5943:15:10","nodeType":"YulIdentifier","src":"5943:15:10"}],"functionName":{"name":"revert","nativeSrc":"5915:6:10","nodeType":"YulIdentifier","src":"5915:6:10"},"nativeSrc":"5915:44:10","nodeType":"YulFunctionCall","src":"5915:44:10"},"nativeSrc":"5915:44:10","nodeType":"YulExpressionStatement","src":"5915:44:10"}]},"evmVersion":"paris","externalReferences":[{"declaration":1473,"isOffset":false,"isSlot":false,"src":"5887:10:10","valueSize":1},{"declaration":1473,"isOffset":false,"isSlot":false,"src":"5930:10:10","valueSize":1}],"flags":["memory-safe"],"id":1480,"nodeType":"InlineAssembly","src":"5815:158:10"}]}}]},"documentation":{"id":1471,"nodeType":"StructuredDocumentation","src":"5451:103:10","text":" @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}."},"id":1490,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5568:7:10","nodeType":"FunctionDefinition","parameters":{"id":1474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1473,"mutability":"mutable","name":"returndata","nameLocation":"5589:10:10","nodeType":"VariableDeclaration","scope":1490,"src":"5576:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1472,"name":"bytes","nodeType":"ElementaryTypeName","src":"5576:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5575:25:10"},"returnParameters":{"id":1475,"nodeType":"ParameterList","parameters":[],"src":"5614:0:10"},"scope":1491,"src":"5559:487:10","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":1492,"src":"233:5815:10","usedErrors":[1241],"usedEvents":[]}],"src":"101:5948:10"},"id":10},"@openzeppelin/contracts/utils/Errors.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","exportedSymbols":{"Errors":[1513]},"id":1514,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1493,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"100:24:11"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":1494,"nodeType":"StructuredDocumentation","src":"126:284:11","text":" @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._"},"fullyImplemented":true,"id":1513,"linearizedBaseContracts":[1513],"name":"Errors","nameLocation":"419:6:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1495,"nodeType":"StructuredDocumentation","src":"432:94:11","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cf479181","id":1501,"name":"InsufficientBalance","nameLocation":"537:19:11","nodeType":"ErrorDefinition","parameters":{"id":1500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1497,"mutability":"mutable","name":"balance","nameLocation":"565:7:11","nodeType":"VariableDeclaration","scope":1501,"src":"557:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1496,"name":"uint256","nodeType":"ElementaryTypeName","src":"557:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1499,"mutability":"mutable","name":"needed","nameLocation":"582:6:11","nodeType":"VariableDeclaration","scope":1501,"src":"574:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1498,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:33:11"},"src":"531:59:11"},{"documentation":{"id":1502,"nodeType":"StructuredDocumentation","src":"596:89:11","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"d6bda275","id":1504,"name":"FailedCall","nameLocation":"696:10:11","nodeType":"ErrorDefinition","parameters":{"id":1503,"nodeType":"ParameterList","parameters":[],"src":"706:2:11"},"src":"690:19:11"},{"documentation":{"id":1505,"nodeType":"StructuredDocumentation","src":"715:46:11","text":" @dev The deployment failed."},"errorSelector":"b06ebf3d","id":1507,"name":"FailedDeployment","nameLocation":"772:16:11","nodeType":"ErrorDefinition","parameters":{"id":1506,"nodeType":"ParameterList","parameters":[],"src":"788:2:11"},"src":"766:25:11"},{"documentation":{"id":1508,"nodeType":"StructuredDocumentation","src":"797:58:11","text":" @dev A necessary precompile is missing."},"errorSelector":"42b01bce","id":1512,"name":"MissingPrecompile","nameLocation":"866:17:11","nodeType":"ErrorDefinition","parameters":{"id":1511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1510,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1512,"src":"884:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1509,"name":"address","nodeType":"ElementaryTypeName","src":"884:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"883:9:11"},"src":"860:33:11"}],"scope":1514,"src":"411:484:11","usedErrors":[1501,1504,1507,1512],"usedEvents":[]}],"src":"100:796:11"},"id":11},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[1637]},"id":1638,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1515,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:12"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":1516,"nodeType":"StructuredDocumentation","src":"219:1187:12","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n     function _getImplementation() internal view returns (address) {\n         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n     }\n     function _setImplementation(address newImplementation) internal {\n         require(newImplementation.code.length > 0);\n         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n     }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":1637,"linearizedBaseContracts":[1637],"name":"StorageSlot","nameLocation":"1415:11:12","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":1519,"members":[{"constant":false,"id":1518,"mutability":"mutable","name":"value","nameLocation":"1470:5:12","nodeType":"VariableDeclaration","scope":1519,"src":"1462:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1517,"name":"address","nodeType":"ElementaryTypeName","src":"1462:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1440:11:12","nodeType":"StructDefinition","scope":1637,"src":"1433:49:12","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":1522,"members":[{"constant":false,"id":1521,"mutability":"mutable","name":"value","nameLocation":"1522:5:12","nodeType":"VariableDeclaration","scope":1522,"src":"1517:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1520,"name":"bool","nodeType":"ElementaryTypeName","src":"1517:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1495:11:12","nodeType":"StructDefinition","scope":1637,"src":"1488:46:12","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":1525,"members":[{"constant":false,"id":1524,"mutability":"mutable","name":"value","nameLocation":"1577:5:12","nodeType":"VariableDeclaration","scope":1525,"src":"1569:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1523,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1569:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1547:11:12","nodeType":"StructDefinition","scope":1637,"src":"1540:49:12","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":1528,"members":[{"constant":false,"id":1527,"mutability":"mutable","name":"value","nameLocation":"1632:5:12","nodeType":"VariableDeclaration","scope":1528,"src":"1624:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1526,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1602:11:12","nodeType":"StructDefinition","scope":1637,"src":"1595:49:12","visibility":"public"},{"canonicalName":"StorageSlot.Int256Slot","id":1531,"members":[{"constant":false,"id":1530,"mutability":"mutable","name":"value","nameLocation":"1685:5:12","nodeType":"VariableDeclaration","scope":1531,"src":"1678:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1529,"name":"int256","nodeType":"ElementaryTypeName","src":"1678:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"1657:10:12","nodeType":"StructDefinition","scope":1637,"src":"1650:47:12","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":1534,"members":[{"constant":false,"id":1533,"mutability":"mutable","name":"value","nameLocation":"1738:5:12","nodeType":"VariableDeclaration","scope":1534,"src":"1731:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":1532,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1710:10:12","nodeType":"StructDefinition","scope":1637,"src":"1703:47:12","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":1537,"members":[{"constant":false,"id":1536,"mutability":"mutable","name":"value","nameLocation":"1789:5:12","nodeType":"VariableDeclaration","scope":1537,"src":"1783:11:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1535,"name":"bytes","nodeType":"ElementaryTypeName","src":"1783:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1763:9:12","nodeType":"StructDefinition","scope":1637,"src":"1756:45:12","visibility":"public"},{"body":{"id":1547,"nodeType":"Block","src":"1983:79:12","statements":[{"AST":{"nativeSrc":"2018:38:12","nodeType":"YulBlock","src":"2018:38:12","statements":[{"nativeSrc":"2032:14:12","nodeType":"YulAssignment","src":"2032:14:12","value":{"name":"slot","nativeSrc":"2042:4:12","nodeType":"YulIdentifier","src":"2042:4:12"},"variableNames":[{"name":"r.slot","nativeSrc":"2032:6:12","nodeType":"YulIdentifier","src":"2032:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1544,"isOffset":false,"isSlot":true,"src":"2032:6:12","suffix":"slot","valueSize":1},{"declaration":1540,"isOffset":false,"isSlot":false,"src":"2042:4:12","valueSize":1}],"flags":["memory-safe"],"id":1546,"nodeType":"InlineAssembly","src":"1993:63:12"}]},"documentation":{"id":1538,"nodeType":"StructuredDocumentation","src":"1807:87:12","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":1548,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1908:14:12","nodeType":"FunctionDefinition","parameters":{"id":1541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"mutability":"mutable","name":"slot","nameLocation":"1931:4:12","nodeType":"VariableDeclaration","scope":1548,"src":"1923:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1539,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1923:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1922:14:12"},"returnParameters":{"id":1545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1544,"mutability":"mutable","name":"r","nameLocation":"1980:1:12","nodeType":"VariableDeclaration","scope":1548,"src":"1960:21:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":1543,"nodeType":"UserDefinedTypeName","pathNode":{"id":1542,"name":"AddressSlot","nameLocations":["1960:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":1519,"src":"1960:11:12"},"referencedDeclaration":1519,"src":"1960:11:12","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$1519_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1959:23:12"},"scope":1637,"src":"1899:163:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1558,"nodeType":"Block","src":"2243:79:12","statements":[{"AST":{"nativeSrc":"2278:38:12","nodeType":"YulBlock","src":"2278:38:12","statements":[{"nativeSrc":"2292:14:12","nodeType":"YulAssignment","src":"2292:14:12","value":{"name":"slot","nativeSrc":"2302:4:12","nodeType":"YulIdentifier","src":"2302:4:12"},"variableNames":[{"name":"r.slot","nativeSrc":"2292:6:12","nodeType":"YulIdentifier","src":"2292:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1555,"isOffset":false,"isSlot":true,"src":"2292:6:12","suffix":"slot","valueSize":1},{"declaration":1551,"isOffset":false,"isSlot":false,"src":"2302:4:12","valueSize":1}],"flags":["memory-safe"],"id":1557,"nodeType":"InlineAssembly","src":"2253:63:12"}]},"documentation":{"id":1549,"nodeType":"StructuredDocumentation","src":"2068:86:12","text":" @dev Returns a `BooleanSlot` with member `value` located at `slot`."},"id":1559,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"2168:14:12","nodeType":"FunctionDefinition","parameters":{"id":1552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1551,"mutability":"mutable","name":"slot","nameLocation":"2191:4:12","nodeType":"VariableDeclaration","scope":1559,"src":"2183:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1550,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2183:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2182:14:12"},"returnParameters":{"id":1556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1555,"mutability":"mutable","name":"r","nameLocation":"2240:1:12","nodeType":"VariableDeclaration","scope":1559,"src":"2220:21:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$1522_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":1554,"nodeType":"UserDefinedTypeName","pathNode":{"id":1553,"name":"BooleanSlot","nameLocations":["2220:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2220:11:12"},"referencedDeclaration":1522,"src":"2220:11:12","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$1522_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2219:23:12"},"scope":1637,"src":"2159:163:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1569,"nodeType":"Block","src":"2503:79:12","statements":[{"AST":{"nativeSrc":"2538:38:12","nodeType":"YulBlock","src":"2538:38:12","statements":[{"nativeSrc":"2552:14:12","nodeType":"YulAssignment","src":"2552:14:12","value":{"name":"slot","nativeSrc":"2562:4:12","nodeType":"YulIdentifier","src":"2562:4:12"},"variableNames":[{"name":"r.slot","nativeSrc":"2552:6:12","nodeType":"YulIdentifier","src":"2552:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1566,"isOffset":false,"isSlot":true,"src":"2552:6:12","suffix":"slot","valueSize":1},{"declaration":1562,"isOffset":false,"isSlot":false,"src":"2562:4:12","valueSize":1}],"flags":["memory-safe"],"id":1568,"nodeType":"InlineAssembly","src":"2513:63:12"}]},"documentation":{"id":1560,"nodeType":"StructuredDocumentation","src":"2328:86:12","text":" @dev Returns a `Bytes32Slot` with member `value` located at `slot`."},"id":1570,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2428:14:12","nodeType":"FunctionDefinition","parameters":{"id":1563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1562,"mutability":"mutable","name":"slot","nameLocation":"2451:4:12","nodeType":"VariableDeclaration","scope":1570,"src":"2443:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1561,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2442:14:12"},"returnParameters":{"id":1567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1566,"mutability":"mutable","name":"r","nameLocation":"2500:1:12","nodeType":"VariableDeclaration","scope":1570,"src":"2480:21:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$1525_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":1565,"nodeType":"UserDefinedTypeName","pathNode":{"id":1564,"name":"Bytes32Slot","nameLocations":["2480:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":1525,"src":"2480:11:12"},"referencedDeclaration":1525,"src":"2480:11:12","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$1525_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2479:23:12"},"scope":1637,"src":"2419:163:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1580,"nodeType":"Block","src":"2763:79:12","statements":[{"AST":{"nativeSrc":"2798:38:12","nodeType":"YulBlock","src":"2798:38:12","statements":[{"nativeSrc":"2812:14:12","nodeType":"YulAssignment","src":"2812:14:12","value":{"name":"slot","nativeSrc":"2822:4:12","nodeType":"YulIdentifier","src":"2822:4:12"},"variableNames":[{"name":"r.slot","nativeSrc":"2812:6:12","nodeType":"YulIdentifier","src":"2812:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1577,"isOffset":false,"isSlot":true,"src":"2812:6:12","suffix":"slot","valueSize":1},{"declaration":1573,"isOffset":false,"isSlot":false,"src":"2822:4:12","valueSize":1}],"flags":["memory-safe"],"id":1579,"nodeType":"InlineAssembly","src":"2773:63:12"}]},"documentation":{"id":1571,"nodeType":"StructuredDocumentation","src":"2588:86:12","text":" @dev Returns a `Uint256Slot` with member `value` located at `slot`."},"id":1581,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2688:14:12","nodeType":"FunctionDefinition","parameters":{"id":1574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1573,"mutability":"mutable","name":"slot","nameLocation":"2711:4:12","nodeType":"VariableDeclaration","scope":1581,"src":"2703:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1572,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2703:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2702:14:12"},"returnParameters":{"id":1578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1577,"mutability":"mutable","name":"r","nameLocation":"2760:1:12","nodeType":"VariableDeclaration","scope":1581,"src":"2740:21:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$1528_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":1576,"nodeType":"UserDefinedTypeName","pathNode":{"id":1575,"name":"Uint256Slot","nameLocations":["2740:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":1528,"src":"2740:11:12"},"referencedDeclaration":1528,"src":"2740:11:12","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$1528_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2739:23:12"},"scope":1637,"src":"2679:163:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1591,"nodeType":"Block","src":"3020:79:12","statements":[{"AST":{"nativeSrc":"3055:38:12","nodeType":"YulBlock","src":"3055:38:12","statements":[{"nativeSrc":"3069:14:12","nodeType":"YulAssignment","src":"3069:14:12","value":{"name":"slot","nativeSrc":"3079:4:12","nodeType":"YulIdentifier","src":"3079:4:12"},"variableNames":[{"name":"r.slot","nativeSrc":"3069:6:12","nodeType":"YulIdentifier","src":"3069:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1588,"isOffset":false,"isSlot":true,"src":"3069:6:12","suffix":"slot","valueSize":1},{"declaration":1584,"isOffset":false,"isSlot":false,"src":"3079:4:12","valueSize":1}],"flags":["memory-safe"],"id":1590,"nodeType":"InlineAssembly","src":"3030:63:12"}]},"documentation":{"id":1582,"nodeType":"StructuredDocumentation","src":"2848:85:12","text":" @dev Returns a `Int256Slot` with member `value` located at `slot`."},"id":1592,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"2947:13:12","nodeType":"FunctionDefinition","parameters":{"id":1585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"mutability":"mutable","name":"slot","nameLocation":"2969:4:12","nodeType":"VariableDeclaration","scope":1592,"src":"2961:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1583,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2961:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2960:14:12"},"returnParameters":{"id":1589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1588,"mutability":"mutable","name":"r","nameLocation":"3017:1:12","nodeType":"VariableDeclaration","scope":1592,"src":"2998:20:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$1531_storage_ptr","typeString":"struct StorageSlot.Int256Slot"},"typeName":{"id":1587,"nodeType":"UserDefinedTypeName","pathNode":{"id":1586,"name":"Int256Slot","nameLocations":["2998:10:12"],"nodeType":"IdentifierPath","referencedDeclaration":1531,"src":"2998:10:12"},"referencedDeclaration":1531,"src":"2998:10:12","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$1531_storage_ptr","typeString":"struct StorageSlot.Int256Slot"}},"visibility":"internal"}],"src":"2997:22:12"},"scope":1637,"src":"2938:161:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1602,"nodeType":"Block","src":"3277:79:12","statements":[{"AST":{"nativeSrc":"3312:38:12","nodeType":"YulBlock","src":"3312:38:12","statements":[{"nativeSrc":"3326:14:12","nodeType":"YulAssignment","src":"3326:14:12","value":{"name":"slot","nativeSrc":"3336:4:12","nodeType":"YulIdentifier","src":"3336:4:12"},"variableNames":[{"name":"r.slot","nativeSrc":"3326:6:12","nodeType":"YulIdentifier","src":"3326:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1599,"isOffset":false,"isSlot":true,"src":"3326:6:12","suffix":"slot","valueSize":1},{"declaration":1595,"isOffset":false,"isSlot":false,"src":"3336:4:12","valueSize":1}],"flags":["memory-safe"],"id":1601,"nodeType":"InlineAssembly","src":"3287:63:12"}]},"documentation":{"id":1593,"nodeType":"StructuredDocumentation","src":"3105:85:12","text":" @dev Returns a `StringSlot` with member `value` located at `slot`."},"id":1603,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3204:13:12","nodeType":"FunctionDefinition","parameters":{"id":1596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1595,"mutability":"mutable","name":"slot","nameLocation":"3226:4:12","nodeType":"VariableDeclaration","scope":1603,"src":"3218:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1594,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3218:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3217:14:12"},"returnParameters":{"id":1600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1599,"mutability":"mutable","name":"r","nameLocation":"3274:1:12","nodeType":"VariableDeclaration","scope":1603,"src":"3255:20:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$1534_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":1598,"nodeType":"UserDefinedTypeName","pathNode":{"id":1597,"name":"StringSlot","nameLocations":["3255:10:12"],"nodeType":"IdentifierPath","referencedDeclaration":1534,"src":"3255:10:12"},"referencedDeclaration":1534,"src":"3255:10:12","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$1534_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3254:22:12"},"scope":1637,"src":"3195:161:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1613,"nodeType":"Block","src":"3558:85:12","statements":[{"AST":{"nativeSrc":"3593:44:12","nodeType":"YulBlock","src":"3593:44:12","statements":[{"nativeSrc":"3607:20:12","nodeType":"YulAssignment","src":"3607:20:12","value":{"name":"store.slot","nativeSrc":"3617:10:12","nodeType":"YulIdentifier","src":"3617:10:12"},"variableNames":[{"name":"r.slot","nativeSrc":"3607:6:12","nodeType":"YulIdentifier","src":"3607:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1610,"isOffset":false,"isSlot":true,"src":"3607:6:12","suffix":"slot","valueSize":1},{"declaration":1606,"isOffset":false,"isSlot":true,"src":"3617:10:12","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":1612,"nodeType":"InlineAssembly","src":"3568:69:12"}]},"documentation":{"id":1604,"nodeType":"StructuredDocumentation","src":"3362:101:12","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":1614,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3477:13:12","nodeType":"FunctionDefinition","parameters":{"id":1607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1606,"mutability":"mutable","name":"store","nameLocation":"3506:5:12","nodeType":"VariableDeclaration","scope":1614,"src":"3491:20:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":1605,"name":"string","nodeType":"ElementaryTypeName","src":"3491:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3490:22:12"},"returnParameters":{"id":1611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1610,"mutability":"mutable","name":"r","nameLocation":"3555:1:12","nodeType":"VariableDeclaration","scope":1614,"src":"3536:20:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$1534_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":1609,"nodeType":"UserDefinedTypeName","pathNode":{"id":1608,"name":"StringSlot","nameLocations":["3536:10:12"],"nodeType":"IdentifierPath","referencedDeclaration":1534,"src":"3536:10:12"},"referencedDeclaration":1534,"src":"3536:10:12","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$1534_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3535:22:12"},"scope":1637,"src":"3468:175:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1624,"nodeType":"Block","src":"3818:79:12","statements":[{"AST":{"nativeSrc":"3853:38:12","nodeType":"YulBlock","src":"3853:38:12","statements":[{"nativeSrc":"3867:14:12","nodeType":"YulAssignment","src":"3867:14:12","value":{"name":"slot","nativeSrc":"3877:4:12","nodeType":"YulIdentifier","src":"3877:4:12"},"variableNames":[{"name":"r.slot","nativeSrc":"3867:6:12","nodeType":"YulIdentifier","src":"3867:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1621,"isOffset":false,"isSlot":true,"src":"3867:6:12","suffix":"slot","valueSize":1},{"declaration":1617,"isOffset":false,"isSlot":false,"src":"3877:4:12","valueSize":1}],"flags":["memory-safe"],"id":1623,"nodeType":"InlineAssembly","src":"3828:63:12"}]},"documentation":{"id":1615,"nodeType":"StructuredDocumentation","src":"3649:84:12","text":" @dev Returns a `BytesSlot` with member `value` located at `slot`."},"id":1625,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3747:12:12","nodeType":"FunctionDefinition","parameters":{"id":1618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1617,"mutability":"mutable","name":"slot","nameLocation":"3768:4:12","nodeType":"VariableDeclaration","scope":1625,"src":"3760:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1616,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3760:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3759:14:12"},"returnParameters":{"id":1622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1621,"mutability":"mutable","name":"r","nameLocation":"3815:1:12","nodeType":"VariableDeclaration","scope":1625,"src":"3797:19:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$1537_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":1620,"nodeType":"UserDefinedTypeName","pathNode":{"id":1619,"name":"BytesSlot","nameLocations":["3797:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":1537,"src":"3797:9:12"},"referencedDeclaration":1537,"src":"3797:9:12","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$1537_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3796:21:12"},"scope":1637,"src":"3738:159:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1635,"nodeType":"Block","src":"4094:85:12","statements":[{"AST":{"nativeSrc":"4129:44:12","nodeType":"YulBlock","src":"4129:44:12","statements":[{"nativeSrc":"4143:20:12","nodeType":"YulAssignment","src":"4143:20:12","value":{"name":"store.slot","nativeSrc":"4153:10:12","nodeType":"YulIdentifier","src":"4153:10:12"},"variableNames":[{"name":"r.slot","nativeSrc":"4143:6:12","nodeType":"YulIdentifier","src":"4143:6:12"}]}]},"evmVersion":"paris","externalReferences":[{"declaration":1632,"isOffset":false,"isSlot":true,"src":"4143:6:12","suffix":"slot","valueSize":1},{"declaration":1628,"isOffset":false,"isSlot":true,"src":"4153:10:12","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":1634,"nodeType":"InlineAssembly","src":"4104:69:12"}]},"documentation":{"id":1626,"nodeType":"StructuredDocumentation","src":"3903:99:12","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":1636,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"4016:12:12","nodeType":"FunctionDefinition","parameters":{"id":1629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1628,"mutability":"mutable","name":"store","nameLocation":"4043:5:12","nodeType":"VariableDeclaration","scope":1636,"src":"4029:19:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1627,"name":"bytes","nodeType":"ElementaryTypeName","src":"4029:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4028:21:12"},"returnParameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"mutability":"mutable","name":"r","nameLocation":"4091:1:12","nodeType":"VariableDeclaration","scope":1636,"src":"4073:19:12","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$1537_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":1631,"nodeType":"UserDefinedTypeName","pathNode":{"id":1630,"name":"BytesSlot","nameLocations":["4073:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":1537,"src":"4073:9:12"},"referencedDeclaration":1537,"src":"4073:9:12","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$1537_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"4072:21:12"},"scope":1637,"src":"4007:172:12","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":1638,"src":"1407:2774:12","usedErrors":[],"usedEvents":[]}],"src":"193:3989:12"},"id":12},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[1649]},"id":1650,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1639,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:13"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":1640,"nodeType":"StructuredDocumentation","src":"141:280:13","text":" @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":1649,"linearizedBaseContracts":[1649],"name":"IERC165","nameLocation":"432:7:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1641,"nodeType":"StructuredDocumentation","src":"446:340:13","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":1648,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"800:17:13","nodeType":"FunctionDefinition","parameters":{"id":1644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1643,"mutability":"mutable","name":"interfaceId","nameLocation":"825:11:13","nodeType":"VariableDeclaration","scope":1648,"src":"818:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1642,"name":"bytes4","nodeType":"ElementaryTypeName","src":"818:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"817:20:13"},"returnParameters":{"id":1647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1648,"src":"861:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1645,"name":"bool","nodeType":"ElementaryTypeName","src":"861:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"860:6:13"},"scope":1649,"src":"791:76:13","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1650,"src":"422:447:13","usedErrors":[],"usedEvents":[]}],"src":"115:755:13"},"id":13},"contracts/VideoPayment.sol":{"ast":{"absolutePath":"contracts/VideoPayment.sol","exportedSymbols":{"ERC1967Utils":[903],"IERC1155":[1036],"IERC165":[1649],"IERC1822Proxiable":[609],"IERC20":[1114],"IERC721":[1231],"IVideoPayment":[3741],"Initializable":[267],"ReentrancyGuardUpgradeable":[578],"UUPSUpgradeable":[449],"VideoPayment":[3421],"VideoPaymentStorage":[3799]},"id":3422,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1651,"literals":["solidity","^","0.8",".19"],"nodeType":"PragmaDirective","src":"32:24:14"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","id":1652,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":268,"src":"58:75:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","id":1653,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":450,"src":"134:77:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","id":1654,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":579,"src":"212:82:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1655,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":1115,"src":"295:56:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC721/IERC721.sol","file":"@openzeppelin/contracts/token/ERC721/IERC721.sol","id":1656,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":1232,"src":"352:58:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC1155/IERC1155.sol","file":"@openzeppelin/contracts/token/ERC1155/IERC1155.sol","id":1657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":1037,"src":"411:60:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/interfaces/IVideoPayment.sol","file":"./interfaces/IVideoPayment.sol","id":1658,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":3742,"src":"472:40:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/libraries/VideoPaymentStorage.sol","file":"./libraries/VideoPaymentStorage.sol","id":1659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3422,"sourceUnit":3800,"src":"513:45:14","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1661,"name":"Initializable","nameLocations":["687:13:14"],"nodeType":"IdentifierPath","referencedDeclaration":267,"src":"687:13:14"},"id":1662,"nodeType":"InheritanceSpecifier","src":"687:13:14"},{"baseName":{"id":1663,"name":"UUPSUpgradeable","nameLocations":["706:15:14"],"nodeType":"IdentifierPath","referencedDeclaration":449,"src":"706:15:14"},"id":1664,"nodeType":"InheritanceSpecifier","src":"706:15:14"},{"baseName":{"id":1665,"name":"ReentrancyGuardUpgradeable","nameLocations":["727:26:14"],"nodeType":"IdentifierPath","referencedDeclaration":578,"src":"727:26:14"},"id":1666,"nodeType":"InheritanceSpecifier","src":"727:26:14"},{"baseName":{"id":1667,"name":"IVideoPayment","nameLocations":["759:13:14"],"nodeType":"IdentifierPath","referencedDeclaration":3741,"src":"759:13:14"},"id":1668,"nodeType":"InheritanceSpecifier","src":"759:13:14"}],"canonicalName":"VideoPayment","contractDependencies":[],"contractKind":"contract","documentation":{"id":1660,"nodeType":"StructuredDocumentation","src":"560:97:14","text":" @title VideoPayment\n @dev Main contract for video content payment and access control"},"fullyImplemented":true,"id":3421,"linearizedBaseContracts":[3421,3741,578,449,609,267],"name":"VideoPayment","nameLocation":"667:12:14","nodeType":"ContractDefinition","nodes":[{"global":false,"id":1672,"libraryName":{"id":1669,"name":"VideoPaymentStorage","nameLocations":["785:19:14"],"nodeType":"IdentifierPath","referencedDeclaration":3799,"src":"785:19:14"},"nodeType":"UsingForDirective","src":"779:76:14","typeName":{"id":1671,"nodeType":"UserDefinedTypeName","pathNode":{"id":1670,"name":"VideoPaymentStorage.VideoPaymentStorageStruct","nameLocations":["809:19:14","829:25:14"],"nodeType":"IdentifierPath","referencedDeclaration":3798,"src":"809:45:14"},"referencedDeclaration":3798,"src":"809:45:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage_ptr","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct"}}},{"constant":false,"id":1675,"mutability":"mutable","name":"_storage","nameLocation":"930:8:14","nodeType":"VariableDeclaration","scope":3421,"src":"876:62:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct"},"typeName":{"id":1674,"nodeType":"UserDefinedTypeName","pathNode":{"id":1673,"name":"VideoPaymentStorage.VideoPaymentStorageStruct","nameLocations":["876:19:14","896:25:14"],"nodeType":"IdentifierPath","referencedDeclaration":3798,"src":"876:45:14"},"referencedDeclaration":3798,"src":"876:45:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage_ptr","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct"}},"visibility":"private"},{"body":{"id":1687,"nodeType":"Block","src":"983:79:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1677,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"997:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1001:6:14","memberName":"sender","nodeType":"MemberAccess","src":"997:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":1679,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"1011:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1020:5:14","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":3769,"src":"1011:14:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"997:28:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1685,"nodeType":"IfStatement","src":"993:51:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1682,"name":"NotOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3442,"src":"1034:8:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1034:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1684,"nodeType":"RevertStatement","src":"1027:17:14"}},{"id":1686,"nodeType":"PlaceholderStatement","src":"1054:1:14"}]},"id":1688,"name":"onlyOwner","nameLocation":"971:9:14","nodeType":"ModifierDefinition","parameters":{"id":1676,"nodeType":"ParameterList","parameters":[],"src":"980:2:14"},"src":"962:100:14","virtual":false,"visibility":"internal"},{"body":{"id":1701,"nodeType":"Block","src":"1089:80:14","statements":[{"condition":{"id":1695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1103:29:14","subExpression":{"baseExpression":{"expression":{"id":1690,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"1104:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1113:7:14","memberName":"isAdmin","nodeType":"MemberAccess","referencedDeclaration":3773,"src":"1104:16:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1694,"indexExpression":{"expression":{"id":1692,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1121:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1125:6:14","memberName":"sender","nodeType":"MemberAccess","src":"1121:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1104:28:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1699,"nodeType":"IfStatement","src":"1099:52:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1696,"name":"NotAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3444,"src":"1141:8:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1698,"nodeType":"RevertStatement","src":"1134:17:14"}},{"id":1700,"nodeType":"PlaceholderStatement","src":"1161:1:14"}]},"id":1702,"name":"onlyAdmin","nameLocation":"1077:9:14","nodeType":"ModifierDefinition","parameters":{"id":1689,"nodeType":"ParameterList","parameters":[],"src":"1086:2:14"},"src":"1068:101:14","virtual":false,"visibility":"internal"},{"body":{"id":1711,"nodeType":"Block","src":"1200:72:14","statements":[{"condition":{"expression":{"id":1704,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"1214:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1223:6:14","memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":3791,"src":"1214:15:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1709,"nodeType":"IfStatement","src":"1210:44:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1706,"name":"ContractPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"1238:14:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1238:16:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1708,"nodeType":"RevertStatement","src":"1231:23:14"}},{"id":1710,"nodeType":"PlaceholderStatement","src":"1264:1:14"}]},"id":1712,"name":"whenNotPaused","nameLocation":"1184:13:14","nodeType":"ModifierDefinition","parameters":{"id":1703,"nodeType":"ParameterList","parameters":[],"src":"1197:2:14"},"src":"1175:97:14","virtual":false,"visibility":"internal"},{"body":{"id":1727,"nodeType":"Block","src":"1319:113:14","statements":[{"condition":{"id":1721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1333:44:14","subExpression":{"expression":{"baseExpression":{"expression":{"id":1716,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"1334:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1343:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"1334:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":1719,"indexExpression":{"id":1718,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1714,"src":"1358:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1334:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":1720,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1369:8:14","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":3759,"src":"1334:43:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1725,"nodeType":"IfStatement","src":"1329:85:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1722,"name":"InvalidContent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3448,"src":"1398:14:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:16:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1724,"nodeType":"RevertStatement","src":"1391:23:14"}},{"id":1726,"nodeType":"PlaceholderStatement","src":"1424:1:14"}]},"id":1728,"name":"validContent","nameLocation":"1287:12:14","nodeType":"ModifierDefinition","parameters":{"id":1715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1714,"mutability":"mutable","name":"contentId","nameLocation":"1308:9:14","nodeType":"VariableDeclaration","scope":1728,"src":"1300:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1713,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1299:19:14"},"src":"1278:154:14","virtual":false,"visibility":"internal"},{"body":{"id":1735,"nodeType":"Block","src":"1505:39:14","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1732,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":221,"src":"1515:20:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1515:22:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1734,"nodeType":"ExpressionStatement","src":"1515:22:14"}]},"documentation":{"id":1729,"nodeType":"StructuredDocumentation","src":"1438:48:14","text":"@custom:oz-upgrades-unsafe-allow constructor"},"id":1736,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[],"src":"1502:2:14"},"returnParameters":{"id":1731,"nodeType":"ParameterList","parameters":[],"src":"1505:0:14"},"scope":3421,"src":"1491:53:14","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1862,"nodeType":"Block","src":"1952:860:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1750,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"1966:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1990:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1982:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1751,"name":"address","nodeType":"ElementaryTypeName","src":"1982:7:14","typeDescriptions":{}}},"id":1754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1982:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1966:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1759,"nodeType":"IfStatement","src":"1962:52:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1756,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"2001:11:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2001:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1758,"nodeType":"RevertStatement","src":"1994:20:14"}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1760,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":321,"src":"2025:22:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2025:24:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1762,"nodeType":"ExpressionStatement","src":"2025:24:14"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1763,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":489,"src":"2059:22:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2059:24:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1765,"nodeType":"ExpressionStatement","src":"2059:24:14"},{"expression":{"id":1770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1766,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"2094:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2103:5:14","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":3769,"src":"2094:14:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1769,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"2111:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2094:29:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1771,"nodeType":"ExpressionStatement","src":"2094:29:14"},{"expression":{"id":1776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1772,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"2133:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2142:7:14","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":3793,"src":"2133:16:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":1775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2152:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2133:20:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1777,"nodeType":"ExpressionStatement","src":"2133:20:14"},{"expression":{"id":1782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1778,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"2163:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2172:6:14","memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":3791,"src":"2163:15:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":1781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2181:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2163:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1783,"nodeType":"ExpressionStatement","src":"2163:23:14"},{"body":{"id":1821,"nodeType":"Block","src":"2278:185:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":1795,"name":"initialAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1742,"src":"2296:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1797,"indexExpression":{"id":1796,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1785,"src":"2310:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2296:16:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2324:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2316:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1798,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:14","typeDescriptions":{}}},"id":1801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2316:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2296:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1820,"nodeType":"IfStatement","src":"2292:161:14","trueBody":{"id":1819,"nodeType":"Block","src":"2328:125:14","statements":[{"expression":{"id":1811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1803,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"2346:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2355:7:14","memberName":"isAdmin","nodeType":"MemberAccess","referencedDeclaration":3773,"src":"2346:16:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1809,"indexExpression":{"baseExpression":{"id":1805,"name":"initialAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1742,"src":"2363:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1807,"indexExpression":{"id":1806,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1785,"src":"2377:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2363:16:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2346:34:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":1810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2383:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2346:41:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1812,"nodeType":"ExpressionStatement","src":"2346:41:14"},{"eventCall":{"arguments":[{"baseExpression":{"id":1814,"name":"initialAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1742,"src":"2421:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1816,"indexExpression":{"id":1815,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1785,"src":"2435:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2421:16:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1813,"name":"AdminAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"2410:10:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2410:28:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1818,"nodeType":"EmitStatement","src":"2405:33:14"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1788,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1785,"src":"2247:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1789,"name":"initialAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1742,"src":"2251:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2265:6:14","memberName":"length","nodeType":"MemberAccess","src":"2251:20:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2247:24:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1822,"initializationExpression":{"assignments":[1785],"declarations":[{"constant":false,"id":1785,"mutability":"mutable","name":"i","nameLocation":"2240:1:14","nodeType":"VariableDeclaration","scope":1822,"src":"2232:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1784,"name":"uint256","nodeType":"ElementaryTypeName","src":"2232:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1787,"initialValue":{"hexValue":"30","id":1786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2244:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2232:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":1793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2273:3:14","subExpression":{"id":1792,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1785,"src":"2273:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1794,"nodeType":"ExpressionStatement","src":"2273:3:14"},"nodeType":"ForStatement","src":"2227:236:14"},{"body":{"id":1860,"nodeType":"Block","src":"2574:232:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":1834,"name":"supportedTokenAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1745,"src":"2592:23:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1836,"indexExpression":{"id":1835,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1824,"src":"2616:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2592:26:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2630:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2622:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1837,"name":"address","nodeType":"ElementaryTypeName","src":"2622:7:14","typeDescriptions":{}}},"id":1840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2622:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2592:40:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1859,"nodeType":"IfStatement","src":"2588:208:14","trueBody":{"id":1858,"nodeType":"Block","src":"2634:162:14","statements":[{"expression":{"id":1850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1842,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"2652:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2661:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"2652:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1848,"indexExpression":{"baseExpression":{"id":1844,"name":"supportedTokenAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1745,"src":"2677:23:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1846,"indexExpression":{"id":1845,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1824,"src":"2701:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2677:26:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2652:52:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":1849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2707:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2652:59:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1851,"nodeType":"ExpressionStatement","src":"2652:59:14"},{"eventCall":{"arguments":[{"baseExpression":{"id":1853,"name":"supportedTokenAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1745,"src":"2754:23:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1855,"indexExpression":{"id":1854,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1824,"src":"2778:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2754:26:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1852,"name":"SupportedTokenAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3545,"src":"2734:19:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2734:47:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1857,"nodeType":"EmitStatement","src":"2729:52:14"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1827,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1824,"src":"2533:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1828,"name":"supportedTokenAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1745,"src":"2537:23:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2561:6:14","memberName":"length","nodeType":"MemberAccess","src":"2537:30:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2533:34:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1861,"initializationExpression":{"assignments":[1824],"declarations":[{"constant":false,"id":1824,"mutability":"mutable","name":"i","nameLocation":"2526:1:14","nodeType":"VariableDeclaration","scope":1861,"src":"2518:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1823,"name":"uint256","nodeType":"ElementaryTypeName","src":"2518:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1826,"initialValue":{"hexValue":"30","id":1825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2530:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2518:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":1832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2569:3:14","subExpression":{"id":1831,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1824,"src":"2569:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1833,"nodeType":"ExpressionStatement","src":"2569:3:14"},"nodeType":"ForStatement","src":"2513:293:14"}]},"documentation":{"id":1737,"nodeType":"StructuredDocumentation","src":"1550:232:14","text":" @dev Initialize the contract\n @param initialOwner Initial owner address\n @param initialAdmins Initial admin addresses array\n @param supportedTokenAddresses Initial supported token addresses array"},"functionSelector":"4a200fa5","id":1863,"implemented":true,"kind":"function","modifiers":[{"id":1748,"kind":"modifierInvocation","modifierName":{"id":1747,"name":"initializer","nameLocations":["1940:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":107,"src":"1940:11:14"},"nodeType":"ModifierInvocation","src":"1940:11:14"}],"name":"initialize","nameLocation":"1796:10:14","nodeType":"FunctionDefinition","parameters":{"id":1746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1739,"mutability":"mutable","name":"initialOwner","nameLocation":"1824:12:14","nodeType":"VariableDeclaration","scope":1863,"src":"1816:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1738,"name":"address","nodeType":"ElementaryTypeName","src":"1816:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1742,"mutability":"mutable","name":"initialAdmins","nameLocation":"1863:13:14","nodeType":"VariableDeclaration","scope":1863,"src":"1846:30:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1740,"name":"address","nodeType":"ElementaryTypeName","src":"1846:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1741,"nodeType":"ArrayTypeName","src":"1846:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1745,"mutability":"mutable","name":"supportedTokenAddresses","nameLocation":"1903:23:14","nodeType":"VariableDeclaration","scope":1863,"src":"1886:40:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1743,"name":"address","nodeType":"ElementaryTypeName","src":"1886:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1744,"nodeType":"ArrayTypeName","src":"1886:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1806:126:14"},"returnParameters":{"id":1749,"nodeType":"ParameterList","parameters":[],"src":"1952:0:14"},"scope":3421,"src":"1787:1025:14","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3737],"body":{"id":1872,"nodeType":"Block","src":"2918:40:14","statements":[{"expression":{"expression":{"id":1869,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"2935:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2944:7:14","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":3793,"src":"2935:16:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1868,"id":1871,"nodeType":"Return","src":"2928:23:14"}]},"documentation":{"id":1864,"nodeType":"StructuredDocumentation","src":"2818:44:14","text":" @dev Get contract version"},"functionSelector":"54fd4d50","id":1873,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"2876:7:14","nodeType":"FunctionDefinition","parameters":{"id":1865,"nodeType":"ParameterList","parameters":[],"src":"2883:2:14"},"returnParameters":{"id":1868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1867,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1873,"src":"2909:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1866,"name":"uint256","nodeType":"ElementaryTypeName","src":"2909:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2908:9:14"},"scope":3421,"src":"2867:91:14","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3740],"body":{"id":1879,"nodeType":"Block","src":"3069:225:14","statements":[]},"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"2964:62:14","text":" @dev Migration function for future upgrades"},"functionSelector":"8fd3ab80","id":1880,"implemented":true,"kind":"function","modifiers":[{"id":1877,"kind":"modifierInvocation","modifierName":{"id":1876,"name":"onlyOwner","nameLocations":["3059:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1688,"src":"3059:9:14"},"nodeType":"ModifierInvocation","src":"3059:9:14"}],"name":"migrate","nameLocation":"3040:7:14","nodeType":"FunctionDefinition","parameters":{"id":1875,"nodeType":"ParameterList","parameters":[],"src":"3047:2:14"},"returnParameters":{"id":1878,"nodeType":"ParameterList","parameters":[],"src":"3069:0:14"},"scope":3421,"src":"3031:263:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[403],"body":{"id":1889,"nodeType":"Block","src":"3472:2:14","statements":[]},"documentation":{"id":1881,"nodeType":"StructuredDocumentation","src":"3300:71:14","text":" @dev Authorize upgrade (required by UUPSUpgradeable)"},"id":1890,"implemented":true,"kind":"function","modifiers":[{"id":1887,"kind":"modifierInvocation","modifierName":{"id":1886,"name":"onlyOwner","nameLocations":["3462:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1688,"src":"3462:9:14"},"nodeType":"ModifierInvocation","src":"3462:9:14"}],"name":"_authorizeUpgrade","nameLocation":"3385:17:14","nodeType":"FunctionDefinition","overrides":{"id":1885,"nodeType":"OverrideSpecifier","overrides":[],"src":"3453:8:14"},"parameters":{"id":1884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1883,"mutability":"mutable","name":"newImplementation","nameLocation":"3420:17:14","nodeType":"VariableDeclaration","scope":1890,"src":"3412:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1882,"name":"address","nodeType":"ElementaryTypeName","src":"3412:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3402:41:14"},"returnParameters":{"id":1888,"nodeType":"ParameterList","parameters":[],"src":"3472:0:14"},"scope":3421,"src":"3376:98:14","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3558],"body":{"id":1920,"nodeType":"Block","src":"3672:134:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1898,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1893,"src":"3686:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3703:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1900,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3695:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1899,"name":"address","nodeType":"ElementaryTypeName","src":"3695:7:14","typeDescriptions":{}}},"id":1902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3695:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3686:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1907,"nodeType":"IfStatement","src":"3682:45:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1904,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"3714:11:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3714:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1906,"nodeType":"RevertStatement","src":"3707:20:14"}},{"expression":{"id":1914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1908,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"3737:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3746:7:14","memberName":"isAdmin","nodeType":"MemberAccess","referencedDeclaration":3773,"src":"3737:16:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1912,"indexExpression":{"id":1910,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1893,"src":"3754:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3737:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":1913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3763:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3737:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1915,"nodeType":"ExpressionStatement","src":"3737:30:14"},{"eventCall":{"arguments":[{"id":1917,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1893,"src":"3793:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1916,"name":"AdminAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3782:10:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3782:17:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1919,"nodeType":"EmitStatement","src":"3777:22:14"}]},"documentation":{"id":1891,"nodeType":"StructuredDocumentation","src":"3541:74:14","text":" @dev Add admin\n @param admin Admin address to add"},"functionSelector":"70480275","id":1921,"implemented":true,"kind":"function","modifiers":[{"id":1896,"kind":"modifierInvocation","modifierName":{"id":1895,"name":"onlyOwner","nameLocations":["3662:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1688,"src":"3662:9:14"},"nodeType":"ModifierInvocation","src":"3662:9:14"}],"name":"addAdmin","nameLocation":"3629:8:14","nodeType":"FunctionDefinition","parameters":{"id":1894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1893,"mutability":"mutable","name":"admin","nameLocation":"3646:5:14","nodeType":"VariableDeclaration","scope":1921,"src":"3638:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1892,"name":"address","nodeType":"ElementaryTypeName","src":"3638:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3637:15:14"},"returnParameters":{"id":1897,"nodeType":"ParameterList","parameters":[],"src":"3672:0:14"},"scope":3421,"src":"3620:186:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3563],"body":{"id":1951,"nodeType":"Block","src":"3952:137:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1929,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1924,"src":"3966:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3983:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3975:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1930,"name":"address","nodeType":"ElementaryTypeName","src":"3975:7:14","typeDescriptions":{}}},"id":1933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3975:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3966:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1938,"nodeType":"IfStatement","src":"3962:45:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1935,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"3994:11:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3994:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1937,"nodeType":"RevertStatement","src":"3987:20:14"}},{"expression":{"id":1945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1939,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"4017:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4026:7:14","memberName":"isAdmin","nodeType":"MemberAccess","referencedDeclaration":3773,"src":"4017:16:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1943,"indexExpression":{"id":1941,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1924,"src":"4034:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4017:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":1944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4043:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4017:31:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1946,"nodeType":"ExpressionStatement","src":"4017:31:14"},{"eventCall":{"arguments":[{"id":1948,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1924,"src":"4076:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1947,"name":"AdminRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"4063:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4063:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1950,"nodeType":"EmitStatement","src":"4058:24:14"}]},"documentation":{"id":1922,"nodeType":"StructuredDocumentation","src":"3812:80:14","text":" @dev Remove admin\n @param admin Admin address to remove"},"functionSelector":"1785f53c","id":1952,"implemented":true,"kind":"function","modifiers":[{"id":1927,"kind":"modifierInvocation","modifierName":{"id":1926,"name":"onlyOwner","nameLocations":["3942:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1688,"src":"3942:9:14"},"nodeType":"ModifierInvocation","src":"3942:9:14"}],"name":"removeAdmin","nameLocation":"3906:11:14","nodeType":"FunctionDefinition","parameters":{"id":1925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1924,"mutability":"mutable","name":"admin","nameLocation":"3926:5:14","nodeType":"VariableDeclaration","scope":1952,"src":"3918:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1923,"name":"address","nodeType":"ElementaryTypeName","src":"3918:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3917:15:14"},"returnParameters":{"id":1928,"nodeType":"ParameterList","parameters":[],"src":"3952:0:14"},"scope":3421,"src":"3897:192:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3576],"body":{"id":2008,"nodeType":"Block","src":"4636:340:14","statements":[{"expression":{"id":1975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":1968,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"4646:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1971,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4655:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"4646:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":1972,"indexExpression":{"id":1970,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4670:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4646:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":1973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4681:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"4646:46:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1974,"name":"nativePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1957,"src":"4695:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4646:60:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1976,"nodeType":"ExpressionStatement","src":"4646:60:14"},{"expression":{"id":1984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":1977,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"4716:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4725:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"4716:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":1981,"indexExpression":{"id":1979,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4740:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4716:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":1982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4751:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"4716:51:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1983,"name":"defaultViewCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1959,"src":"4770:16:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4716:70:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1985,"nodeType":"ExpressionStatement","src":"4716:70:14"},{"expression":{"id":1993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":1986,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"4796:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1989,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4805:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"4796:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":1990,"indexExpression":{"id":1988,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4820:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4796:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":1991,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4831:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"4796:47:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1992,"name":"viewDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1961,"src":"4846:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4796:62:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1994,"nodeType":"ExpressionStatement","src":"4796:62:14"},{"expression":{"id":2002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":1995,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"4868:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":1998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4877:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"4868:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":1999,"indexExpression":{"id":1997,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4892:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4868:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4903:8:14","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":3759,"src":"4868:43:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2001,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1963,"src":"4914:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4868:54:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2003,"nodeType":"ExpressionStatement","src":"4868:54:14"},{"eventCall":{"arguments":[{"id":2005,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4959:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2004,"name":"ContentConfigUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3533,"src":"4938:20:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":2006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4938:31:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2007,"nodeType":"EmitStatement","src":"4933:36:14"}]},"documentation":{"id":1953,"nodeType":"StructuredDocumentation","src":"4158:279:14","text":" @dev Set content configuration\n @param contentId Content ID\n @param nativePrice Native coin price\n @param defaultViewCount Default view count\n @param viewDuration View duration in seconds\n @param isActive Whether content is active"},"functionSelector":"b1b105fe","id":2009,"implemented":true,"kind":"function","modifiers":[{"id":1966,"kind":"modifierInvocation","modifierName":{"id":1965,"name":"onlyAdmin","nameLocations":["4626:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"4626:9:14"},"nodeType":"ModifierInvocation","src":"4626:9:14"}],"name":"setContentConfig","nameLocation":"4451:16:14","nodeType":"FunctionDefinition","parameters":{"id":1964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1955,"mutability":"mutable","name":"contentId","nameLocation":"4485:9:14","nodeType":"VariableDeclaration","scope":2009,"src":"4477:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1954,"name":"uint256","nodeType":"ElementaryTypeName","src":"4477:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1957,"mutability":"mutable","name":"nativePrice","nameLocation":"4512:11:14","nodeType":"VariableDeclaration","scope":2009,"src":"4504:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1956,"name":"uint256","nodeType":"ElementaryTypeName","src":"4504:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1959,"mutability":"mutable","name":"defaultViewCount","nameLocation":"4541:16:14","nodeType":"VariableDeclaration","scope":2009,"src":"4533:24:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1958,"name":"uint256","nodeType":"ElementaryTypeName","src":"4533:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1961,"mutability":"mutable","name":"viewDuration","nameLocation":"4575:12:14","nodeType":"VariableDeclaration","scope":2009,"src":"4567:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1960,"name":"uint256","nodeType":"ElementaryTypeName","src":"4567:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1963,"mutability":"mutable","name":"isActive","nameLocation":"4602:8:14","nodeType":"VariableDeclaration","scope":2009,"src":"4597:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1962,"name":"bool","nodeType":"ElementaryTypeName","src":"4597:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4467:149:14"},"returnParameters":{"id":1967,"nodeType":"ParameterList","parameters":[],"src":"4636:0:14"},"scope":3421,"src":"4442:534:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3594],"body":{"id":2128,"nodeType":"Block","src":"5537:844:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2030,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"5564:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5575:6:14","memberName":"length","nodeType":"MemberAccess","src":"5564:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2032,"name":"nativePrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2016,"src":"5585:12:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5598:6:14","memberName":"length","nodeType":"MemberAccess","src":"5585:19:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5564:40:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2035,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"5620:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5631:6:14","memberName":"length","nodeType":"MemberAccess","src":"5620:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2037,"name":"defaultViewCounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2019,"src":"5641:17:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5659:6:14","memberName":"length","nodeType":"MemberAccess","src":"5641:24:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5620:45:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5564:101:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2041,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"5681:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5692:6:14","memberName":"length","nodeType":"MemberAccess","src":"5681:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2043,"name":"viewDurations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2022,"src":"5702:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5716:6:14","memberName":"length","nodeType":"MemberAccess","src":"5702:20:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5681:41:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5564:158:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2047,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"5738:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5749:6:14","memberName":"length","nodeType":"MemberAccess","src":"5738:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2049,"name":"isActiveArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2025,"src":"5759:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":2050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5773:6:14","memberName":"length","nodeType":"MemberAccess","src":"5759:20:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5738:41:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5564:215:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2056,"nodeType":"IfStatement","src":"5547:271:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2053,"name":"ArrayLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3456,"src":"5797:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5797:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2055,"nodeType":"RevertStatement","src":"5790:28:14"}},{"body":{"id":2126,"nodeType":"Block","src":"5877:498:14","statements":[{"expression":{"id":2079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":2068,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"5891:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5900:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"5891:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2074,"indexExpression":{"baseExpression":{"id":2070,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"5915:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2072,"indexExpression":{"id":2071,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"5926:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5891:38:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5930:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"5891:50:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2076,"name":"nativePrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2016,"src":"5944:12:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2078,"indexExpression":{"id":2077,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"5974:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5944:45:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5891:98:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2080,"nodeType":"ExpressionStatement","src":"5891:98:14"},{"expression":{"id":2092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":2081,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"6003:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6029:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"6003:40:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2087,"indexExpression":{"baseExpression":{"id":2083,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"6044:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2085,"indexExpression":{"id":2084,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"6055:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6044:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6003:55:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6076:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"6003:89:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2089,"name":"defaultViewCounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2019,"src":"6095:17:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2091,"indexExpression":{"id":2090,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"6113:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6095:20:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6003:112:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2093,"nodeType":"ExpressionStatement","src":"6003:112:14"},{"expression":{"id":2105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":2094,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"6129:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6138:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"6129:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2100,"indexExpression":{"baseExpression":{"id":2096,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"6153:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2098,"indexExpression":{"id":2097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"6164:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6153:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6129:38:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6168:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"6129:51:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2102,"name":"viewDurations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2022,"src":"6183:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2104,"indexExpression":{"id":2103,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"6214:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6183:46:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6129:100:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2106,"nodeType":"ExpressionStatement","src":"6129:100:14"},{"expression":{"id":2118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":2107,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"6243:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6252:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"6243:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2113,"indexExpression":{"baseExpression":{"id":2109,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"6267:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2111,"indexExpression":{"id":2110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"6278:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6267:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6243:38:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6282:8:14","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":3759,"src":"6243:47:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2115,"name":"isActiveArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2025,"src":"6293:13:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":2117,"indexExpression":{"id":2116,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"6307:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6293:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6243:66:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2119,"nodeType":"ExpressionStatement","src":"6243:66:14"},{"eventCall":{"arguments":[{"baseExpression":{"id":2121,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"6350:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2123,"indexExpression":{"id":2122,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"6361:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6350:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2120,"name":"ContentConfigUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3533,"src":"6329:20:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":2124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:35:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2125,"nodeType":"EmitStatement","src":"6324:40:14"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2061,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"5849:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2062,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2013,"src":"5853:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5864:6:14","memberName":"length","nodeType":"MemberAccess","src":"5853:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5849:21:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2127,"initializationExpression":{"assignments":[2058],"declarations":[{"constant":false,"id":2058,"mutability":"mutable","name":"i","nameLocation":"5842:1:14","nodeType":"VariableDeclaration","scope":2127,"src":"5834:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2057,"name":"uint256","nodeType":"ElementaryTypeName","src":"5834:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2060,"initialValue":{"hexValue":"30","id":2059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5846:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5834:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5872:3:14","subExpression":{"id":2065,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2058,"src":"5872:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2067,"nodeType":"ExpressionStatement","src":"5872:3:14"},"nodeType":"ForStatement","src":"5829:546:14"}]},"documentation":{"id":2010,"nodeType":"StructuredDocumentation","src":"4982:297:14","text":" @dev Batch set content configurations\n @param contentIds Content ID array\n @param nativePrices Native price array\n @param defaultViewCounts Default view count array\n @param viewDurations View duration array\n @param isActiveArray Active status array"},"functionSelector":"09b952be","id":2129,"implemented":true,"kind":"function","modifiers":[{"id":2028,"kind":"modifierInvocation","modifierName":{"id":2027,"name":"onlyAdmin","nameLocations":["5527:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"5527:9:14"},"nodeType":"ModifierInvocation","src":"5527:9:14"}],"name":"batchSetContentConfig","nameLocation":"5293:21:14","nodeType":"FunctionDefinition","parameters":{"id":2026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2013,"mutability":"mutable","name":"contentIds","nameLocation":"5341:10:14","nodeType":"VariableDeclaration","scope":2129,"src":"5324:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2011,"name":"uint256","nodeType":"ElementaryTypeName","src":"5324:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2012,"nodeType":"ArrayTypeName","src":"5324:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2016,"mutability":"mutable","name":"nativePrices","nameLocation":"5378:12:14","nodeType":"VariableDeclaration","scope":2129,"src":"5361:29:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2014,"name":"uint256","nodeType":"ElementaryTypeName","src":"5361:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2015,"nodeType":"ArrayTypeName","src":"5361:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2019,"mutability":"mutable","name":"defaultViewCounts","nameLocation":"5417:17:14","nodeType":"VariableDeclaration","scope":2129,"src":"5400:34:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2017,"name":"uint256","nodeType":"ElementaryTypeName","src":"5400:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2018,"nodeType":"ArrayTypeName","src":"5400:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2022,"mutability":"mutable","name":"viewDurations","nameLocation":"5461:13:14","nodeType":"VariableDeclaration","scope":2129,"src":"5444:30:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2020,"name":"uint256","nodeType":"ElementaryTypeName","src":"5444:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2021,"nodeType":"ArrayTypeName","src":"5444:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2025,"mutability":"mutable","name":"isActiveArray","nameLocation":"5498:13:14","nodeType":"VariableDeclaration","scope":2129,"src":"5484:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":2023,"name":"bool","nodeType":"ElementaryTypeName","src":"5484:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2024,"nodeType":"ArrayTypeName","src":"5484:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"5314:203:14"},"returnParameters":{"id":2029,"nodeType":"ParameterList","parameters":[],"src":"5537:0:14"},"scope":3421,"src":"5284:1097:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3601],"body":{"id":2143,"nodeType":"Block","src":"6591:67:14","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":2137,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"6608:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6617:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"6608:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2140,"indexExpression":{"id":2139,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2132,"src":"6632:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6608:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6643:8:14","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":3759,"src":"6608:43:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2136,"id":2142,"nodeType":"Return","src":"6601:50:14"}]},"documentation":{"id":2130,"nodeType":"StructuredDocumentation","src":"6387:126:14","text":" @dev Check if content is active\n @param contentId Content ID\n @return Whether content is active"},"functionSelector":"40033b3d","id":2144,"implemented":true,"kind":"function","modifiers":[],"name":"isContentActive","nameLocation":"6527:15:14","nodeType":"FunctionDefinition","parameters":{"id":2133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2132,"mutability":"mutable","name":"contentId","nameLocation":"6551:9:14","nodeType":"VariableDeclaration","scope":2144,"src":"6543:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2131,"name":"uint256","nodeType":"ElementaryTypeName","src":"6543:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6542:19:14"},"returnParameters":{"id":2136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2135,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2144,"src":"6585:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2134,"name":"bool","nodeType":"ElementaryTypeName","src":"6585:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6584:6:14"},"scope":3421,"src":"6518:140:14","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3610],"body":{"id":2199,"nodeType":"Block","src":"7061:384:14","statements":[{"condition":{"id":2160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7075:32:14","subExpression":{"baseExpression":{"expression":{"id":2156,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"7076:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7085:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"7076:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2159,"indexExpression":{"id":2158,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2149,"src":"7101:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7076:31:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2164,"nodeType":"IfStatement","src":"7071:63:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2161,"name":"UnsupportedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"7116:16:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7116:18:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2163,"nodeType":"RevertStatement","src":"7109:25:14"}},{"expression":{"id":2174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":2165,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"7145:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2168,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7154:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"7145:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2169,"indexExpression":{"id":2167,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2147,"src":"7169:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7145:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7180:11:14","memberName":"tokenPrices","nodeType":"MemberAccess","referencedDeclaration":3751,"src":"7145:46:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2172,"indexExpression":{"id":2171,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2149,"src":"7192:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7145:53:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2173,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2151,"src":"7201:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7145:61:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2175,"nodeType":"ExpressionStatement","src":"7145:61:14"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2176,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2149,"src":"7281:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7298:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7290:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2177,"name":"address","nodeType":"ElementaryTypeName","src":"7290:7:14","typeDescriptions":{}}},"id":2180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7290:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7281:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2192,"nodeType":"IfStatement","src":"7277:104:14","trueBody":{"id":2191,"nodeType":"Block","src":"7302:79:14","statements":[{"expression":{"id":2189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":2182,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"7316:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7325:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"7316:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2186,"indexExpression":{"id":2184,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2147,"src":"7340:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7316:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7351:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"7316:46:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2188,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2151,"src":"7365:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7316:54:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2190,"nodeType":"ExpressionStatement","src":"7316:54:14"}]}},{"eventCall":{"arguments":[{"id":2194,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2147,"src":"7414:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2195,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2149,"src":"7425:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2196,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2151,"src":"7432:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2193,"name":"TokenPriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"7396:17:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (uint256,address,uint256)"}},"id":2197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7396:42:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2198,"nodeType":"EmitStatement","src":"7391:47:14"}]},"documentation":{"id":2145,"nodeType":"StructuredDocumentation","src":"6725:207:14","text":" @dev Update token price for content (address(0) for native token)\n @param contentId Content ID\n @param token Token address (address(0) for native)\n @param price New price"},"functionSelector":"3428cebb","id":2200,"implemented":true,"kind":"function","modifiers":[{"id":2154,"kind":"modifierInvocation","modifierName":{"id":2153,"name":"onlyAdmin","nameLocations":["7051:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"7051:9:14"},"nodeType":"ModifierInvocation","src":"7051:9:14"}],"name":"updateTokenPrice","nameLocation":"6946:16:14","nodeType":"FunctionDefinition","parameters":{"id":2152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2147,"mutability":"mutable","name":"contentId","nameLocation":"6980:9:14","nodeType":"VariableDeclaration","scope":2200,"src":"6972:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2146,"name":"uint256","nodeType":"ElementaryTypeName","src":"6972:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2149,"mutability":"mutable","name":"token","nameLocation":"7007:5:14","nodeType":"VariableDeclaration","scope":2200,"src":"6999:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2148,"name":"address","nodeType":"ElementaryTypeName","src":"6999:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2151,"mutability":"mutable","name":"price","nameLocation":"7030:5:14","nodeType":"VariableDeclaration","scope":2200,"src":"7022:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2150,"name":"uint256","nodeType":"ElementaryTypeName","src":"7022:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6962:79:14"},"returnParameters":{"id":2155,"nodeType":"ParameterList","parameters":[],"src":"7061:0:14"},"scope":3421,"src":"6937:508:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3621],"body":{"id":2291,"nodeType":"Block","src":"7839:608:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2214,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2204,"src":"7853:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7864:6:14","memberName":"length","nodeType":"MemberAccess","src":"7853:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2216,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"7874:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7881:6:14","memberName":"length","nodeType":"MemberAccess","src":"7874:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7853:34:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2222,"nodeType":"IfStatement","src":"7849:68:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2219,"name":"ArrayLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3456,"src":"7896:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7896:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2221,"nodeType":"RevertStatement","src":"7889:28:14"}},{"condition":{"id":2227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7931:32:14","subExpression":{"baseExpression":{"expression":{"id":2223,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"7932:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7941:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"7932:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2226,"indexExpression":{"id":2225,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"7957:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7932:31:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2231,"nodeType":"IfStatement","src":"7927:63:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2228,"name":"UnsupportedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"7972:16:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7972:18:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2230,"nodeType":"RevertStatement","src":"7965:25:14"}},{"body":{"id":2289,"nodeType":"Block","src":"8049:392:14","statements":[{"expression":{"id":2256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":2243,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"8063:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8072:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"8063:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2249,"indexExpression":{"baseExpression":{"id":2245,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2204,"src":"8087:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2247,"indexExpression":{"id":2246,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8098:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8087:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8063:38:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8102:11:14","memberName":"tokenPrices","nodeType":"MemberAccess","referencedDeclaration":3751,"src":"8063:50:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2252,"indexExpression":{"id":2251,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"8114:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8063:57:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2253,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"8123:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2255,"indexExpression":{"id":2254,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8147:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8123:39:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8063:99:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2257,"nodeType":"ExpressionStatement","src":"8063:99:14"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2258,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"8245:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8262:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8254:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2259,"name":"address","nodeType":"ElementaryTypeName","src":"8254:7:14","typeDescriptions":{}}},"id":2262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8254:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8245:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2278,"nodeType":"IfStatement","src":"8241:120:14","trueBody":{"id":2277,"nodeType":"Block","src":"8266:95:14","statements":[{"expression":{"id":2275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":2264,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"8284:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8293:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"8284:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2270,"indexExpression":{"baseExpression":{"id":2266,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2204,"src":"8308:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2268,"indexExpression":{"id":2267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8319:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8308:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8284:38:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8323:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"8284:50:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2272,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"8337:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2274,"indexExpression":{"id":2273,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8344:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8337:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8284:62:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2276,"nodeType":"ExpressionStatement","src":"8284:62:14"}]}},{"eventCall":{"arguments":[{"baseExpression":{"id":2280,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2204,"src":"8398:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2282,"indexExpression":{"id":2281,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8409:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8398:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2283,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"8413:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":2284,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"8420:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2286,"indexExpression":{"id":2285,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8427:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8420:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2279,"name":"TokenPriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"8380:17:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (uint256,address,uint256)"}},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8380:50:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2288,"nodeType":"EmitStatement","src":"8375:55:14"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8021:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2237,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2204,"src":"8025:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8036:6:14","memberName":"length","nodeType":"MemberAccess","src":"8025:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8021:21:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2290,"initializationExpression":{"assignments":[2233],"declarations":[{"constant":false,"id":2233,"mutability":"mutable","name":"i","nameLocation":"8014:1:14","nodeType":"VariableDeclaration","scope":2290,"src":"8006:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2232,"name":"uint256","nodeType":"ElementaryTypeName","src":"8006:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2235,"initialValue":{"hexValue":"30","id":2234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8018:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8006:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8044:3:14","subExpression":{"id":2240,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"8044:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2242,"nodeType":"ExpressionStatement","src":"8044:3:14"},"nodeType":"ForStatement","src":"8001:440:14"}]},"documentation":{"id":2201,"nodeType":"StructuredDocumentation","src":"7451:234:14","text":" @dev Batch update token prices for multiple contents (address(0) for native token)\n @param contentIds Content ID array\n @param token Token address (address(0) for native)\n @param prices Price array"},"functionSelector":"8f0ff11b","id":2292,"implemented":true,"kind":"function","modifiers":[{"id":2212,"kind":"modifierInvocation","modifierName":{"id":2211,"name":"onlyAdmin","nameLocations":["7829:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"7829:9:14"},"nodeType":"ModifierInvocation","src":"7829:9:14"}],"name":"batchUpdateTokenPrice","nameLocation":"7699:21:14","nodeType":"FunctionDefinition","parameters":{"id":2210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2204,"mutability":"mutable","name":"contentIds","nameLocation":"7747:10:14","nodeType":"VariableDeclaration","scope":2292,"src":"7730:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2202,"name":"uint256","nodeType":"ElementaryTypeName","src":"7730:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2203,"nodeType":"ArrayTypeName","src":"7730:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2206,"mutability":"mutable","name":"token","nameLocation":"7775:5:14","nodeType":"VariableDeclaration","scope":2292,"src":"7767:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2205,"name":"address","nodeType":"ElementaryTypeName","src":"7767:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2209,"mutability":"mutable","name":"prices","nameLocation":"7807:6:14","nodeType":"VariableDeclaration","scope":2292,"src":"7790:23:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2207,"name":"uint256","nodeType":"ElementaryTypeName","src":"7790:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2208,"nodeType":"ArrayTypeName","src":"7790:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7720:99:14"},"returnParameters":{"id":2213,"nodeType":"ParameterList","parameters":[],"src":"7839:0:14"},"scope":3421,"src":"7690:757:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3626],"body":{"id":2312,"nodeType":"Block","src":"8726:96:14","statements":[{"expression":{"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":2300,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"8736:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8745:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"8736:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2304,"indexExpression":{"id":2302,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"8761:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8736:31:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8770:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"8736:38:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2307,"nodeType":"ExpressionStatement","src":"8736:38:14"},{"eventCall":{"arguments":[{"id":2309,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"8809:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2308,"name":"SupportedTokenAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3545,"src":"8789:19:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8789:26:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2311,"nodeType":"EmitStatement","src":"8784:31:14"}]},"documentation":{"id":2293,"nodeType":"StructuredDocumentation","src":"8522:138:14","text":" @dev Add supported token (address(0) for native token)\n @param token Token address to add (address(0) for native)"},"functionSelector":"6d69fcaf","id":2313,"implemented":true,"kind":"function","modifiers":[{"id":2298,"kind":"modifierInvocation","modifierName":{"id":2297,"name":"onlyAdmin","nameLocations":["8716:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"8716:9:14"},"nodeType":"ModifierInvocation","src":"8716:9:14"}],"name":"addSupportedToken","nameLocation":"8674:17:14","nodeType":"FunctionDefinition","parameters":{"id":2296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2295,"mutability":"mutable","name":"token","nameLocation":"8700:5:14","nodeType":"VariableDeclaration","scope":2313,"src":"8692:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2294,"name":"address","nodeType":"ElementaryTypeName","src":"8692:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8691:15:14"},"returnParameters":{"id":2299,"nodeType":"ParameterList","parameters":[],"src":"8726:0:14"},"scope":3421,"src":"8665:157:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3631],"body":{"id":2333,"nodeType":"Block","src":"9041:99:14","statements":[{"expression":{"id":2327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":2321,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"9051:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9060:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"9051:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2325,"indexExpression":{"id":2323,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2316,"src":"9076:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9051:31:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":2326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9085:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9051:39:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2328,"nodeType":"ExpressionStatement","src":"9051:39:14"},{"eventCall":{"arguments":[{"id":2330,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2316,"src":"9127:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2329,"name":"SupportedTokenRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3549,"src":"9105:21:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9105:28:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2332,"nodeType":"EmitStatement","src":"9100:33:14"}]},"documentation":{"id":2314,"nodeType":"StructuredDocumentation","src":"8828:144:14","text":" @dev Remove supported token (address(0) for native token)\n @param token Token address to remove (address(0) for native)"},"functionSelector":"76319190","id":2334,"implemented":true,"kind":"function","modifiers":[{"id":2319,"kind":"modifierInvocation","modifierName":{"id":2318,"name":"onlyAdmin","nameLocations":["9031:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"9031:9:14"},"nodeType":"ModifierInvocation","src":"9031:9:14"}],"name":"removeSupportedToken","nameLocation":"8986:20:14","nodeType":"FunctionDefinition","parameters":{"id":2317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2316,"mutability":"mutable","name":"token","nameLocation":"9015:5:14","nodeType":"VariableDeclaration","scope":2334,"src":"9007:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2315,"name":"address","nodeType":"ElementaryTypeName","src":"9007:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9006:15:14"},"returnParameters":{"id":2320,"nodeType":"ParameterList","parameters":[],"src":"9041:0:14"},"scope":3421,"src":"8977:163:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3638],"body":{"id":2347,"nodeType":"Block","src":"9357:55:14","statements":[{"expression":{"baseExpression":{"expression":{"id":2342,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"9374:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9383:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"9374:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2345,"indexExpression":{"id":2344,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2337,"src":"9399:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9374:31:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2341,"id":2346,"nodeType":"Return","src":"9367:38:14"}]},"documentation":{"id":2335,"nodeType":"StructuredDocumentation","src":"9146:136:14","text":" @dev Check if token is supported\n @param token Token address to check\n @return Whether token is supported"},"functionSelector":"240028e8","id":2348,"implemented":true,"kind":"function","modifiers":[],"name":"isSupportedToken","nameLocation":"9296:16:14","nodeType":"FunctionDefinition","parameters":{"id":2338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2337,"mutability":"mutable","name":"token","nameLocation":"9321:5:14","nodeType":"VariableDeclaration","scope":2348,"src":"9313:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2336,"name":"address","nodeType":"ElementaryTypeName","src":"9313:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9312:15:14"},"returnParameters":{"id":2341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2348,"src":"9351:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2339,"name":"bool","nodeType":"ElementaryTypeName","src":"9351:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9350:6:14"},"scope":3421,"src":"9287:125:14","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3647],"body":{"id":2471,"nodeType":"Block","src":"9881:1254:14","statements":[{"condition":{"id":2369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9895:39:14","subExpression":{"baseExpression":{"expression":{"id":2365,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"9896:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9905:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"9896:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2368,"indexExpression":{"id":2367,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2353,"src":"9921:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9896:38:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2373,"nodeType":"IfStatement","src":"9891:70:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2370,"name":"UnsupportedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"9943:16:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9943:18:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2372,"nodeType":"RevertStatement","src":"9936:25:14"}},{"assignments":[2375],"declarations":[{"constant":false,"id":2375,"mutability":"mutable","name":"expectedPrice","nameLocation":"9980:13:14","nodeType":"VariableDeclaration","scope":2471,"src":"9972:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2374,"name":"uint256","nodeType":"ElementaryTypeName","src":"9972:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2376,"nodeType":"VariableDeclarationStatement","src":"9972:21:14"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2377,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2353,"src":"10007:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10031:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10023:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2378,"name":"address","nodeType":"ElementaryTypeName","src":"10023:7:14","typeDescriptions":{}}},"id":2381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10023:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10007:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2438,"nodeType":"Block","src":"10305:381:14","statements":[{"expression":{"id":2416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2408,"name":"expectedPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2375,"src":"10354:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":2409,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"10370:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10379:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"10370:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2412,"indexExpression":{"id":2411,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"10394:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10370:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10405:11:14","memberName":"tokenPrices","nodeType":"MemberAccess","referencedDeclaration":3751,"src":"10370:46:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2415,"indexExpression":{"id":2414,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2353,"src":"10434:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10370:90:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10354:106:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2417,"nodeType":"ExpressionStatement","src":"10354:106:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2418,"name":"expectedPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2375,"src":"10478:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2419,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2355,"src":"10495:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10478:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2424,"nodeType":"IfStatement","src":"10474:57:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2421,"name":"InsufficientPayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"10510:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10510:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2423,"nodeType":"RevertStatement","src":"10503:28:14"}},{"expression":{"arguments":[{"expression":{"id":2429,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10596:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10600:6:14","memberName":"sender","nodeType":"MemberAccess","src":"10596:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2433,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10632:4:14","typeDescriptions":{"typeIdentifier":"t_contract$_VideoPayment_$3421","typeString":"contract VideoPayment"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VideoPayment_$3421","typeString":"contract VideoPayment"}],"id":2432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10624:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2431,"name":"address","nodeType":"ElementaryTypeName","src":"10624:7:14","typeDescriptions":{}}},"id":2434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10624:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2435,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2355,"src":"10655:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2426,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2353,"src":"10552:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2425,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"10545:6:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1114_$","typeString":"type(contract IERC20)"}},"id":2427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10545:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1114","typeString":"contract IERC20"}},"id":2428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10566:12:14","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1113,"src":"10545:33:14","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10545:130:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2437,"nodeType":"ExpressionStatement","src":"10545:130:14"}]},"id":2439,"nodeType":"IfStatement","src":"10003:683:14","trueBody":{"id":2407,"nodeType":"Block","src":"10035:264:14","statements":[{"expression":{"id":2389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2383,"name":"expectedPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2375,"src":"10085:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"expression":{"id":2384,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"10101:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10110:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"10101:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2387,"indexExpression":{"id":2386,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"10125:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10101:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10136:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"10101:46:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10085:62:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2390,"nodeType":"ExpressionStatement","src":"10085:62:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2391,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10165:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10169:5:14","memberName":"value","nodeType":"MemberAccess","src":"10165:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2393,"name":"expectedPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2375,"src":"10178:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10165:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2398,"nodeType":"IfStatement","src":"10161:60:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2395,"name":"InsufficientPayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"10200:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10200:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2397,"nodeType":"RevertStatement","src":"10193:28:14"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2399,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2355,"src":"10239:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2400,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10249:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10253:5:14","memberName":"value","nodeType":"MemberAccess","src":"10249:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10239:19:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2406,"nodeType":"IfStatement","src":"10235:53:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2403,"name":"InsufficientPayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"10267:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10267:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2405,"nodeType":"RevertStatement","src":"10260:28:14"}}]}},{"expression":{"arguments":[{"expression":{"id":2441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10752:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10756:6:14","memberName":"sender","nodeType":"MemberAccess","src":"10752:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2443,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"10764:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2440,"name":"_updateViewPermission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2802,"src":"10730:21:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":2444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10730:44:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2445,"nodeType":"ExpressionStatement","src":"10730:44:14"},{"assignments":[2447],"declarations":[{"constant":false,"id":2447,"mutability":"mutable","name":"validUntil","nameLocation":"10815:10:14","nodeType":"VariableDeclaration","scope":2471,"src":"10807:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2446,"name":"uint256","nodeType":"ElementaryTypeName","src":"10807:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2456,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2448,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10828:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10834:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"10828:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"baseExpression":{"expression":{"id":2450,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"10858:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10867:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"10858:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2453,"indexExpression":{"id":2452,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"10882:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10858:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10893:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"10858:47:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10828:77:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10807:98:14"},{"eventCall":{"arguments":[{"expression":{"id":2458,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10950:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10954:6:14","memberName":"sender","nodeType":"MemberAccess","src":"10950:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2460,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"10974:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2461,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2353,"src":"10997:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2462,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2355,"src":"11023:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"expression":{"id":2463,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"11043:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11052:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"11043:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2466,"indexExpression":{"id":2465,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"11067:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11043:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11078:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"11043:51:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2468,"name":"validUntil","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"11108:10:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2457,"name":"ContentPurchased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3476,"src":"10920:16:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256,uint256)"}},"id":2469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10920:208:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2470,"nodeType":"EmitStatement","src":"10915:213:14"}]},"documentation":{"id":2349,"nodeType":"StructuredDocumentation","src":"9471:225:14","text":" @dev Purchase content with token (address(0) for native token)\n @param contentId Content ID\n @param paymentToken Payment token address (address(0) for native)\n @param amount Payment amount"},"functionSelector":"b6f1d140","id":2472,"implemented":true,"kind":"function","modifiers":[{"id":2358,"kind":"modifierInvocation","modifierName":{"id":2357,"name":"nonReentrant","nameLocations":["9830:12:14"],"nodeType":"IdentifierPath","referencedDeclaration":518,"src":"9830:12:14"},"nodeType":"ModifierInvocation","src":"9830:12:14"},{"id":2360,"kind":"modifierInvocation","modifierName":{"id":2359,"name":"whenNotPaused","nameLocations":["9843:13:14"],"nodeType":"IdentifierPath","referencedDeclaration":1712,"src":"9843:13:14"},"nodeType":"ModifierInvocation","src":"9843:13:14"},{"arguments":[{"id":2362,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"9870:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2363,"kind":"modifierInvocation","modifierName":{"id":2361,"name":"validContent","nameLocations":["9857:12:14"],"nodeType":"IdentifierPath","referencedDeclaration":1728,"src":"9857:12:14"},"nodeType":"ModifierInvocation","src":"9857:23:14"}],"name":"purchaseContent","nameLocation":"9710:15:14","nodeType":"FunctionDefinition","parameters":{"id":2356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2351,"mutability":"mutable","name":"contentId","nameLocation":"9743:9:14","nodeType":"VariableDeclaration","scope":2472,"src":"9735:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2350,"name":"uint256","nodeType":"ElementaryTypeName","src":"9735:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2353,"mutability":"mutable","name":"paymentToken","nameLocation":"9770:12:14","nodeType":"VariableDeclaration","scope":2472,"src":"9762:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2352,"name":"address","nodeType":"ElementaryTypeName","src":"9762:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"amount","nameLocation":"9800:6:14","nodeType":"VariableDeclaration","scope":2472,"src":"9792:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2354,"name":"uint256","nodeType":"ElementaryTypeName","src":"9792:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9725:87:14"},"returnParameters":{"id":2364,"nodeType":"ParameterList","parameters":[],"src":"9881:0:14"},"scope":3421,"src":"9701:1434:14","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[3657],"body":{"id":2622,"nodeType":"Block","src":"11564:1352:14","statements":[{"condition":{"id":2491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11578:39:14","subExpression":{"baseExpression":{"expression":{"id":2487,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"11579:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11588:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"11579:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2490,"indexExpression":{"id":2489,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"11604:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11579:38:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2495,"nodeType":"IfStatement","src":"11574:70:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2492,"name":"UnsupportedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"11626:16:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11626:18:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2494,"nodeType":"RevertStatement","src":"11619:25:14"}},{"assignments":[2497],"declarations":[{"constant":false,"id":2497,"mutability":"mutable","name":"expectedTotal","nameLocation":"11663:13:14","nodeType":"VariableDeclaration","scope":2622,"src":"11655:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2496,"name":"uint256","nodeType":"ElementaryTypeName","src":"11655:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2499,"initialValue":{"hexValue":"30","id":2498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11679:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11655:25:14"},{"body":{"id":2554,"nodeType":"Block","src":"11738:468:14","statements":[{"condition":{"id":2518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11756:48:14","subExpression":{"expression":{"baseExpression":{"expression":{"id":2511,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"11757:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11766:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"11757:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2516,"indexExpression":{"baseExpression":{"id":2513,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"11781:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2515,"indexExpression":{"id":2514,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"11792:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11781:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11757:38:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11796:8:14","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":3759,"src":"11757:47:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2522,"nodeType":"IfStatement","src":"11752:93:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2519,"name":"InvalidContent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3448,"src":"11829:14:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11829:16:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2521,"nodeType":"RevertStatement","src":"11822:23:14"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2523,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"11864:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11888:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11880:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2524,"name":"address","nodeType":"ElementaryTypeName","src":"11880:7:14","typeDescriptions":{}}},"id":2527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11880:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11864:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2552,"nodeType":"Block","src":"12040:156:14","statements":[{"expression":{"id":2550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2540,"name":"expectedTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2497,"src":"12058:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":2541,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"12075:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12105:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"12075:44:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2546,"indexExpression":{"baseExpression":{"id":2543,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"12120:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2545,"indexExpression":{"id":2544,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"12131:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12120:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12075:59:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12156:11:14","memberName":"tokenPrices","nodeType":"MemberAccess","referencedDeclaration":3751,"src":"12075:92:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2549,"indexExpression":{"id":2548,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"12168:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12075:106:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12058:123:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2551,"nodeType":"ExpressionStatement","src":"12058:123:14"}]},"id":2553,"nodeType":"IfStatement","src":"11860:336:14","trueBody":{"id":2539,"nodeType":"Block","src":"11892:142:14","statements":[{"expression":{"id":2537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2529,"name":"expectedTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2497,"src":"11910:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"baseExpression":{"expression":{"id":2530,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"11927:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11957:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"11927:44:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2535,"indexExpression":{"baseExpression":{"id":2532,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"11972:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2534,"indexExpression":{"id":2533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"11983:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11972:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11927:59:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12008:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"11927:92:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11910:109:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2538,"nodeType":"ExpressionStatement","src":"11910:109:14"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2504,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"11710:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2505,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"11714:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11725:6:14","memberName":"length","nodeType":"MemberAccess","src":"11714:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11710:21:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2555,"initializationExpression":{"assignments":[2501],"declarations":[{"constant":false,"id":2501,"mutability":"mutable","name":"i","nameLocation":"11703:1:14","nodeType":"VariableDeclaration","scope":2555,"src":"11695:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2500,"name":"uint256","nodeType":"ElementaryTypeName","src":"11695:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2503,"initialValue":{"hexValue":"30","id":2502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11707:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11695:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11733:3:14","subExpression":{"id":2508,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"11733:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2510,"nodeType":"ExpressionStatement","src":"11733:3:14"},"nodeType":"ForStatement","src":"11690:516:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2556,"name":"totalAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"12220:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2557,"name":"expectedTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2497,"src":"12235:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12220:28:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2562,"nodeType":"IfStatement","src":"12216:62:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2559,"name":"InsufficientPayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"12257:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12257:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2561,"nodeType":"RevertStatement","src":"12250:28:14"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2563,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"12293:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12317:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12309:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2564,"name":"address","nodeType":"ElementaryTypeName","src":"12309:7:14","typeDescriptions":{}}},"id":2567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12309:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12293:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2591,"nodeType":"Block","src":"12446:195:14","statements":[{"expression":{"arguments":[{"expression":{"id":2582,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12546:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12550:6:14","memberName":"sender","nodeType":"MemberAccess","src":"12546:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2586,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12582:4:14","typeDescriptions":{"typeIdentifier":"t_contract$_VideoPayment_$3421","typeString":"contract VideoPayment"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VideoPayment_$3421","typeString":"contract VideoPayment"}],"id":2585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12574:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2584,"name":"address","nodeType":"ElementaryTypeName","src":"12574:7:14","typeDescriptions":{}}},"id":2587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12574:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2588,"name":"totalAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"12605:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2579,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"12502:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2578,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1114,"src":"12495:6:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1114_$","typeString":"type(contract IERC20)"}},"id":2580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12495:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1114","typeString":"contract IERC20"}},"id":2581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12516:12:14","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1113,"src":"12495:33:14","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12495:135:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2590,"nodeType":"ExpressionStatement","src":"12495:135:14"}]},"id":2592,"nodeType":"IfStatement","src":"12289:352:14","trueBody":{"id":2577,"nodeType":"Block","src":"12321:119:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2569,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12375:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12379:5:14","memberName":"value","nodeType":"MemberAccess","src":"12375:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2571,"name":"totalAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"12388:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12375:24:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2576,"nodeType":"IfStatement","src":"12371:58:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2573,"name":"InsufficientPayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"12408:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12408:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2575,"nodeType":"RevertStatement","src":"12401:28:14"}}]}},{"body":{"id":2612,"nodeType":"Block","src":"12734:73:14","statements":[{"expression":{"arguments":[{"expression":{"id":2605,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12770:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12774:6:14","memberName":"sender","nodeType":"MemberAccess","src":"12770:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":2607,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"12782:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2609,"indexExpression":{"id":2608,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2594,"src":"12793:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12782:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2604,"name":"_updateViewPermission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2802,"src":"12748:21:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":2610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12748:48:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2611,"nodeType":"ExpressionStatement","src":"12748:48:14"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2597,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2594,"src":"12706:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2598,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"12710:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12721:6:14","memberName":"length","nodeType":"MemberAccess","src":"12710:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12706:21:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2613,"initializationExpression":{"assignments":[2594],"declarations":[{"constant":false,"id":2594,"mutability":"mutable","name":"i","nameLocation":"12699:1:14","nodeType":"VariableDeclaration","scope":2613,"src":"12691:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2593,"name":"uint256","nodeType":"ElementaryTypeName","src":"12691:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2596,"initialValue":{"hexValue":"30","id":2595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12703:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12691:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12729:3:14","subExpression":{"id":2601,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2594,"src":"12729:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2603,"nodeType":"ExpressionStatement","src":"12729:3:14"},"nodeType":"ForStatement","src":"12686:121:14"},{"eventCall":{"arguments":[{"expression":{"id":2615,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12859:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12863:6:14","memberName":"sender","nodeType":"MemberAccess","src":"12859:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2617,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2476,"src":"12871:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":2618,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2478,"src":"12883:12:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2619,"name":"totalAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"12897:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2614,"name":"BatchPurchased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3487,"src":"12844:14:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256[] memory,address,uint256)"}},"id":2620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12844:65:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2621,"nodeType":"EmitStatement","src":"12839:70:14"}]},"documentation":{"id":2473,"nodeType":"StructuredDocumentation","src":"11141:249:14","text":" @dev Batch purchase content with token (address(0) for native token)\n @param contentIds Content ID array\n @param paymentToken Payment token address (address(0) for native)\n @param totalAmount Total payment amount"},"functionSelector":"99ea24fe","id":2623,"implemented":true,"kind":"function","modifiers":[{"id":2483,"kind":"modifierInvocation","modifierName":{"id":2482,"name":"nonReentrant","nameLocations":["11537:12:14"],"nodeType":"IdentifierPath","referencedDeclaration":518,"src":"11537:12:14"},"nodeType":"ModifierInvocation","src":"11537:12:14"},{"id":2485,"kind":"modifierInvocation","modifierName":{"id":2484,"name":"whenNotPaused","nameLocations":["11550:13:14"],"nodeType":"IdentifierPath","referencedDeclaration":1712,"src":"11550:13:14"},"nodeType":"ModifierInvocation","src":"11550:13:14"}],"name":"batchPurchase","nameLocation":"11404:13:14","nodeType":"FunctionDefinition","parameters":{"id":2481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2476,"mutability":"mutable","name":"contentIds","nameLocation":"11444:10:14","nodeType":"VariableDeclaration","scope":2623,"src":"11427:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2474,"name":"uint256","nodeType":"ElementaryTypeName","src":"11427:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2475,"nodeType":"ArrayTypeName","src":"11427:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2478,"mutability":"mutable","name":"paymentToken","nameLocation":"11472:12:14","nodeType":"VariableDeclaration","scope":2623,"src":"11464:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2477,"name":"address","nodeType":"ElementaryTypeName","src":"11464:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2480,"mutability":"mutable","name":"totalAmount","nameLocation":"11502:11:14","nodeType":"VariableDeclaration","scope":2623,"src":"11494:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2479,"name":"uint256","nodeType":"ElementaryTypeName","src":"11494:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11417:102:14"},"returnParameters":{"id":2486,"nodeType":"ParameterList","parameters":[],"src":"11564:0:14"},"scope":3421,"src":"11395:1521:14","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[3666],"body":{"id":2680,"nodeType":"Block","src":"13265:474:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2644,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2630,"src":"13339:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2641,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2628,"src":"13318:11:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2640,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1231,"src":"13310:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721_$1231_$","typeString":"type(contract IERC721)"}},"id":2642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13310:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$1231","typeString":"contract IERC721"}},"id":2643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13331:7:14","memberName":"ownerOf","nodeType":"MemberAccess","referencedDeclaration":1164,"src":"13310:28:14","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":2645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13310:37:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2646,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13351:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13355:6:14","memberName":"sender","nodeType":"MemberAccess","src":"13351:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13310:51:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2652,"nodeType":"IfStatement","src":"13306:95:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2649,"name":"NoValidPermission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"13382:17:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13382:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2651,"nodeType":"RevertStatement","src":"13375:26:14"}},{"expression":{"arguments":[{"expression":{"id":2657,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13513:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13517:6:14","memberName":"sender","nodeType":"MemberAccess","src":"13513:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2661,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13533:4:14","typeDescriptions":{"typeIdentifier":"t_contract$_VideoPayment_$3421","typeString":"contract VideoPayment"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VideoPayment_$3421","typeString":"contract VideoPayment"}],"id":2660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13525:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2659,"name":"address","nodeType":"ElementaryTypeName","src":"13525:7:14","typeDescriptions":{}}},"id":2662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13525:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2663,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2630,"src":"13540:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2654,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2628,"src":"13487:11:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2653,"name":"IERC721","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1231,"src":"13479:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC721_$1231_$","typeString":"type(contract IERC721)"}},"id":2655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13479:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC721_$1231","typeString":"contract IERC721"}},"id":2656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13500:12:14","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1196,"src":"13479:33:14","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":2664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13479:69:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2665,"nodeType":"ExpressionStatement","src":"13479:69:14"},{"expression":{"arguments":[{"expression":{"id":2667,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13615:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13619:6:14","memberName":"sender","nodeType":"MemberAccess","src":"13615:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2669,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2626,"src":"13627:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2666,"name":"_updateViewPermission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2802,"src":"13593:21:14","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":2670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13593:44:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2671,"nodeType":"ExpressionStatement","src":"13593:44:14"},{"eventCall":{"arguments":[{"expression":{"id":2673,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13688:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13692:6:14","memberName":"sender","nodeType":"MemberAccess","src":"13688:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2675,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2626,"src":"13700:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2676,"name":"nftContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2628,"src":"13711:11:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2677,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2630,"src":"13724:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2672,"name":"NFTPurchased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"13675:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256)"}},"id":2678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13675:57:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2679,"nodeType":"EmitStatement","src":"13670:62:14"}]},"documentation":{"id":2624,"nodeType":"StructuredDocumentation","src":"12922:166:14","text":" @dev Purchase content with NFT\n @param contentId Content ID\n @param nftContract NFT contract address\n @param tokenId NFT token ID"},"functionSelector":"86778641","id":2681,"implemented":true,"kind":"function","modifiers":[{"id":2633,"kind":"modifierInvocation","modifierName":{"id":2632,"name":"nonReentrant","nameLocations":["13214:12:14"],"nodeType":"IdentifierPath","referencedDeclaration":518,"src":"13214:12:14"},"nodeType":"ModifierInvocation","src":"13214:12:14"},{"id":2635,"kind":"modifierInvocation","modifierName":{"id":2634,"name":"whenNotPaused","nameLocations":["13227:13:14"],"nodeType":"IdentifierPath","referencedDeclaration":1712,"src":"13227:13:14"},"nodeType":"ModifierInvocation","src":"13227:13:14"},{"arguments":[{"id":2637,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2626,"src":"13254:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2638,"kind":"modifierInvocation","modifierName":{"id":2636,"name":"validContent","nameLocations":["13241:12:14"],"nodeType":"IdentifierPath","referencedDeclaration":1728,"src":"13241:12:14"},"nodeType":"ModifierInvocation","src":"13241:23:14"}],"name":"purchaseWithNFT","nameLocation":"13102:15:14","nodeType":"FunctionDefinition","parameters":{"id":2631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2626,"mutability":"mutable","name":"contentId","nameLocation":"13135:9:14","nodeType":"VariableDeclaration","scope":2681,"src":"13127:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2625,"name":"uint256","nodeType":"ElementaryTypeName","src":"13127:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2628,"mutability":"mutable","name":"nftContract","nameLocation":"13162:11:14","nodeType":"VariableDeclaration","scope":2681,"src":"13154:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2627,"name":"address","nodeType":"ElementaryTypeName","src":"13154:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2630,"mutability":"mutable","name":"tokenId","nameLocation":"13191:7:14","nodeType":"VariableDeclaration","scope":2681,"src":"13183:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2629,"name":"uint256","nodeType":"ElementaryTypeName","src":"13183:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13117:87:14"},"returnParameters":{"id":2639,"nodeType":"ParameterList","parameters":[],"src":"13265:0:14"},"scope":3421,"src":"13093:646:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2801,"nodeType":"Block","src":"13957:1802:14","statements":[{"assignments":[2693],"declarations":[{"constant":false,"id":2693,"mutability":"mutable","name":"existing","nameLocation":"14010:8:14","nodeType":"VariableDeclaration","scope":2801,"src":"13967:51:14","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"},"typeName":{"id":2692,"nodeType":"UserDefinedTypeName","pathNode":{"id":2691,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["13967:19:14","13987:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"13967:34:14"},"referencedDeclaration":3767,"src":"13967:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"visibility":"internal"}],"id":2700,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":2694,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"14021:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14043:15:14","memberName":"userPermissions","nodeType":"MemberAccess","referencedDeclaration":3785,"src":"14021:37:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref))"}},"id":2697,"indexExpression":{"id":2696,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2684,"src":"14059:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14021:43:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref)"}},"id":2699,"indexExpression":{"id":2698,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"14065:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14021:54:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage","typeString":"struct VideoPaymentStorage.ViewPermission storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13967:108:14"},{"assignments":[2702],"declarations":[{"constant":false,"id":2702,"mutability":"mutable","name":"defaultViews","nameLocation":"14093:12:14","nodeType":"VariableDeclaration","scope":2801,"src":"14085:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2701,"name":"uint256","nodeType":"ElementaryTypeName","src":"14085:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2708,"initialValue":{"expression":{"baseExpression":{"expression":{"id":2703,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"14108:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14130:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"14108:36:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2706,"indexExpression":{"id":2705,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"14145:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14108:47:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14169:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"14108:77:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14085:100:14"},{"assignments":[2710],"declarations":[{"constant":false,"id":2710,"mutability":"mutable","name":"duration","nameLocation":"14203:8:14","nodeType":"VariableDeclaration","scope":2801,"src":"14195:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2709,"name":"uint256","nodeType":"ElementaryTypeName","src":"14195:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2716,"initialValue":{"expression":{"baseExpression":{"expression":{"id":2711,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"14214:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14223:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"14214:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2714,"indexExpression":{"id":2713,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"14238:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14214:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2715,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14249:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"14214:47:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14195:66:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2717,"name":"defaultViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2702,"src":"14276:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14292:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14276:17:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2799,"nodeType":"Block","src":"14963:790:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2753,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"15061:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15070:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"15061:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2755,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"15097:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15103:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"15097:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2757,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"15116:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15125:12:14","memberName":"purchaseTime","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"15116:21:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2759,"name":"duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2710,"src":"15140:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15116:32:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15097:51:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15061:87:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2797,"nodeType":"Block","src":"15509:234:14","statements":[{"expression":{"id":2783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2778,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"15592:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15601:12:14","memberName":"purchaseTime","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"15592:21:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":2781,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"15616:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15622:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"15616:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15592:39:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2784,"nodeType":"ExpressionStatement","src":"15592:39:14"},{"expression":{"id":2789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2785,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"15649:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15658:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"15649:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2788,"name":"defaultViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2702,"src":"15675:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15649:38:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2790,"nodeType":"ExpressionStatement","src":"15649:38:14"},{"expression":{"id":2795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2791,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"15705:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2793,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15714:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"15705:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15724:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15705:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2796,"nodeType":"ExpressionStatement","src":"15705:23:14"}]},"id":2798,"nodeType":"IfStatement","src":"15040:703:14","trueBody":{"id":2777,"nodeType":"Block","src":"15163:340:14","statements":[{"expression":{"id":2767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2763,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"15258:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15267:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"15258:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":2766,"name":"defaultViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2702,"src":"15285:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15258:39:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2768,"nodeType":"ExpressionStatement","src":"15258:39:14"},{"eventCall":{"arguments":[{"id":2770,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2684,"src":"15356:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2771,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"15382:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2772,"name":"defaultViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2702,"src":"15413:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":2773,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"15447:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15456:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"15447:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2769,"name":"ViewCountAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"15320:14:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256)"}},"id":2775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15320:168:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2776,"nodeType":"EmitStatement","src":"15315:173:14"}]}}]},"id":2800,"nodeType":"IfStatement","src":"14272:1481:14","trueBody":{"id":2752,"nodeType":"Block","src":"14295:662:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2720,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"14407:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14416:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"14407:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2722,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"14443:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14449:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"14443:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2724,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"14462:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2725,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14471:12:14","memberName":"purchaseTime","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"14462:21:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2726,"name":"duration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2710,"src":"14486:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14462:32:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14443:51:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14407:87:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2732,"nodeType":"IfStatement","src":"14386:320:14","trueBody":{"id":2731,"nodeType":"Block","src":"14509:197:14","statements":[{"functionReturnParameters":2688,"id":2730,"nodeType":"Return","src":"14685:7:14"}]}},{"expression":{"id":2738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2733,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"14808:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14817:12:14","memberName":"purchaseTime","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"14808:21:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":2736,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"14832:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14838:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"14832:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14808:39:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2739,"nodeType":"ExpressionStatement","src":"14808:39:14"},{"expression":{"id":2744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2740,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"14861:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14870:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"14861:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":2743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14887:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14861:27:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2745,"nodeType":"ExpressionStatement","src":"14861:27:14"},{"expression":{"id":2750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2746,"name":"existing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"14923:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14932:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"14923:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14942:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"14923:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2751,"nodeType":"ExpressionStatement","src":"14923:23:14"}]}}]},"documentation":{"id":2682,"nodeType":"StructuredDocumentation","src":"13745:134:14","text":" @dev Internal function to update view permission\n @param user User address\n @param contentId Content ID"},"id":2802,"implemented":true,"kind":"function","modifiers":[],"name":"_updateViewPermission","nameLocation":"13893:21:14","nodeType":"FunctionDefinition","parameters":{"id":2687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2684,"mutability":"mutable","name":"user","nameLocation":"13923:4:14","nodeType":"VariableDeclaration","scope":2802,"src":"13915:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2683,"name":"address","nodeType":"ElementaryTypeName","src":"13915:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2686,"mutability":"mutable","name":"contentId","nameLocation":"13937:9:14","nodeType":"VariableDeclaration","scope":2802,"src":"13929:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2685,"name":"uint256","nodeType":"ElementaryTypeName","src":"13929:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13914:33:14"},"returnParameters":{"id":2688,"nodeType":"ParameterList","parameters":[],"src":"13957:0:14"},"scope":3421,"src":"13884:1875:14","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3675],"body":{"id":2867,"nodeType":"Block","src":"16128:894:14","statements":[{"assignments":[2816],"declarations":[{"constant":false,"id":2816,"mutability":"mutable","name":"permission","nameLocation":"16180:10:14","nodeType":"VariableDeclaration","scope":2867,"src":"16138:52:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"},"typeName":{"id":2815,"nodeType":"UserDefinedTypeName","pathNode":{"id":2814,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["16138:19:14","16158:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"16138:34:14"},"referencedDeclaration":3767,"src":"16138:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"visibility":"internal"}],"id":2823,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":2817,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"16193:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16215:15:14","memberName":"userPermissions","nodeType":"MemberAccess","referencedDeclaration":3785,"src":"16193:37:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref))"}},"id":2820,"indexExpression":{"id":2819,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"16231:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16193:43:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref)"}},"id":2822,"indexExpression":{"id":2821,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2807,"src":"16237:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16193:54:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage","typeString":"struct VideoPaymentStorage.ViewPermission storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16138:109:14"},{"condition":{"id":2826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16262:19:14","subExpression":{"expression":{"id":2824,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2816,"src":"16263:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory"}},"id":2825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16274:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"16263:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2830,"nodeType":"IfStatement","src":"16258:62:14","trueBody":{"id":2829,"nodeType":"Block","src":"16283:37:14","statements":[{"expression":{"hexValue":"66616c7365","id":2827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16304:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":2811,"id":2828,"nodeType":"Return","src":"16297:12:14"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2831,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"16390:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16396:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"16390:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2833,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2816,"src":"16420:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory"}},"id":2834,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16431:12:14","memberName":"purchaseTime","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"16420:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"baseExpression":{"expression":{"id":2835,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"16462:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16471:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"16462:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2838,"indexExpression":{"id":2837,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2807,"src":"16486:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16462:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16497:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"16462:47:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16420:89:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16390:119:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2845,"nodeType":"IfStatement","src":"16373:184:14","trueBody":{"id":2844,"nodeType":"Block","src":"16520:37:14","statements":[{"expression":{"hexValue":"66616c7365","id":2842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16541:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":2811,"id":2843,"nodeType":"Return","src":"16534:12:14"}]}},{"assignments":[2847],"declarations":[{"constant":false,"id":2847,"mutability":"mutable","name":"defaultViews","nameLocation":"16635:12:14","nodeType":"VariableDeclaration","scope":2867,"src":"16627:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2846,"name":"uint256","nodeType":"ElementaryTypeName","src":"16627:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2853,"initialValue":{"expression":{"baseExpression":{"expression":{"id":2848,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"16650:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16672:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"16650:36:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2851,"indexExpression":{"id":2850,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2807,"src":"16687:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16650:47:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16711:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"16650:77:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16627:100:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2854,"name":"defaultViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"16742:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16758:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16742:17:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2865,"nodeType":"Block","src":"16887:129:14","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2860,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2816,"src":"16976:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory"}},"id":2861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16987:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"16976:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17004:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16976:29:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2811,"id":2864,"nodeType":"Return","src":"16969:36:14"}]},"id":2866,"nodeType":"IfStatement","src":"16738:278:14","trueBody":{"id":2859,"nodeType":"Block","src":"16761:120:14","statements":[{"expression":{"hexValue":"74727565","id":2857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16866:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":2811,"id":2858,"nodeType":"Return","src":"16859:11:14"}]}}]},"documentation":{"id":2803,"nodeType":"StructuredDocumentation","src":"15833:179:14","text":" @dev Check if user has valid view permission\n @param user User address\n @param contentId Content ID\n @return Whether user has valid permission"},"functionSelector":"caae24b3","id":2868,"implemented":true,"kind":"function","modifiers":[],"name":"hasViewPermission","nameLocation":"16026:17:14","nodeType":"FunctionDefinition","parameters":{"id":2808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2805,"mutability":"mutable","name":"user","nameLocation":"16061:4:14","nodeType":"VariableDeclaration","scope":2868,"src":"16053:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2804,"name":"address","nodeType":"ElementaryTypeName","src":"16053:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2807,"mutability":"mutable","name":"contentId","nameLocation":"16083:9:14","nodeType":"VariableDeclaration","scope":2868,"src":"16075:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2806,"name":"uint256","nodeType":"ElementaryTypeName","src":"16075:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16043:55:14"},"returnParameters":{"id":2811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2810,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2868,"src":"16122:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2809,"name":"bool","nodeType":"ElementaryTypeName","src":"16122:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16121:6:14"},"scope":3421,"src":"16017:1005:14","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3687],"body":{"id":2923,"nodeType":"Block","src":"17366:350:14","statements":[{"assignments":[2886],"declarations":[{"constant":false,"id":2886,"mutability":"mutable","name":"permissions","nameLocation":"17432:11:14","nodeType":"VariableDeclaration","scope":2923,"src":"17376:67:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission[]"},"typeName":{"baseType":{"id":2884,"nodeType":"UserDefinedTypeName","pathNode":{"id":2883,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["17376:19:14","17396:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"17376:34:14"},"referencedDeclaration":3767,"src":"17376:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"id":2885,"nodeType":"ArrayTypeName","src":"17376:36:14","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_storage_$dyn_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission[]"}},"visibility":"internal"}],"id":2894,"initialValue":{"arguments":[{"expression":{"id":2891,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"17504:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17515:6:14","memberName":"length","nodeType":"MemberAccess","src":"17504:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2890,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"17446:40:14","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct VideoPaymentStorage.ViewPermission memory[] memory)"},"typeName":{"baseType":{"id":2888,"nodeType":"UserDefinedTypeName","pathNode":{"id":2887,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["17450:19:14","17470:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"17450:34:14"},"referencedDeclaration":3767,"src":"17450:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"id":2889,"nodeType":"ArrayTypeName","src":"17450:36:14","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_storage_$dyn_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission[]"}}},"id":2893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17446:89:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17376:159:14"},{"body":{"id":2919,"nodeType":"Block","src":"17594:87:14","statements":[{"expression":{"id":2917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2906,"name":"permissions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"17608:11:14","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory[] memory"}},"id":2908,"indexExpression":{"id":2907,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2896,"src":"17620:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17608:14:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":2909,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"17625:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17634:15:14","memberName":"userPermissions","nodeType":"MemberAccess","referencedDeclaration":3785,"src":"17625:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref))"}},"id":2912,"indexExpression":{"id":2911,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"17650:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17625:30:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref)"}},"id":2916,"indexExpression":{"baseExpression":{"id":2913,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"17656:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2915,"indexExpression":{"id":2914,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2896,"src":"17667:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17656:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17625:45:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage","typeString":"struct VideoPaymentStorage.ViewPermission storage ref"}},"src":"17608:62:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory"}},"id":2918,"nodeType":"ExpressionStatement","src":"17608:62:14"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2896,"src":"17566:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2900,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"17570:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17581:6:14","memberName":"length","nodeType":"MemberAccess","src":"17570:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17566:21:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2920,"initializationExpression":{"assignments":[2896],"declarations":[{"constant":false,"id":2896,"mutability":"mutable","name":"i","nameLocation":"17559:1:14","nodeType":"VariableDeclaration","scope":2920,"src":"17551:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2895,"name":"uint256","nodeType":"ElementaryTypeName","src":"17551:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2898,"initialValue":{"hexValue":"30","id":2897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17563:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"17551:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"17589:3:14","subExpression":{"id":2903,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2896,"src":"17589:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2905,"nodeType":"ExpressionStatement","src":"17589:3:14"},"nodeType":"ForStatement","src":"17546:135:14"},{"expression":{"id":2921,"name":"permissions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"17698:11:14","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission memory[] memory"}},"functionReturnParameters":2880,"id":2922,"nodeType":"Return","src":"17691:18:14"}]},"documentation":{"id":2869,"nodeType":"StructuredDocumentation","src":"17028:172:14","text":" @dev Get user permissions for multiple contents\n @param user User address\n @param contentIds Content ID array\n @return Permission array"},"functionSelector":"b303f53f","id":2924,"implemented":true,"kind":"function","modifiers":[],"name":"getUserPermissions","nameLocation":"17214:18:14","nodeType":"FunctionDefinition","parameters":{"id":2875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2871,"mutability":"mutable","name":"user","nameLocation":"17250:4:14","nodeType":"VariableDeclaration","scope":2924,"src":"17242:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2870,"name":"address","nodeType":"ElementaryTypeName","src":"17242:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2874,"mutability":"mutable","name":"contentIds","nameLocation":"17281:10:14","nodeType":"VariableDeclaration","scope":2924,"src":"17264:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2872,"name":"uint256","nodeType":"ElementaryTypeName","src":"17264:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2873,"nodeType":"ArrayTypeName","src":"17264:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17232:65:14"},"returnParameters":{"id":2880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2879,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2924,"src":"17321:43:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission[]"},"typeName":{"baseType":{"id":2877,"nodeType":"UserDefinedTypeName","pathNode":{"id":2876,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["17321:19:14","17341:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"17321:34:14"},"referencedDeclaration":3767,"src":"17321:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"id":2878,"nodeType":"ArrayTypeName","src":"17321:36:14","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_storage_$dyn_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission[]"}},"visibility":"internal"}],"src":"17320:45:14"},"scope":3421,"src":"17205:511:14","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3697],"body":{"id":2942,"nodeType":"Block","src":"18031:65:14","statements":[{"expression":{"baseExpression":{"baseExpression":{"expression":{"id":2935,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"18048:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18057:15:14","memberName":"userPermissions","nodeType":"MemberAccess","referencedDeclaration":3785,"src":"18048:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref))"}},"id":2938,"indexExpression":{"id":2937,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2927,"src":"18073:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18048:30:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref)"}},"id":2940,"indexExpression":{"id":2939,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2929,"src":"18079:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18048:41:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage","typeString":"struct VideoPaymentStorage.ViewPermission storage ref"}},"functionReturnParameters":2934,"id":2941,"nodeType":"Return","src":"18041:48:14"}]},"documentation":{"id":2925,"nodeType":"StructuredDocumentation","src":"17722:153:14","text":" @dev Get detailed permission info\n @param user User address\n @param contentId Content ID\n @return Permission details"},"functionSelector":"8d13660e","id":2943,"implemented":true,"kind":"function","modifiers":[],"name":"getPermissionDetails","nameLocation":"17889:20:14","nodeType":"FunctionDefinition","parameters":{"id":2930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2927,"mutability":"mutable","name":"user","nameLocation":"17927:4:14","nodeType":"VariableDeclaration","scope":2943,"src":"17919:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2926,"name":"address","nodeType":"ElementaryTypeName","src":"17919:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2929,"mutability":"mutable","name":"contentId","nameLocation":"17949:9:14","nodeType":"VariableDeclaration","scope":2943,"src":"17941:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2928,"name":"uint256","nodeType":"ElementaryTypeName","src":"17941:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17909:55:14"},"returnParameters":{"id":2934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2933,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2943,"src":"17988:41:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"},"typeName":{"id":2932,"nodeType":"UserDefinedTypeName","pathNode":{"id":2931,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["17988:19:14","18008:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"17988:34:14"},"referencedDeclaration":3767,"src":"17988:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"visibility":"internal"}],"src":"17987:43:14"},"scope":3421,"src":"17880:216:14","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3706],"body":{"id":3053,"nodeType":"Block","src":"18363:1460:14","statements":[{"assignments":[2959],"declarations":[{"constant":false,"id":2959,"mutability":"mutable","name":"permission","nameLocation":"18416:10:14","nodeType":"VariableDeclaration","scope":3053,"src":"18373:53:14","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"},"typeName":{"id":2958,"nodeType":"UserDefinedTypeName","pathNode":{"id":2957,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["18373:19:14","18393:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"18373:34:14"},"referencedDeclaration":3767,"src":"18373:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"visibility":"internal"}],"id":2966,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":2960,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"18429:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18451:15:14","memberName":"userPermissions","nodeType":"MemberAccess","referencedDeclaration":3785,"src":"18429:37:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref))"}},"id":2963,"indexExpression":{"id":2962,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"18467:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18429:43:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref)"}},"id":2965,"indexExpression":{"id":2964,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"18473:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18429:54:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage","typeString":"struct VideoPaymentStorage.ViewPermission storage ref"}},"nodeType":"VariableDeclarationStatement","src":"18373:110:14"},{"condition":{"id":2969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18498:19:14","subExpression":{"expression":{"id":2967,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"18499:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18510:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"18499:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2974,"nodeType":"IfStatement","src":"18494:76:14","trueBody":{"id":2973,"nodeType":"Block","src":"18519:51:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2970,"name":"NoValidPermission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"18540:17:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18540:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2972,"nodeType":"RevertStatement","src":"18533:26:14"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2975,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"18640:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18646:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"18640:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2977,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"18670:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":2978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18681:12:14","memberName":"purchaseTime","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"18670:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"baseExpression":{"expression":{"id":2979,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"18712:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18721:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"18712:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2982,"indexExpression":{"id":2981,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"18736:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18712:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18747:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"18712:47:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18670:89:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18640:119:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2990,"nodeType":"IfStatement","src":"18623:198:14","trueBody":{"id":2989,"nodeType":"Block","src":"18770:51:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2986,"name":"NoValidPermission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"18791:17:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18791:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2988,"nodeType":"RevertStatement","src":"18784:26:14"}]}},{"assignments":[2992],"declarations":[{"constant":false,"id":2992,"mutability":"mutable","name":"defaultViews","nameLocation":"18922:12:14","nodeType":"VariableDeclaration","scope":3053,"src":"18914:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2991,"name":"uint256","nodeType":"ElementaryTypeName","src":"18914:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2998,"initialValue":{"expression":{"baseExpression":{"expression":{"id":2993,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"18937:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":2994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18959:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"18937:36:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":2996,"indexExpression":{"id":2995,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"18974:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18937:47:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":2997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18998:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"18937:77:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18914:100:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2999,"name":"defaultViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2992,"src":"19029:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19045:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19029:17:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3051,"nodeType":"Block","src":"19240:577:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3011,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"19321:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19332:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"19321:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19350:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19321:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3019,"nodeType":"IfStatement","src":"19317:95:14","trueBody":{"id":3018,"nodeType":"Block","src":"19353:59:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3015,"name":"NoValidPermission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"19378:17:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19378:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3017,"nodeType":"RevertStatement","src":"19371:26:14"}]}},{"expression":{"id":3023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"19458:27:14","subExpression":{"expression":{"id":3020,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"19458:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"19469:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"19458:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3024,"nodeType":"ExpressionStatement","src":"19458:27:14"},{"eventCall":{"arguments":[{"id":3026,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"19518:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3027,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"19524:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3028,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"19535:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19546:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"19535:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3025,"name":"ViewConsumed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"19505:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":3030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19505:56:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3031,"nodeType":"EmitStatement","src":"19500:61:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3032,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"19633:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19644:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"19633:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19662:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19633:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3048,"nodeType":"IfStatement","src":"19629:152:14","trueBody":{"id":3047,"nodeType":"Block","src":"19665:116:14","statements":[{"expression":{"id":3040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3036,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"19683:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"19694:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"19683:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":3039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19704:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"19683:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3041,"nodeType":"ExpressionStatement","src":"19683:26:14"},{"eventCall":{"arguments":[{"id":3043,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"19750:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3044,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"19756:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3042,"name":"PermissionExpired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"19732:17:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19732:34:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3046,"nodeType":"EmitStatement","src":"19727:39:14"}]}},{"expression":{"hexValue":"74727565","id":3049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19802:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":2954,"id":3050,"nodeType":"Return","src":"19795:11:14"}]},"id":3052,"nodeType":"IfStatement","src":"19025:792:14","trueBody":{"id":3010,"nodeType":"Block","src":"19048:186:14","statements":[{"eventCall":{"arguments":[{"id":3003,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"19154:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3004,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"19160:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":3005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19171:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3002,"name":"ViewConsumed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"19141:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19141:32:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3007,"nodeType":"EmitStatement","src":"19136:37:14"},{"expression":{"hexValue":"74727565","id":3008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19219:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":2954,"id":3009,"nodeType":"Return","src":"19212:11:14"}]}}]},"documentation":{"id":2944,"nodeType":"StructuredDocumentation","src":"18102:146:14","text":" @dev Consume one view for user\n @param user User address\n @param contentId Content ID\n @return Success status"},"functionSelector":"05059571","id":3054,"implemented":true,"kind":"function","modifiers":[{"id":2951,"kind":"modifierInvocation","modifierName":{"id":2950,"name":"onlyAdmin","nameLocations":["18338:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"18338:9:14"},"nodeType":"ModifierInvocation","src":"18338:9:14"}],"name":"consumeView","nameLocation":"18262:11:14","nodeType":"FunctionDefinition","parameters":{"id":2949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2946,"mutability":"mutable","name":"user","nameLocation":"18291:4:14","nodeType":"VariableDeclaration","scope":3054,"src":"18283:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2945,"name":"address","nodeType":"ElementaryTypeName","src":"18283:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2948,"mutability":"mutable","name":"contentId","nameLocation":"18313:9:14","nodeType":"VariableDeclaration","scope":3054,"src":"18305:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2947,"name":"uint256","nodeType":"ElementaryTypeName","src":"18305:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18273:55:14"},"returnParameters":{"id":2954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3054,"src":"18357:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2952,"name":"bool","nodeType":"ElementaryTypeName","src":"18357:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18356:6:14"},"scope":3421,"src":"18253:1570:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3718],"body":{"id":3243,"nodeType":"Block","src":"20157:2016:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3069,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3058,"src":"20171:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20177:6:14","memberName":"length","nodeType":"MemberAccess","src":"20171:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3071,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3061,"src":"20187:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20198:6:14","memberName":"length","nodeType":"MemberAccess","src":"20187:17:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20171:33:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3077,"nodeType":"IfStatement","src":"20167:67:14","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3074,"name":"ArrayLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3456,"src":"20213:19:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20213:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3076,"nodeType":"RevertStatement","src":"20206:28:14"}},{"assignments":[3082],"declarations":[{"constant":false,"id":3082,"mutability":"mutable","name":"results","nameLocation":"20259:7:14","nodeType":"VariableDeclaration","scope":3243,"src":"20245:21:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":3080,"name":"bool","nodeType":"ElementaryTypeName","src":"20245:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3081,"nodeType":"ArrayTypeName","src":"20245:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"id":3089,"initialValue":{"arguments":[{"expression":{"id":3086,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3058,"src":"20280:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20286:6:14","memberName":"length","nodeType":"MemberAccess","src":"20280:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"20269:10:14","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bool_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bool[] memory)"},"typeName":{"baseType":{"id":3083,"name":"bool","nodeType":"ElementaryTypeName","src":"20273:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3084,"nodeType":"ArrayTypeName","src":"20273:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}}},"id":3088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20269:24:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"nodeType":"VariableDeclarationStatement","src":"20245:48:14"},{"body":{"id":3239,"nodeType":"Block","src":"20347:1795:14","statements":[{"assignments":[3105],"declarations":[{"constant":false,"id":3105,"mutability":"mutable","name":"permission","nameLocation":"20404:10:14","nodeType":"VariableDeclaration","scope":3239,"src":"20361:53:14","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"},"typeName":{"id":3104,"nodeType":"UserDefinedTypeName","pathNode":{"id":3103,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["20361:19:14","20381:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"20361:34:14"},"referencedDeclaration":3767,"src":"20361:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"visibility":"internal"}],"id":3116,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":3106,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"20417:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20443:15:14","memberName":"userPermissions","nodeType":"MemberAccess","referencedDeclaration":3785,"src":"20417:41:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref))"}},"id":3111,"indexExpression":{"baseExpression":{"id":3108,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3058,"src":"20459:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3110,"indexExpression":{"id":3109,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"20465:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20459:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20417:51:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission storage ref)"}},"id":3115,"indexExpression":{"baseExpression":{"id":3112,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3061,"src":"20469:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3114,"indexExpression":{"id":3113,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"20480:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20469:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20417:66:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage","typeString":"struct VideoPaymentStorage.ViewPermission storage ref"}},"nodeType":"VariableDeclarationStatement","src":"20361:122:14"},{"condition":{"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20502:19:14","subExpression":{"expression":{"id":3117,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"20503:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20514:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"20503:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3128,"nodeType":"IfStatement","src":"20498:102:14","trueBody":{"id":3127,"nodeType":"Block","src":"20523:77:14","statements":[{"expression":{"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3120,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"20541:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":3122,"indexExpression":{"id":3121,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"20549:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20541:10:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":3123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20554:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"20541:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3125,"nodeType":"ExpressionStatement","src":"20541:18:14"},{"id":3126,"nodeType":"Continue","src":"20577:8:14"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3129,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"20682:5:14","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20688:9:14","memberName":"timestamp","nodeType":"MemberAccess","src":"20682:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3131,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"20716:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20727:12:14","memberName":"purchaseTime","nodeType":"MemberAccess","referencedDeclaration":3762,"src":"20716:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"baseExpression":{"expression":{"id":3133,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"20762:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20771:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"20762:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":3138,"indexExpression":{"baseExpression":{"id":3135,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3061,"src":"20786:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3137,"indexExpression":{"id":3136,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"20797:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20786:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20762:38:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":3139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20801:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"20762:51:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20716:97:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20682:131:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3150,"nodeType":"IfStatement","src":"20661:244:14","trueBody":{"id":3149,"nodeType":"Block","src":"20828:77:14","statements":[{"expression":{"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3142,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"20846:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":3144,"indexExpression":{"id":3143,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"20854:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20846:10:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":3145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20859:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"20846:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3147,"nodeType":"ExpressionStatement","src":"20846:18:14"},{"id":3148,"nodeType":"Continue","src":"20882:8:14"}]}},{"assignments":[3152],"declarations":[{"constant":false,"id":3152,"mutability":"mutable","name":"defaultViews","nameLocation":"21014:12:14","nodeType":"VariableDeclaration","scope":3239,"src":"21006:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3151,"name":"uint256","nodeType":"ElementaryTypeName","src":"21006:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3160,"initialValue":{"expression":{"baseExpression":{"expression":{"id":3153,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"21029:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21055:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"21029:40:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":3158,"indexExpression":{"baseExpression":{"id":3155,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3061,"src":"21070:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3157,"indexExpression":{"id":3156,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"21081:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21070:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21029:55:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":3159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21102:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"21029:89:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21006:112:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3161,"name":"defaultViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"21137:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21153:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21137:17:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3237,"nodeType":"Block","src":"21378:754:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3181,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"21467:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21478:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"21467:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21496:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21467:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3193,"nodeType":"IfStatement","src":"21463:125:14","trueBody":{"id":3192,"nodeType":"Block","src":"21499:89:14","statements":[{"expression":{"id":3189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3185,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"21521:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":3187,"indexExpression":{"id":3186,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"21529:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21521:10:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":3188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21534:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"21521:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3190,"nodeType":"ExpressionStatement","src":"21521:18:14"},{"id":3191,"nodeType":"Continue","src":"21561:8:14"}]}},{"expression":{"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"21642:27:14","subExpression":{"expression":{"id":3194,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"21642:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"21653:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"21642:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3198,"nodeType":"ExpressionStatement","src":"21642:27:14"},{"eventCall":{"arguments":[{"baseExpression":{"id":3200,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3058,"src":"21726:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3202,"indexExpression":{"id":3201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"21732:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21726:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":3203,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3061,"src":"21756:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3205,"indexExpression":{"id":3204,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"21767:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21756:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3206,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"21791:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21802:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"21791:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3199,"name":"ViewConsumed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"21692:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":3208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21692:142:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3209,"nodeType":"EmitStatement","src":"21687:147:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3210,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"21914:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21925:14:14","memberName":"remainingViews","nodeType":"MemberAccess","referencedDeclaration":3764,"src":"21914:25:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21943:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21914:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3230,"nodeType":"IfStatement","src":"21910:172:14","trueBody":{"id":3229,"nodeType":"Block","src":"21946:136:14","statements":[{"expression":{"id":3218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3214,"name":"permission","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"21968:10:14","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission storage pointer"}},"id":3216,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"21979:7:14","memberName":"isValid","nodeType":"MemberAccess","referencedDeclaration":3766,"src":"21968:18:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":3217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21989:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"21968:26:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3219,"nodeType":"ExpressionStatement","src":"21968:26:14"},{"eventCall":{"arguments":[{"baseExpression":{"id":3221,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3058,"src":"22039:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3223,"indexExpression":{"id":3222,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"22045:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22039:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":3224,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3061,"src":"22049:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3226,"indexExpression":{"id":3225,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"22060:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22049:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3220,"name":"PermissionExpired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"22021:17:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22021:42:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3228,"nodeType":"EmitStatement","src":"22016:47:14"}]}},{"expression":{"id":3235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3231,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"22100:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":3233,"indexExpression":{"id":3232,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"22108:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22100:10:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"22113:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"22100:17:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3236,"nodeType":"ExpressionStatement","src":"22100:17:14"}]},"id":3238,"nodeType":"IfStatement","src":"21133:999:14","trueBody":{"id":3180,"nodeType":"Block","src":"21156:216:14","statements":[{"eventCall":{"arguments":[{"baseExpression":{"id":3165,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3058,"src":"21270:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3167,"indexExpression":{"id":3166,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"21276:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21270:8:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":3168,"name":"contentIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3061,"src":"21280:10:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3170,"indexExpression":{"id":3169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"21291:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21280:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":3171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21295:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3164,"name":"ViewConsumed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"21257:12:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":3172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21257:40:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3173,"nodeType":"EmitStatement","src":"21252:45:14"},{"expression":{"id":3178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3174,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"21340:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":3176,"indexExpression":{"id":3175,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"21348:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21340:10:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21353:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21340:17:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3179,"nodeType":"ExpressionStatement","src":"21340:17:14"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3094,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"20324:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3095,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3058,"src":"20328:5:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20334:6:14","memberName":"length","nodeType":"MemberAccess","src":"20328:12:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20324:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3240,"initializationExpression":{"assignments":[3091],"declarations":[{"constant":false,"id":3091,"mutability":"mutable","name":"i","nameLocation":"20317:1:14","nodeType":"VariableDeclaration","scope":3240,"src":"20309:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3090,"name":"uint256","nodeType":"ElementaryTypeName","src":"20309:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3093,"initialValue":{"hexValue":"30","id":3092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20321:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20309:13:14"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20342:3:14","subExpression":{"id":3098,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"20342:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3100,"nodeType":"ExpressionStatement","src":"20342:3:14"},"nodeType":"ForStatement","src":"20304:1838:14"},{"expression":{"id":3241,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3082,"src":"22159:7:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"functionReturnParameters":3068,"id":3242,"nodeType":"Return","src":"22152:14:14"}]},"documentation":{"id":3055,"nodeType":"StructuredDocumentation","src":"19829:179:14","text":" @dev Batch consume views for multiple users\n @param users User address array\n @param contentIds Content ID array\n @return Success status array"},"functionSelector":"529e2b32","id":3244,"implemented":true,"kind":"function","modifiers":[{"id":3064,"kind":"modifierInvocation","modifierName":{"id":3063,"name":"onlyAdmin","nameLocations":["20123:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1702,"src":"20123:9:14"},"nodeType":"ModifierInvocation","src":"20123:9:14"}],"name":"batchConsumeView","nameLocation":"20022:16:14","nodeType":"FunctionDefinition","parameters":{"id":3062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3058,"mutability":"mutable","name":"users","nameLocation":"20065:5:14","nodeType":"VariableDeclaration","scope":3244,"src":"20048:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3056,"name":"address","nodeType":"ElementaryTypeName","src":"20048:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3057,"nodeType":"ArrayTypeName","src":"20048:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3061,"mutability":"mutable","name":"contentIds","nameLocation":"20097:10:14","nodeType":"VariableDeclaration","scope":3244,"src":"20080:27:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3059,"name":"uint256","nodeType":"ElementaryTypeName","src":"20080:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3060,"nodeType":"ArrayTypeName","src":"20080:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20038:75:14"},"returnParameters":{"id":3068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3244,"src":"20142:13:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":3065,"name":"bool","nodeType":"ElementaryTypeName","src":"20142:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3066,"nodeType":"ArrayTypeName","src":"20142:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"20141:15:14"},"scope":3421,"src":"20013:2160:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3732],"body":{"id":3291,"nodeType":"Block","src":"22537:696:14","statements":[{"assignments":[3257],"declarations":[{"constant":false,"id":3257,"mutability":"mutable","name":"config","nameLocation":"22589:6:14","nodeType":"VariableDeclaration","scope":3291,"src":"22547:48:14","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage_ptr","typeString":"struct VideoPaymentStorage.ContentConfig"},"typeName":{"id":3256,"nodeType":"UserDefinedTypeName","pathNode":{"id":3255,"name":"VideoPaymentStorage.ContentConfig","nameLocations":["22547:19:14","22567:13:14"],"nodeType":"IdentifierPath","referencedDeclaration":3760,"src":"22547:33:14"},"referencedDeclaration":3760,"src":"22547:33:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage_ptr","typeString":"struct VideoPaymentStorage.ContentConfig"}},"visibility":"internal"}],"id":3262,"initialValue":{"baseExpression":{"expression":{"id":3258,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"22598:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22620:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"22598:36:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":3261,"indexExpression":{"id":3260,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"22635:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22598:47:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"22547:98:14"},{"assignments":[3267,3270],"declarations":[{"constant":false,"id":3267,"mutability":"mutable","name":"supportedTokens","nameLocation":"22736:15:14","nodeType":"VariableDeclaration","scope":3291,"src":"22719:32:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3265,"name":"address","nodeType":"ElementaryTypeName","src":"22719:7:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3266,"nodeType":"ArrayTypeName","src":"22719:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3270,"mutability":"mutable","name":"prices","nameLocation":"22782:6:14","nodeType":"VariableDeclaration","scope":3291,"src":"22765:23:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3268,"name":"uint256","nodeType":"ElementaryTypeName","src":"22765:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3269,"nodeType":"ArrayTypeName","src":"22765:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":3274,"initialValue":{"arguments":[{"id":3272,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3247,"src":"22831:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3271,"name":"_getSupportedTokensForContent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3388,"src":"22801:29:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) view returns (address[] memory,uint256[] memory)"}},"id":3273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22801:40:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"22705:136:14"},{"expression":{"arguments":[{"expression":{"id":3277,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3257,"src":"22941:6:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage_ptr","typeString":"struct VideoPaymentStorage.ContentConfig storage pointer"}},"id":3278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22948:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"22941:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3279,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3257,"src":"22996:6:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage_ptr","typeString":"struct VideoPaymentStorage.ContentConfig storage pointer"}},"id":3280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23003:12:14","memberName":"viewDuration","nodeType":"MemberAccess","referencedDeclaration":3757,"src":"22996:19:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3281,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3257,"src":"23043:6:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage_ptr","typeString":"struct VideoPaymentStorage.ContentConfig storage pointer"}},"id":3282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23050:8:14","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":3759,"src":"23043:15:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":3283,"name":"supportedTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3267,"src":"23093:15:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":3284,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3270,"src":"23139:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3285,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3257,"src":"23183:6:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage_ptr","typeString":"struct VideoPaymentStorage.ContentConfig storage pointer"}},"id":3286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23190:16:14","memberName":"defaultViewCount","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"23183:23:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23210:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23183:28:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3275,"name":"IVideoPayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"22871:13:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVideoPayment_$3741_$","typeString":"type(contract IVideoPayment)"}},"id":3276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22885:19:14","memberName":"ContentPurchaseInfo","nodeType":"MemberAccess","referencedDeclaration":3440,"src":"22871:33:14","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ContentPurchaseInfo_$3440_storage_ptr_$","typeString":"type(struct IVideoPayment.ContentPurchaseInfo storage pointer)"}},"id":3289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22923:16:14","22982:12:14","23033:8:14","23076:15:14","23126:11:14","23163:18:14"],"names":["defaultViewCount","viewDuration","isActive","supportedTokens","tokenPrices","isUnlimitedViewing"],"nodeType":"FunctionCall","src":"22871:355:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ContentPurchaseInfo_$3440_memory_ptr","typeString":"struct IVideoPayment.ContentPurchaseInfo memory"}},"functionReturnParameters":3252,"id":3290,"nodeType":"Return","src":"22852:374:14"}]},"documentation":{"id":3245,"nodeType":"StructuredDocumentation","src":"22237:165:14","text":" @dev Get content purchase information\n @param contentId Content ID\n @return Purchase information including supported tokens and prices"},"functionSelector":"b8e8f98e","id":3292,"implemented":true,"kind":"function","modifiers":[],"name":"getContentPurchaseInfo","nameLocation":"22416:22:14","nodeType":"FunctionDefinition","parameters":{"id":3248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3247,"mutability":"mutable","name":"contentId","nameLocation":"22456:9:14","nodeType":"VariableDeclaration","scope":3292,"src":"22448:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3246,"name":"uint256","nodeType":"ElementaryTypeName","src":"22448:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22438:33:14"},"returnParameters":{"id":3252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3251,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3292,"src":"22495:40:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContentPurchaseInfo_$3440_memory_ptr","typeString":"struct IVideoPayment.ContentPurchaseInfo"},"typeName":{"id":3250,"nodeType":"UserDefinedTypeName","pathNode":{"id":3249,"name":"IVideoPayment.ContentPurchaseInfo","nameLocations":["22495:13:14","22509:19:14"],"nodeType":"IdentifierPath","referencedDeclaration":3440,"src":"22495:33:14"},"referencedDeclaration":3440,"src":"22495:33:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentPurchaseInfo_$3440_storage_ptr","typeString":"struct IVideoPayment.ContentPurchaseInfo"}},"visibility":"internal"}],"src":"22494:42:14"},"scope":3421,"src":"22407:826:14","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3387,"nodeType":"Block","src":"23667:1143:14","statements":[{"assignments":[3305],"declarations":[{"constant":false,"id":3305,"mutability":"mutable","name":"count","nameLocation":"23719:5:14","nodeType":"VariableDeclaration","scope":3387,"src":"23711:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3304,"name":"uint256","nodeType":"ElementaryTypeName","src":"23711:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3307,"initialValue":{"hexValue":"30","id":3306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23727:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23711:17:14"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":3308,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"23786:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23795:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"23786:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":3314,"indexExpression":{"arguments":[{"hexValue":"30","id":3312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23819:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23811:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3310,"name":"address","nodeType":"ElementaryTypeName","src":"23811:7:14","typeDescriptions":{}}},"id":3313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23811:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23786:36:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":3315,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"23838:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3316,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23847:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"23838:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":3318,"indexExpression":{"id":3317,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"23862:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23838:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":3319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23873:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"23838:46:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23887:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23838:50:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"23786:102:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3327,"nodeType":"IfStatement","src":"23769:162:14","trueBody":{"id":3326,"nodeType":"Block","src":"23899:32:14","statements":[{"expression":{"id":3324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"23913:7:14","subExpression":{"id":3323,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3305,"src":"23913:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3325,"nodeType":"ExpressionStatement","src":"23913:7:14"}]}},{"expression":{"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3328,"name":"supportedTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"24207:15:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3332,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3305,"src":"24239:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"24225:13:14","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":3329,"name":"address","nodeType":"ElementaryTypeName","src":"24229:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3330,"nodeType":"ArrayTypeName","src":"24229:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":3333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24225:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"24207:38:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3335,"nodeType":"ExpressionStatement","src":"24207:38:14"},{"expression":{"id":3342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3336,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3302,"src":"24255:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3340,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3305,"src":"24278:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3339,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"24264:13:14","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":3337,"name":"uint256","nodeType":"ElementaryTypeName","src":"24268:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3338,"nodeType":"ArrayTypeName","src":"24268:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":3341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24264:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"24255:29:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3343,"nodeType":"ExpressionStatement","src":"24255:29:14"},{"assignments":[3345],"declarations":[{"constant":false,"id":3345,"mutability":"mutable","name":"index","nameLocation":"24303:5:14","nodeType":"VariableDeclaration","scope":3387,"src":"24295:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3344,"name":"uint256","nodeType":"ElementaryTypeName","src":"24295:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3347,"initialValue":{"hexValue":"30","id":3346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24311:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"24295:17:14"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":3348,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"24395:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24404:15:14","memberName":"supportedTokens","nodeType":"MemberAccess","referencedDeclaration":3789,"src":"24395:24:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":3354,"indexExpression":{"arguments":[{"hexValue":"30","id":3352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24428:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24420:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3350,"name":"address","nodeType":"ElementaryTypeName","src":"24420:7:14","typeDescriptions":{}}},"id":3353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24420:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24395:36:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":3355,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"24447:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24456:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"24447:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":3358,"indexExpression":{"id":3357,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"24471:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24447:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":3359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24482:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"24447:46:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24496:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24447:50:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24395:102:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3386,"nodeType":"IfStatement","src":"24378:287:14","trueBody":{"id":3385,"nodeType":"Block","src":"24508:157:14","statements":[{"expression":{"id":3370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3363,"name":"supportedTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"24522:15:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3365,"indexExpression":{"id":3364,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"24538:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24522:22:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":3368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24555:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24547:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3366,"name":"address","nodeType":"ElementaryTypeName","src":"24547:7:14","typeDescriptions":{}}},"id":3369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24547:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24522:35:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3371,"nodeType":"ExpressionStatement","src":"24522:35:14"},{"expression":{"id":3380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3372,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3302,"src":"24571:6:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3374,"indexExpression":{"id":3373,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"24578:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24571:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"expression":{"id":3375,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"24587:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3376,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24596:14:14","memberName":"contentConfigs","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"24587:23:14","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig storage ref)"}},"id":3378,"indexExpression":{"id":3377,"name":"contentId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"24611:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24587:34:14","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage","typeString":"struct VideoPaymentStorage.ContentConfig storage ref"}},"id":3379,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24622:11:14","memberName":"nativePrice","nodeType":"MemberAccess","referencedDeclaration":3753,"src":"24587:46:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24571:62:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3381,"nodeType":"ExpressionStatement","src":"24571:62:14"},{"expression":{"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"24647:7:14","subExpression":{"id":3382,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"24647:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3384,"nodeType":"ExpressionStatement","src":"24647:7:14"}]}}]},"documentation":{"id":3293,"nodeType":"StructuredDocumentation","src":"23239:241:14","text":" @dev Internal function to get supported tokens and prices for content\n @param contentId Content ID\n @return supportedTokens Array of supported token addresses\n @return prices Array of corresponding prices"},"id":3388,"implemented":true,"kind":"function","modifiers":[],"name":"_getSupportedTokensForContent","nameLocation":"23494:29:14","nodeType":"FunctionDefinition","parameters":{"id":3296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3295,"mutability":"mutable","name":"contentId","nameLocation":"23541:9:14","nodeType":"VariableDeclaration","scope":3388,"src":"23533:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3294,"name":"uint256","nodeType":"ElementaryTypeName","src":"23533:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23523:33:14"},"returnParameters":{"id":3303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3299,"mutability":"mutable","name":"supportedTokens","nameLocation":"23621:15:14","nodeType":"VariableDeclaration","scope":3388,"src":"23604:32:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3297,"name":"address","nodeType":"ElementaryTypeName","src":"23604:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3298,"nodeType":"ArrayTypeName","src":"23604:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3302,"mutability":"mutable","name":"prices","nameLocation":"23655:6:14","nodeType":"VariableDeclaration","scope":3388,"src":"23638:23:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3300,"name":"uint256","nodeType":"ElementaryTypeName","src":"23638:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3301,"nodeType":"ArrayTypeName","src":"23638:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"23603:59:14"},"scope":3421,"src":"23485:1325:14","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[3721],"body":{"id":3403,"nodeType":"Block","src":"24957:62:14","statements":[{"expression":{"id":3398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3394,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"24967:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3396,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"24976:6:14","memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":3791,"src":"24967:15:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24985:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"24967:22:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3399,"nodeType":"ExpressionStatement","src":"24967:22:14"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3400,"name":"Paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"25004:6:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25004:8:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3402,"nodeType":"EmitStatement","src":"24999:13:14"}]},"documentation":{"id":3389,"nodeType":"StructuredDocumentation","src":"24878:38:14","text":" @dev Pause contract"},"functionSelector":"8456cb59","id":3404,"implemented":true,"kind":"function","modifiers":[{"id":3392,"kind":"modifierInvocation","modifierName":{"id":3391,"name":"onlyOwner","nameLocations":["24947:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1688,"src":"24947:9:14"},"nodeType":"ModifierInvocation","src":"24947:9:14"}],"name":"pause","nameLocation":"24930:5:14","nodeType":"FunctionDefinition","parameters":{"id":3390,"nodeType":"ParameterList","parameters":[],"src":"24935:2:14"},"returnParameters":{"id":3393,"nodeType":"ParameterList","parameters":[],"src":"24957:0:14"},"scope":3421,"src":"24921:98:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3724],"body":{"id":3419,"nodeType":"Block","src":"25108:65:14","statements":[{"expression":{"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3410,"name":"_storage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1675,"src":"25118:8:14","typeDescriptions":{"typeIdentifier":"t_struct$_VideoPaymentStorageStruct_$3798_storage","typeString":"struct VideoPaymentStorage.VideoPaymentStorageStruct storage ref"}},"id":3412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25127:6:14","memberName":"paused","nodeType":"MemberAccess","referencedDeclaration":3791,"src":"25118:15:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":3413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25136:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"25118:23:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3415,"nodeType":"ExpressionStatement","src":"25118:23:14"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3416,"name":"Unpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3553,"src":"25156:8:14","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25156:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3418,"nodeType":"EmitStatement","src":"25151:15:14"}]},"documentation":{"id":3405,"nodeType":"StructuredDocumentation","src":"25025:40:14","text":" @dev Unpause contract"},"functionSelector":"3f4ba83a","id":3420,"implemented":true,"kind":"function","modifiers":[{"id":3408,"kind":"modifierInvocation","modifierName":{"id":3407,"name":"onlyOwner","nameLocations":["25098:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":1688,"src":"25098:9:14"},"nodeType":"ModifierInvocation","src":"25098:9:14"}],"name":"unpause","nameLocation":"25079:7:14","nodeType":"FunctionDefinition","parameters":{"id":3406,"nodeType":"ParameterList","parameters":[],"src":"25086:2:14"},"returnParameters":{"id":3409,"nodeType":"ParameterList","parameters":[],"src":"25108:0:14"},"scope":3421,"src":"25070:103:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3422,"src":"658:24517:14","usedErrors":[16,19,294,299,480,629,642,1241,1504,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462],"usedEvents":[24,586,3476,3487,3497,3505,3511,3521,3525,3529,3533,3541,3545,3549,3551,3553]}],"src":"32:25144:14"},"id":14},"contracts/interfaces/IVideoPayment.sol":{"ast":{"absolutePath":"contracts/interfaces/IVideoPayment.sol","exportedSymbols":{"IVideoPayment":[3741],"VideoPaymentStorage":[3799]},"id":3742,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3423,"literals":["solidity","^","0.8",".19"],"nodeType":"PragmaDirective","src":"32:24:15"},{"absolutePath":"contracts/libraries/VideoPaymentStorage.sol","file":"../libraries/VideoPaymentStorage.sol","id":3424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3742,"sourceUnit":3800,"src":"58:46:15","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVideoPayment","contractDependencies":[],"contractKind":"interface","documentation":{"id":3425,"nodeType":"StructuredDocumentation","src":"106:75:15","text":" @title IVideoPayment\n @dev Interface for VideoPayment contract"},"fullyImplemented":false,"id":3741,"linearizedBaseContracts":[3741],"name":"IVideoPayment","nameLocation":"192:13:15","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IVideoPayment.ContentPurchaseInfo","id":3440,"members":[{"constant":false,"id":3427,"mutability":"mutable","name":"defaultViewCount","nameLocation":"303:16:15","nodeType":"VariableDeclaration","scope":3440,"src":"295:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3426,"name":"uint256","nodeType":"ElementaryTypeName","src":"295:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3429,"mutability":"mutable","name":"viewDuration","nameLocation":"385:12:15","nodeType":"VariableDeclaration","scope":3440,"src":"377:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3428,"name":"uint256","nodeType":"ElementaryTypeName","src":"377:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3431,"mutability":"mutable","name":"isActive","nameLocation":"449:8:15","nodeType":"VariableDeclaration","scope":3440,"src":"444:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3430,"name":"bool","nodeType":"ElementaryTypeName","src":"444:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3434,"mutability":"mutable","name":"supportedTokens","nameLocation":"511:15:15","nodeType":"VariableDeclaration","scope":3440,"src":"501:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3432,"name":"address","nodeType":"ElementaryTypeName","src":"501:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3433,"nodeType":"ArrayTypeName","src":"501:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3437,"mutability":"mutable","name":"tokenPrices","nameLocation":"594:11:15","nodeType":"VariableDeclaration","scope":3440,"src":"584:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3435,"name":"uint256","nodeType":"ElementaryTypeName","src":"584:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3436,"nodeType":"ArrayTypeName","src":"584:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3439,"mutability":"mutable","name":"isUnlimitedViewing","nameLocation":"650:18:15","nodeType":"VariableDeclaration","scope":3440,"src":"645:23:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3438,"name":"bool","nodeType":"ElementaryTypeName","src":"645:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContentPurchaseInfo","nameLocation":"265:19:15","nodeType":"StructDefinition","scope":3741,"src":"258:457:15","visibility":"public"},{"errorSelector":"30cd7471","id":3442,"name":"NotOwner","nameLocation":"747:8:15","nodeType":"ErrorDefinition","parameters":{"id":3441,"nodeType":"ParameterList","parameters":[],"src":"755:2:15"},"src":"741:17:15"},{"errorSelector":"7bfa4b9f","id":3444,"name":"NotAdmin","nameLocation":"769:8:15","nodeType":"ErrorDefinition","parameters":{"id":3443,"nodeType":"ParameterList","parameters":[],"src":"777:2:15"},"src":"763:17:15"},{"errorSelector":"ab35696f","id":3446,"name":"ContractPaused","nameLocation":"791:14:15","nodeType":"ErrorDefinition","parameters":{"id":3445,"nodeType":"ParameterList","parameters":[],"src":"805:2:15"},"src":"785:23:15"},{"errorSelector":"ab4142cf","id":3448,"name":"InvalidContent","nameLocation":"819:14:15","nodeType":"ErrorDefinition","parameters":{"id":3447,"nodeType":"ParameterList","parameters":[],"src":"833:2:15"},"src":"813:23:15"},{"errorSelector":"6a172882","id":3450,"name":"UnsupportedToken","nameLocation":"847:16:15","nodeType":"ErrorDefinition","parameters":{"id":3449,"nodeType":"ParameterList","parameters":[],"src":"863:2:15"},"src":"841:25:15"},{"errorSelector":"cd1c8867","id":3452,"name":"InsufficientPayment","nameLocation":"877:19:15","nodeType":"ErrorDefinition","parameters":{"id":3451,"nodeType":"ParameterList","parameters":[],"src":"896:2:15"},"src":"871:28:15"},{"errorSelector":"fcd7a1b5","id":3454,"name":"NoValidPermission","nameLocation":"910:17:15","nodeType":"ErrorDefinition","parameters":{"id":3453,"nodeType":"ParameterList","parameters":[],"src":"927:2:15"},"src":"904:26:15"},{"errorSelector":"a24a13a6","id":3456,"name":"ArrayLengthMismatch","nameLocation":"941:19:15","nodeType":"ErrorDefinition","parameters":{"id":3455,"nodeType":"ParameterList","parameters":[],"src":"960:2:15"},"src":"935:28:15"},{"errorSelector":"d92e233d","id":3458,"name":"ZeroAddress","nameLocation":"974:11:15","nodeType":"ErrorDefinition","parameters":{"id":3457,"nodeType":"ParameterList","parameters":[],"src":"985:2:15"},"src":"968:20:15"},{"errorSelector":"2c5211c6","id":3460,"name":"InvalidAmount","nameLocation":"999:13:15","nodeType":"ErrorDefinition","parameters":{"id":3459,"nodeType":"ParameterList","parameters":[],"src":"1012:2:15"},"src":"993:22:15"},{"errorSelector":"3367b554","id":3462,"name":"AlreadyPurchased","nameLocation":"1026:16:15","nodeType":"ErrorDefinition","parameters":{"id":3461,"nodeType":"ParameterList","parameters":[],"src":"1042:2:15"},"src":"1020:25:15"},{"anonymous":false,"eventSelector":"180fe4b156a592a405cdd866f58883063db683348215e97cf864d6bf9679261c","id":3476,"name":"ContentPurchased","nameLocation":"1090:16:15","nodeType":"EventDefinition","parameters":{"id":3475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3464,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1132:4:15","nodeType":"VariableDeclaration","scope":3476,"src":"1116:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3463,"name":"address","nodeType":"ElementaryTypeName","src":"1116:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3466,"indexed":true,"mutability":"mutable","name":"contentId","nameLocation":"1162:9:15","nodeType":"VariableDeclaration","scope":3476,"src":"1146:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3465,"name":"uint256","nodeType":"ElementaryTypeName","src":"1146:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3468,"indexed":false,"mutability":"mutable","name":"paymentToken","nameLocation":"1189:12:15","nodeType":"VariableDeclaration","scope":3476,"src":"1181:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3467,"name":"address","nodeType":"ElementaryTypeName","src":"1181:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3470,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1219:6:15","nodeType":"VariableDeclaration","scope":3476,"src":"1211:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3469,"name":"uint256","nodeType":"ElementaryTypeName","src":"1211:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3472,"indexed":false,"mutability":"mutable","name":"viewCount","nameLocation":"1243:9:15","nodeType":"VariableDeclaration","scope":3476,"src":"1235:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3471,"name":"uint256","nodeType":"ElementaryTypeName","src":"1235:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3474,"indexed":false,"mutability":"mutable","name":"validUntil","nameLocation":"1270:10:15","nodeType":"VariableDeclaration","scope":3476,"src":"1262:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3473,"name":"uint256","nodeType":"ElementaryTypeName","src":"1262:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1106:180:15"},"src":"1084:203:15"},{"anonymous":false,"eventSelector":"2be07a645f06bfa8b189b4f0aba9bf2109d098d03cbede0449641495bba5d53d","id":3487,"name":"BatchPurchased","nameLocation":"1299:14:15","nodeType":"EventDefinition","parameters":{"id":3486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3478,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1339:4:15","nodeType":"VariableDeclaration","scope":3487,"src":"1323:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3477,"name":"address","nodeType":"ElementaryTypeName","src":"1323:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3481,"indexed":false,"mutability":"mutable","name":"contentIds","nameLocation":"1363:10:15","nodeType":"VariableDeclaration","scope":3487,"src":"1353:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3479,"name":"uint256","nodeType":"ElementaryTypeName","src":"1353:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3480,"nodeType":"ArrayTypeName","src":"1353:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3483,"indexed":false,"mutability":"mutable","name":"paymentToken","nameLocation":"1391:12:15","nodeType":"VariableDeclaration","scope":3487,"src":"1383:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3482,"name":"address","nodeType":"ElementaryTypeName","src":"1383:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3485,"indexed":false,"mutability":"mutable","name":"totalAmount","nameLocation":"1421:11:15","nodeType":"VariableDeclaration","scope":3487,"src":"1413:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3484,"name":"uint256","nodeType":"ElementaryTypeName","src":"1413:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1313:125:15"},"src":"1293:146:15"},{"anonymous":false,"eventSelector":"d0de3e759b6d8ae4ab8dfd56f0869b691034bf2f14b896155287e5cd61d66a70","id":3497,"name":"NFTPurchased","nameLocation":"1451:12:15","nodeType":"EventDefinition","parameters":{"id":3496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3489,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1489:4:15","nodeType":"VariableDeclaration","scope":3497,"src":"1473:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3488,"name":"address","nodeType":"ElementaryTypeName","src":"1473:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3491,"indexed":true,"mutability":"mutable","name":"contentId","nameLocation":"1519:9:15","nodeType":"VariableDeclaration","scope":3497,"src":"1503:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3490,"name":"uint256","nodeType":"ElementaryTypeName","src":"1503:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3493,"indexed":false,"mutability":"mutable","name":"nftContract","nameLocation":"1546:11:15","nodeType":"VariableDeclaration","scope":3497,"src":"1538:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3492,"name":"address","nodeType":"ElementaryTypeName","src":"1538:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3495,"indexed":false,"mutability":"mutable","name":"tokenId","nameLocation":"1575:7:15","nodeType":"VariableDeclaration","scope":3497,"src":"1567:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3494,"name":"uint256","nodeType":"ElementaryTypeName","src":"1567:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1463:125:15"},"src":"1445:144:15"},{"anonymous":false,"eventSelector":"2ccc6c74b339e9d58b89aa6bb58d0519712aeff106f7981d466f54572cb88b42","id":3505,"name":"ViewConsumed","nameLocation":"1636:12:15","nodeType":"EventDefinition","parameters":{"id":3504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3499,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1674:4:15","nodeType":"VariableDeclaration","scope":3505,"src":"1658:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3498,"name":"address","nodeType":"ElementaryTypeName","src":"1658:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3501,"indexed":true,"mutability":"mutable","name":"contentId","nameLocation":"1704:9:15","nodeType":"VariableDeclaration","scope":3505,"src":"1688:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3500,"name":"uint256","nodeType":"ElementaryTypeName","src":"1688:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3503,"indexed":false,"mutability":"mutable","name":"remainingViews","nameLocation":"1731:14:15","nodeType":"VariableDeclaration","scope":3505,"src":"1723:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3502,"name":"uint256","nodeType":"ElementaryTypeName","src":"1723:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1648:103:15"},"src":"1630:122:15"},{"anonymous":false,"eventSelector":"294e395c96ee31e4373f6b284b107e5341ffa80f2c53e582bc3cfb1f9efe500e","id":3511,"name":"PermissionExpired","nameLocation":"1764:17:15","nodeType":"EventDefinition","parameters":{"id":3510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3507,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1798:4:15","nodeType":"VariableDeclaration","scope":3511,"src":"1782:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3506,"name":"address","nodeType":"ElementaryTypeName","src":"1782:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3509,"indexed":true,"mutability":"mutable","name":"contentId","nameLocation":"1820:9:15","nodeType":"VariableDeclaration","scope":3511,"src":"1804:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3508,"name":"uint256","nodeType":"ElementaryTypeName","src":"1804:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1781:49:15"},"src":"1758:73:15"},{"anonymous":false,"eventSelector":"b76abe3c068fccae7ac0f9377f48f7261dcf952179a37060c5de877a493e67b7","id":3521,"name":"ViewCountAdded","nameLocation":"1843:14:15","nodeType":"EventDefinition","parameters":{"id":3520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3513,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1883:4:15","nodeType":"VariableDeclaration","scope":3521,"src":"1867:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3512,"name":"address","nodeType":"ElementaryTypeName","src":"1867:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3515,"indexed":true,"mutability":"mutable","name":"contentId","nameLocation":"1913:9:15","nodeType":"VariableDeclaration","scope":3521,"src":"1897:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3514,"name":"uint256","nodeType":"ElementaryTypeName","src":"1897:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3517,"indexed":false,"mutability":"mutable","name":"addedCount","nameLocation":"1940:10:15","nodeType":"VariableDeclaration","scope":3521,"src":"1932:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3516,"name":"uint256","nodeType":"ElementaryTypeName","src":"1932:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3519,"indexed":false,"mutability":"mutable","name":"totalRemaining","nameLocation":"1968:14:15","nodeType":"VariableDeclaration","scope":3521,"src":"1960:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1960:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1857:131:15"},"src":"1837:152:15"},{"anonymous":false,"eventSelector":"44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339","id":3525,"name":"AdminAdded","nameLocation":"2036:10:15","nodeType":"EventDefinition","parameters":{"id":3524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3523,"indexed":true,"mutability":"mutable","name":"admin","nameLocation":"2063:5:15","nodeType":"VariableDeclaration","scope":3525,"src":"2047:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3522,"name":"address","nodeType":"ElementaryTypeName","src":"2047:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2046:23:15"},"src":"2030:40:15"},{"anonymous":false,"eventSelector":"a3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f","id":3529,"name":"AdminRemoved","nameLocation":"2081:12:15","nodeType":"EventDefinition","parameters":{"id":3528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3527,"indexed":true,"mutability":"mutable","name":"admin","nameLocation":"2110:5:15","nodeType":"VariableDeclaration","scope":3529,"src":"2094:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3526,"name":"address","nodeType":"ElementaryTypeName","src":"2094:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2093:23:15"},"src":"2075:42:15"},{"anonymous":false,"eventSelector":"a7c3f5f04f0c05ad82fcdf81039da5a01bf41ce2769b7b347afa43bb65e44266","id":3533,"name":"ContentConfigUpdated","nameLocation":"2128:20:15","nodeType":"EventDefinition","parameters":{"id":3532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3531,"indexed":true,"mutability":"mutable","name":"contentId","nameLocation":"2165:9:15","nodeType":"VariableDeclaration","scope":3533,"src":"2149:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3530,"name":"uint256","nodeType":"ElementaryTypeName","src":"2149:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2148:27:15"},"src":"2122:54:15"},{"anonymous":false,"eventSelector":"376716bd86293ff8b34061b9af3cac5116f15e0f2cbf689d822b6d6d7b1eeca9","id":3541,"name":"TokenPriceUpdated","nameLocation":"2187:17:15","nodeType":"EventDefinition","parameters":{"id":3540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"indexed":true,"mutability":"mutable","name":"contentId","nameLocation":"2230:9:15","nodeType":"VariableDeclaration","scope":3541,"src":"2214:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3534,"name":"uint256","nodeType":"ElementaryTypeName","src":"2214:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3537,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2265:5:15","nodeType":"VariableDeclaration","scope":3541,"src":"2249:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3536,"name":"address","nodeType":"ElementaryTypeName","src":"2249:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3539,"indexed":false,"mutability":"mutable","name":"price","nameLocation":"2288:5:15","nodeType":"VariableDeclaration","scope":3541,"src":"2280:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3538,"name":"uint256","nodeType":"ElementaryTypeName","src":"2280:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2204:95:15"},"src":"2181:119:15"},{"anonymous":false,"eventSelector":"d1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d7","id":3545,"name":"SupportedTokenAdded","nameLocation":"2311:19:15","nodeType":"EventDefinition","parameters":{"id":3544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3543,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2347:5:15","nodeType":"VariableDeclaration","scope":3545,"src":"2331:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3542,"name":"address","nodeType":"ElementaryTypeName","src":"2331:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2330:23:15"},"src":"2305:49:15"},{"anonymous":false,"eventSelector":"bea12876694c4055c71f74308f752b9027cf3d554194000a366abddfc239a306","id":3549,"name":"SupportedTokenRemoved","nameLocation":"2365:21:15","nodeType":"EventDefinition","parameters":{"id":3548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3547,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2403:5:15","nodeType":"VariableDeclaration","scope":3549,"src":"2387:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3546,"name":"address","nodeType":"ElementaryTypeName","src":"2387:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2386:23:15"},"src":"2359:51:15"},{"anonymous":false,"eventSelector":"9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752","id":3551,"name":"Paused","nameLocation":"2421:6:15","nodeType":"EventDefinition","parameters":{"id":3550,"nodeType":"ParameterList","parameters":[],"src":"2427:2:15"},"src":"2415:15:15"},{"anonymous":false,"eventSelector":"a45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933","id":3553,"name":"Unpaused","nameLocation":"2441:8:15","nodeType":"EventDefinition","parameters":{"id":3552,"nodeType":"ParameterList","parameters":[],"src":"2449:2:15"},"src":"2435:17:15"},{"functionSelector":"70480275","id":3558,"implemented":false,"kind":"function","modifiers":[],"name":"addAdmin","nameLocation":"2501:8:15","nodeType":"FunctionDefinition","parameters":{"id":3556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3555,"mutability":"mutable","name":"admin","nameLocation":"2518:5:15","nodeType":"VariableDeclaration","scope":3558,"src":"2510:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3554,"name":"address","nodeType":"ElementaryTypeName","src":"2510:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2509:15:15"},"returnParameters":{"id":3557,"nodeType":"ParameterList","parameters":[],"src":"2533:0:15"},"scope":3741,"src":"2492:42:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1785f53c","id":3563,"implemented":false,"kind":"function","modifiers":[],"name":"removeAdmin","nameLocation":"2548:11:15","nodeType":"FunctionDefinition","parameters":{"id":3561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3560,"mutability":"mutable","name":"admin","nameLocation":"2568:5:15","nodeType":"VariableDeclaration","scope":3563,"src":"2560:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3559,"name":"address","nodeType":"ElementaryTypeName","src":"2560:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2559:15:15"},"returnParameters":{"id":3562,"nodeType":"ParameterList","parameters":[],"src":"2583:0:15"},"scope":3741,"src":"2539:45:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b1b105fe","id":3576,"implemented":false,"kind":"function","modifiers":[],"name":"setContentConfig","nameLocation":"2635:16:15","nodeType":"FunctionDefinition","parameters":{"id":3574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3565,"mutability":"mutable","name":"contentId","nameLocation":"2669:9:15","nodeType":"VariableDeclaration","scope":3576,"src":"2661:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3564,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3567,"mutability":"mutable","name":"nativePrice","nameLocation":"2696:11:15","nodeType":"VariableDeclaration","scope":3576,"src":"2688:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3566,"name":"uint256","nodeType":"ElementaryTypeName","src":"2688:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3569,"mutability":"mutable","name":"defaultViewCount","nameLocation":"2725:16:15","nodeType":"VariableDeclaration","scope":3576,"src":"2717:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3568,"name":"uint256","nodeType":"ElementaryTypeName","src":"2717:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3571,"mutability":"mutable","name":"viewDuration","nameLocation":"2759:12:15","nodeType":"VariableDeclaration","scope":3576,"src":"2751:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3570,"name":"uint256","nodeType":"ElementaryTypeName","src":"2751:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3573,"mutability":"mutable","name":"isActive","nameLocation":"2786:8:15","nodeType":"VariableDeclaration","scope":3576,"src":"2781:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3572,"name":"bool","nodeType":"ElementaryTypeName","src":"2781:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2651:149:15"},"returnParameters":{"id":3575,"nodeType":"ParameterList","parameters":[],"src":"2809:0:15"},"scope":3741,"src":"2626:184:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"09b952be","id":3594,"implemented":false,"kind":"function","modifiers":[],"name":"batchSetContentConfig","nameLocation":"2824:21:15","nodeType":"FunctionDefinition","parameters":{"id":3592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3579,"mutability":"mutable","name":"contentIds","nameLocation":"2872:10:15","nodeType":"VariableDeclaration","scope":3594,"src":"2855:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3577,"name":"uint256","nodeType":"ElementaryTypeName","src":"2855:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3578,"nodeType":"ArrayTypeName","src":"2855:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3582,"mutability":"mutable","name":"nativePrices","nameLocation":"2909:12:15","nodeType":"VariableDeclaration","scope":3594,"src":"2892:29:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3580,"name":"uint256","nodeType":"ElementaryTypeName","src":"2892:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3581,"nodeType":"ArrayTypeName","src":"2892:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3585,"mutability":"mutable","name":"defaultViewCounts","nameLocation":"2948:17:15","nodeType":"VariableDeclaration","scope":3594,"src":"2931:34:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3583,"name":"uint256","nodeType":"ElementaryTypeName","src":"2931:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3584,"nodeType":"ArrayTypeName","src":"2931:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3588,"mutability":"mutable","name":"viewDurations","nameLocation":"2992:13:15","nodeType":"VariableDeclaration","scope":3594,"src":"2975:30:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3586,"name":"uint256","nodeType":"ElementaryTypeName","src":"2975:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3587,"nodeType":"ArrayTypeName","src":"2975:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3591,"mutability":"mutable","name":"isActiveArray","nameLocation":"3029:13:15","nodeType":"VariableDeclaration","scope":3594,"src":"3015:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":3589,"name":"bool","nodeType":"ElementaryTypeName","src":"3015:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3590,"nodeType":"ArrayTypeName","src":"3015:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"2845:203:15"},"returnParameters":{"id":3593,"nodeType":"ParameterList","parameters":[],"src":"3057:0:15"},"scope":3741,"src":"2815:243:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"40033b3d","id":3601,"implemented":false,"kind":"function","modifiers":[],"name":"isContentActive","nameLocation":"3072:15:15","nodeType":"FunctionDefinition","parameters":{"id":3597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3596,"mutability":"mutable","name":"contentId","nameLocation":"3096:9:15","nodeType":"VariableDeclaration","scope":3601,"src":"3088:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3595,"name":"uint256","nodeType":"ElementaryTypeName","src":"3088:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3087:19:15"},"returnParameters":{"id":3600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3601,"src":"3130:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3598,"name":"bool","nodeType":"ElementaryTypeName","src":"3130:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3129:6:15"},"scope":3741,"src":"3063:73:15","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3428cebb","id":3610,"implemented":false,"kind":"function","modifiers":[],"name":"updateTokenPrice","nameLocation":"3185:16:15","nodeType":"FunctionDefinition","parameters":{"id":3608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3603,"mutability":"mutable","name":"contentId","nameLocation":"3219:9:15","nodeType":"VariableDeclaration","scope":3610,"src":"3211:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3602,"name":"uint256","nodeType":"ElementaryTypeName","src":"3211:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3605,"mutability":"mutable","name":"token","nameLocation":"3246:5:15","nodeType":"VariableDeclaration","scope":3610,"src":"3238:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3604,"name":"address","nodeType":"ElementaryTypeName","src":"3238:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3607,"mutability":"mutable","name":"price","nameLocation":"3269:5:15","nodeType":"VariableDeclaration","scope":3610,"src":"3261:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3606,"name":"uint256","nodeType":"ElementaryTypeName","src":"3261:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3201:79:15"},"returnParameters":{"id":3609,"nodeType":"ParameterList","parameters":[],"src":"3289:0:15"},"scope":3741,"src":"3176:114:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8f0ff11b","id":3621,"implemented":false,"kind":"function","modifiers":[],"name":"batchUpdateTokenPrice","nameLocation":"3304:21:15","nodeType":"FunctionDefinition","parameters":{"id":3619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3613,"mutability":"mutable","name":"contentIds","nameLocation":"3352:10:15","nodeType":"VariableDeclaration","scope":3621,"src":"3335:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3611,"name":"uint256","nodeType":"ElementaryTypeName","src":"3335:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3612,"nodeType":"ArrayTypeName","src":"3335:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3615,"mutability":"mutable","name":"token","nameLocation":"3380:5:15","nodeType":"VariableDeclaration","scope":3621,"src":"3372:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3614,"name":"address","nodeType":"ElementaryTypeName","src":"3372:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3618,"mutability":"mutable","name":"prices","nameLocation":"3412:6:15","nodeType":"VariableDeclaration","scope":3621,"src":"3395:23:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3616,"name":"uint256","nodeType":"ElementaryTypeName","src":"3395:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3617,"nodeType":"ArrayTypeName","src":"3395:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3325:99:15"},"returnParameters":{"id":3620,"nodeType":"ParameterList","parameters":[],"src":"3433:0:15"},"scope":3741,"src":"3295:139:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6d69fcaf","id":3626,"implemented":false,"kind":"function","modifiers":[],"name":"addSupportedToken","nameLocation":"3491:17:15","nodeType":"FunctionDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3623,"mutability":"mutable","name":"token","nameLocation":"3517:5:15","nodeType":"VariableDeclaration","scope":3626,"src":"3509:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3622,"name":"address","nodeType":"ElementaryTypeName","src":"3509:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3508:15:15"},"returnParameters":{"id":3625,"nodeType":"ParameterList","parameters":[],"src":"3532:0:15"},"scope":3741,"src":"3482:51:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"76319190","id":3631,"implemented":false,"kind":"function","modifiers":[],"name":"removeSupportedToken","nameLocation":"3547:20:15","nodeType":"FunctionDefinition","parameters":{"id":3629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3628,"mutability":"mutable","name":"token","nameLocation":"3576:5:15","nodeType":"VariableDeclaration","scope":3631,"src":"3568:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3627,"name":"address","nodeType":"ElementaryTypeName","src":"3568:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3567:15:15"},"returnParameters":{"id":3630,"nodeType":"ParameterList","parameters":[],"src":"3591:0:15"},"scope":3741,"src":"3538:54:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"240028e8","id":3638,"implemented":false,"kind":"function","modifiers":[],"name":"isSupportedToken","nameLocation":"3606:16:15","nodeType":"FunctionDefinition","parameters":{"id":3634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3633,"mutability":"mutable","name":"token","nameLocation":"3631:5:15","nodeType":"VariableDeclaration","scope":3638,"src":"3623:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3632,"name":"address","nodeType":"ElementaryTypeName","src":"3623:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3622:15:15"},"returnParameters":{"id":3637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3638,"src":"3661:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3635,"name":"bool","nodeType":"ElementaryTypeName","src":"3661:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3660:6:15"},"scope":3741,"src":"3597:70:15","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b6f1d140","id":3647,"implemented":false,"kind":"function","modifiers":[],"name":"purchaseContent","nameLocation":"3708:15:15","nodeType":"FunctionDefinition","parameters":{"id":3645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3640,"mutability":"mutable","name":"contentId","nameLocation":"3741:9:15","nodeType":"VariableDeclaration","scope":3647,"src":"3733:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3639,"name":"uint256","nodeType":"ElementaryTypeName","src":"3733:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3642,"mutability":"mutable","name":"paymentToken","nameLocation":"3768:12:15","nodeType":"VariableDeclaration","scope":3647,"src":"3760:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3641,"name":"address","nodeType":"ElementaryTypeName","src":"3760:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3644,"mutability":"mutable","name":"amount","nameLocation":"3798:6:15","nodeType":"VariableDeclaration","scope":3647,"src":"3790:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3643,"name":"uint256","nodeType":"ElementaryTypeName","src":"3790:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3723:87:15"},"returnParameters":{"id":3646,"nodeType":"ParameterList","parameters":[],"src":"3827:0:15"},"scope":3741,"src":"3699:129:15","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"99ea24fe","id":3657,"implemented":false,"kind":"function","modifiers":[],"name":"batchPurchase","nameLocation":"3842:13:15","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3650,"mutability":"mutable","name":"contentIds","nameLocation":"3882:10:15","nodeType":"VariableDeclaration","scope":3657,"src":"3865:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3648,"name":"uint256","nodeType":"ElementaryTypeName","src":"3865:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3649,"nodeType":"ArrayTypeName","src":"3865:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3652,"mutability":"mutable","name":"paymentToken","nameLocation":"3910:12:15","nodeType":"VariableDeclaration","scope":3657,"src":"3902:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3651,"name":"address","nodeType":"ElementaryTypeName","src":"3902:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3654,"mutability":"mutable","name":"totalAmount","nameLocation":"3940:11:15","nodeType":"VariableDeclaration","scope":3657,"src":"3932:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3653,"name":"uint256","nodeType":"ElementaryTypeName","src":"3932:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3855:102:15"},"returnParameters":{"id":3656,"nodeType":"ParameterList","parameters":[],"src":"3974:0:15"},"scope":3741,"src":"3833:142:15","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"86778641","id":3666,"implemented":false,"kind":"function","modifiers":[],"name":"purchaseWithNFT","nameLocation":"3989:15:15","nodeType":"FunctionDefinition","parameters":{"id":3664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3659,"mutability":"mutable","name":"contentId","nameLocation":"4022:9:15","nodeType":"VariableDeclaration","scope":3666,"src":"4014:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3658,"name":"uint256","nodeType":"ElementaryTypeName","src":"4014:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3661,"mutability":"mutable","name":"nftContract","nameLocation":"4049:11:15","nodeType":"VariableDeclaration","scope":3666,"src":"4041:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3660,"name":"address","nodeType":"ElementaryTypeName","src":"4041:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3663,"mutability":"mutable","name":"tokenId","nameLocation":"4078:7:15","nodeType":"VariableDeclaration","scope":3666,"src":"4070:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3662,"name":"uint256","nodeType":"ElementaryTypeName","src":"4070:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4004:87:15"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[],"src":"4100:0:15"},"scope":3741,"src":"3980:121:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"caae24b3","id":3675,"implemented":false,"kind":"function","modifiers":[],"name":"hasViewPermission","nameLocation":"4157:17:15","nodeType":"FunctionDefinition","parameters":{"id":3671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3668,"mutability":"mutable","name":"user","nameLocation":"4192:4:15","nodeType":"VariableDeclaration","scope":3675,"src":"4184:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3667,"name":"address","nodeType":"ElementaryTypeName","src":"4184:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3670,"mutability":"mutable","name":"contentId","nameLocation":"4214:9:15","nodeType":"VariableDeclaration","scope":3675,"src":"4206:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3669,"name":"uint256","nodeType":"ElementaryTypeName","src":"4206:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4174:55:15"},"returnParameters":{"id":3674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3673,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3675,"src":"4253:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3672,"name":"bool","nodeType":"ElementaryTypeName","src":"4253:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4252:6:15"},"scope":3741,"src":"4148:111:15","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b303f53f","id":3687,"implemented":false,"kind":"function","modifiers":[],"name":"getUserPermissions","nameLocation":"4273:18:15","nodeType":"FunctionDefinition","parameters":{"id":3681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3677,"mutability":"mutable","name":"user","nameLocation":"4309:4:15","nodeType":"VariableDeclaration","scope":3687,"src":"4301:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3676,"name":"address","nodeType":"ElementaryTypeName","src":"4301:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3680,"mutability":"mutable","name":"contentIds","nameLocation":"4340:10:15","nodeType":"VariableDeclaration","scope":3687,"src":"4323:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3678,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3679,"nodeType":"ArrayTypeName","src":"4323:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4291:65:15"},"returnParameters":{"id":3686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3687,"src":"4380:43:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission[]"},"typeName":{"baseType":{"id":3683,"nodeType":"UserDefinedTypeName","pathNode":{"id":3682,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["4380:19:15","4400:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"4380:34:15"},"referencedDeclaration":3767,"src":"4380:34:15","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"id":3684,"nodeType":"ArrayTypeName","src":"4380:36:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ViewPermission_$3767_storage_$dyn_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission[]"}},"visibility":"internal"}],"src":"4379:45:15"},"scope":3741,"src":"4264:161:15","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8d13660e","id":3697,"implemented":false,"kind":"function","modifiers":[],"name":"getPermissionDetails","nameLocation":"4439:20:15","nodeType":"FunctionDefinition","parameters":{"id":3692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3689,"mutability":"mutable","name":"user","nameLocation":"4477:4:15","nodeType":"VariableDeclaration","scope":3697,"src":"4469:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3688,"name":"address","nodeType":"ElementaryTypeName","src":"4469:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3691,"mutability":"mutable","name":"contentId","nameLocation":"4499:9:15","nodeType":"VariableDeclaration","scope":3697,"src":"4491:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3690,"name":"uint256","nodeType":"ElementaryTypeName","src":"4491:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4459:55:15"},"returnParameters":{"id":3696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3697,"src":"4538:41:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_memory_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"},"typeName":{"id":3694,"nodeType":"UserDefinedTypeName","pathNode":{"id":3693,"name":"VideoPaymentStorage.ViewPermission","nameLocations":["4538:19:15","4558:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"4538:34:15"},"referencedDeclaration":3767,"src":"4538:34:15","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}},"visibility":"internal"}],"src":"4537:43:15"},"scope":3741,"src":"4430:151:15","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"05059571","id":3706,"implemented":false,"kind":"function","modifiers":[],"name":"consumeView","nameLocation":"4595:11:15","nodeType":"FunctionDefinition","parameters":{"id":3702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3699,"mutability":"mutable","name":"user","nameLocation":"4624:4:15","nodeType":"VariableDeclaration","scope":3706,"src":"4616:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3698,"name":"address","nodeType":"ElementaryTypeName","src":"4616:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3701,"mutability":"mutable","name":"contentId","nameLocation":"4646:9:15","nodeType":"VariableDeclaration","scope":3706,"src":"4638:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3700,"name":"uint256","nodeType":"ElementaryTypeName","src":"4638:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4606:55:15"},"returnParameters":{"id":3705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3706,"src":"4680:4:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3703,"name":"bool","nodeType":"ElementaryTypeName","src":"4680:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4679:6:15"},"scope":3741,"src":"4586:100:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"529e2b32","id":3718,"implemented":false,"kind":"function","modifiers":[],"name":"batchConsumeView","nameLocation":"4700:16:15","nodeType":"FunctionDefinition","parameters":{"id":3713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3709,"mutability":"mutable","name":"users","nameLocation":"4743:5:15","nodeType":"VariableDeclaration","scope":3718,"src":"4726:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3707,"name":"address","nodeType":"ElementaryTypeName","src":"4726:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3708,"nodeType":"ArrayTypeName","src":"4726:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3712,"mutability":"mutable","name":"contentIds","nameLocation":"4775:10:15","nodeType":"VariableDeclaration","scope":3718,"src":"4758:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3710,"name":"uint256","nodeType":"ElementaryTypeName","src":"4758:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3711,"nodeType":"ArrayTypeName","src":"4758:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4716:75:15"},"returnParameters":{"id":3717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3716,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3718,"src":"4810:13:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":3714,"name":"bool","nodeType":"ElementaryTypeName","src":"4810:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3715,"nodeType":"ArrayTypeName","src":"4810:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"4809:15:15"},"scope":3741,"src":"4691:134:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8456cb59","id":3721,"implemented":false,"kind":"function","modifiers":[],"name":"pause","nameLocation":"4875:5:15","nodeType":"FunctionDefinition","parameters":{"id":3719,"nodeType":"ParameterList","parameters":[],"src":"4880:2:15"},"returnParameters":{"id":3720,"nodeType":"ParameterList","parameters":[],"src":"4891:0:15"},"scope":3741,"src":"4866:26:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3f4ba83a","id":3724,"implemented":false,"kind":"function","modifiers":[],"name":"unpause","nameLocation":"4906:7:15","nodeType":"FunctionDefinition","parameters":{"id":3722,"nodeType":"ParameterList","parameters":[],"src":"4913:2:15"},"returnParameters":{"id":3723,"nodeType":"ParameterList","parameters":[],"src":"4924:0:15"},"scope":3741,"src":"4897:28:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b8e8f98e","id":3732,"implemented":false,"kind":"function","modifiers":[],"name":"getContentPurchaseInfo","nameLocation":"4971:22:15","nodeType":"FunctionDefinition","parameters":{"id":3727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3726,"mutability":"mutable","name":"contentId","nameLocation":"5011:9:15","nodeType":"VariableDeclaration","scope":3732,"src":"5003:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3725,"name":"uint256","nodeType":"ElementaryTypeName","src":"5003:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4993:33:15"},"returnParameters":{"id":3731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3730,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3732,"src":"5050:26:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContentPurchaseInfo_$3440_memory_ptr","typeString":"struct IVideoPayment.ContentPurchaseInfo"},"typeName":{"id":3729,"nodeType":"UserDefinedTypeName","pathNode":{"id":3728,"name":"ContentPurchaseInfo","nameLocations":["5050:19:15"],"nodeType":"IdentifierPath","referencedDeclaration":3440,"src":"5050:19:15"},"referencedDeclaration":3440,"src":"5050:19:15","typeDescriptions":{"typeIdentifier":"t_struct$_ContentPurchaseInfo_$3440_storage_ptr","typeString":"struct IVideoPayment.ContentPurchaseInfo"}},"visibility":"internal"}],"src":"5049:28:15"},"scope":3741,"src":"4962:116:15","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"54fd4d50","id":3737,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"5118:7:15","nodeType":"FunctionDefinition","parameters":{"id":3733,"nodeType":"ParameterList","parameters":[],"src":"5125:2:15"},"returnParameters":{"id":3736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3737,"src":"5151:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3734,"name":"uint256","nodeType":"ElementaryTypeName","src":"5151:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5150:9:15"},"scope":3741,"src":"5109:51:15","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8fd3ab80","id":3740,"implemented":false,"kind":"function","modifiers":[],"name":"migrate","nameLocation":"5174:7:15","nodeType":"FunctionDefinition","parameters":{"id":3738,"nodeType":"ParameterList","parameters":[],"src":"5181:2:15"},"returnParameters":{"id":3739,"nodeType":"ParameterList","parameters":[],"src":"5192:0:15"},"scope":3741,"src":"5165:28:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3742,"src":"182:5013:15","usedErrors":[3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462],"usedEvents":[3476,3487,3497,3505,3511,3521,3525,3529,3533,3541,3545,3549,3551,3553]}],"src":"32:5164:15"},"id":15},"contracts/libraries/VideoPaymentStorage.sol":{"ast":{"absolutePath":"contracts/libraries/VideoPaymentStorage.sol","exportedSymbols":{"VideoPaymentStorage":[3799]},"id":3800,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3743,"literals":["solidity","^","0.8",".19"],"nodeType":"PragmaDirective","src":"32:24:16"},{"abstract":false,"baseContracts":[],"canonicalName":"VideoPaymentStorage","contractDependencies":[],"contractKind":"library","documentation":{"id":3744,"nodeType":"StructuredDocumentation","src":"58:118:16","text":" @title VideoPaymentStorage\n @dev Storage layout for VideoPayment contract to ensure upgrade compatibility"},"fullyImplemented":true,"id":3799,"linearizedBaseContracts":[3799],"name":"VideoPaymentStorage","nameLocation":"185:19:16","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":3747,"mutability":"constant","name":"STORAGE_VERSION","nameLocation":"284:15:16","nodeType":"VariableDeclaration","scope":3799,"src":"267:36:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3745,"name":"uint256","nodeType":"ElementaryTypeName","src":"267:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":3746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"302:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"canonicalName":"VideoPaymentStorage.ContentConfig","id":3760,"members":[{"constant":false,"id":3751,"mutability":"mutable","name":"tokenPrices","nameLocation":"369:11:16","nodeType":"VariableDeclaration","scope":3760,"src":"341:39:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3750,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3748,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"341:27:16","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3749,"name":"uint256","nodeType":"ElementaryTypeName","src":"360:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":3753,"mutability":"mutable","name":"nativePrice","nameLocation":"420:11:16","nodeType":"VariableDeclaration","scope":3760,"src":"412:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3752,"name":"uint256","nodeType":"ElementaryTypeName","src":"412:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3755,"mutability":"mutable","name":"defaultViewCount","nameLocation":"470:16:16","nodeType":"VariableDeclaration","scope":3760,"src":"462:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3754,"name":"uint256","nodeType":"ElementaryTypeName","src":"462:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3757,"mutability":"mutable","name":"viewDuration","nameLocation":"541:12:16","nodeType":"VariableDeclaration","scope":3760,"src":"533:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3756,"name":"uint256","nodeType":"ElementaryTypeName","src":"533:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3759,"mutability":"mutable","name":"isActive","nameLocation":"605:8:16","nodeType":"VariableDeclaration","scope":3760,"src":"600:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3758,"name":"bool","nodeType":"ElementaryTypeName","src":"600:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContentConfig","nameLocation":"317:13:16","nodeType":"StructDefinition","scope":3799,"src":"310:344:16","visibility":"public"},{"canonicalName":"VideoPaymentStorage.ViewPermission","id":3767,"members":[{"constant":false,"id":3762,"mutability":"mutable","name":"purchaseTime","nameLocation":"700:12:16","nodeType":"VariableDeclaration","scope":3767,"src":"692:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3761,"name":"uint256","nodeType":"ElementaryTypeName","src":"692:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3764,"mutability":"mutable","name":"remainingViews","nameLocation":"752:14:16","nodeType":"VariableDeclaration","scope":3767,"src":"744:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3763,"name":"uint256","nodeType":"ElementaryTypeName","src":"744:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3766,"mutability":"mutable","name":"isValid","nameLocation":"805:7:16","nodeType":"VariableDeclaration","scope":3767,"src":"800:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3765,"name":"bool","nodeType":"ElementaryTypeName","src":"800:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ViewPermission","nameLocation":"667:14:16","nodeType":"StructDefinition","scope":3799,"src":"660:190:16","visibility":"public"},{"canonicalName":"VideoPaymentStorage.VideoPaymentStorageStruct","id":3798,"members":[{"constant":false,"id":3769,"mutability":"mutable","name":"owner","nameLocation":"945:5:16","nodeType":"VariableDeclaration","scope":3798,"src":"937:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3768,"name":"address","nodeType":"ElementaryTypeName","src":"937:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3773,"mutability":"mutable","name":"isAdmin","nameLocation":"985:7:16","nodeType":"VariableDeclaration","scope":3798,"src":"960:32:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":3772,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3770,"name":"address","nodeType":"ElementaryTypeName","src":"968:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"960:24:16","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3771,"name":"bool","nodeType":"ElementaryTypeName","src":"979:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":3778,"mutability":"mutable","name":"contentConfigs","nameLocation":"1066:14:16","nodeType":"VariableDeclaration","scope":3798,"src":"1032:48:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig)"},"typeName":{"id":3777,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3774,"name":"uint256","nodeType":"ElementaryTypeName","src":"1040:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1032:33:16","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ContentConfig_$3760_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3776,"nodeType":"UserDefinedTypeName","pathNode":{"id":3775,"name":"ContentConfig","nameLocations":["1051:13:16"],"nodeType":"IdentifierPath","referencedDeclaration":3760,"src":"1051:13:16"},"referencedDeclaration":3760,"src":"1051:13:16","typeDescriptions":{"typeIdentifier":"t_struct$_ContentConfig_$3760_storage_ptr","typeString":"struct VideoPaymentStorage.ContentConfig"}}},"visibility":"internal"},{"constant":false,"id":3785,"mutability":"mutable","name":"userPermissions","nameLocation":"1173:15:16","nodeType":"VariableDeclaration","scope":3798,"src":"1118:70:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission))"},"typeName":{"id":3784,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3779,"name":"address","nodeType":"ElementaryTypeName","src":"1126:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1118:54:16","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$_$","typeString":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3783,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3780,"name":"uint256","nodeType":"ElementaryTypeName","src":"1145:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1137:34:16","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ViewPermission_$3767_storage_$","typeString":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3782,"nodeType":"UserDefinedTypeName","pathNode":{"id":3781,"name":"ViewPermission","nameLocations":["1156:14:16"],"nodeType":"IdentifierPath","referencedDeclaration":3767,"src":"1156:14:16"},"referencedDeclaration":3767,"src":"1156:14:16","typeDescriptions":{"typeIdentifier":"t_struct$_ViewPermission_$3767_storage_ptr","typeString":"struct VideoPaymentStorage.ViewPermission"}}}},"visibility":"internal"},{"constant":false,"id":3789,"mutability":"mutable","name":"supportedTokens","nameLocation":"1259:15:16","nodeType":"VariableDeclaration","scope":3798,"src":"1234:40:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":3788,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3786,"name":"address","nodeType":"ElementaryTypeName","src":"1242:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1234:24:16","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3787,"name":"bool","nodeType":"ElementaryTypeName","src":"1253:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":3791,"mutability":"mutable","name":"paused","nameLocation":"1316:6:16","nodeType":"VariableDeclaration","scope":3798,"src":"1311:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3790,"name":"bool","nodeType":"ElementaryTypeName","src":"1311:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3793,"mutability":"mutable","name":"version","nameLocation":"1368:7:16","nodeType":"VariableDeclaration","scope":3798,"src":"1360:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3792,"name":"uint256","nodeType":"ElementaryTypeName","src":"1360:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3797,"mutability":"mutable","name":"__gap","nameLocation":"1451:5:16","nodeType":"VariableDeclaration","scope":3798,"src":"1439:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"},"typeName":{"baseType":{"id":3794,"name":"uint256","nodeType":"ElementaryTypeName","src":"1439:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3796,"length":{"hexValue":"3530","id":3795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1447:2:16","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"1439:11:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"internal"}],"name":"VideoPaymentStorageStruct","nameLocation":"863:25:16","nodeType":"StructDefinition","scope":3799,"src":"856:607:16","visibility":"public"}],"scope":3800,"src":"177:1288:16","usedErrors":[],"usedEvents":[]}],"src":"32:1434:16"},"id":16}},"contracts":{"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"Initializable":{"abi":[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"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] ```solidity contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\"MyToken\", \"MTK\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\"MyToken\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```","errors":{"InvalidInitialization()":[{"details":"The contract is already initialized."}],"NotInitializing()":[{"details":"The contract is not initializing."}]},"events":{"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"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] ```solidity contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\\\"MyToken\\\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\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 * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\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 Storage of the initializable contract.\\n     *\\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n     * when using with upgradeable contracts.\\n     *\\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n     */\\n    struct InitializableStorage {\\n        /**\\n         * @dev Indicates that the contract has been initialized.\\n         */\\n        uint64 _initialized;\\n        /**\\n         * @dev Indicates that the contract is in the process of being initialized.\\n         */\\n        bool _initializing;\\n    }\\n\\n    // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n    /**\\n     * @dev The contract is already initialized.\\n     */\\n    error InvalidInitialization();\\n\\n    /**\\n     * @dev The contract is not initializing.\\n     */\\n    error NotInitializing();\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint64 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 in the context of a constructor an `initializer` may be invoked any\\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n     * production.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        // Cache values to avoid duplicated sloads\\n        bool isTopLevelCall = !$._initializing;\\n        uint64 initialized = $._initialized;\\n\\n        // Allowed calls:\\n        // - initialSetup: the contract is not in the initializing state and no previous version was\\n        //                 initialized\\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\\n        //                 current contract is just being deployed\\n        bool initialSetup = initialized == 0 && isTopLevelCall;\\n        bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n        if (!initialSetup && !construction) {\\n            revert InvalidInitialization();\\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 2**64 - 1 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint64 version) {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing || $._initialized >= version) {\\n            revert InvalidInitialization();\\n        }\\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        _checkInitializing();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n     */\\n    function _checkInitializing() internal view virtual {\\n        if (!_isInitializing()) {\\n            revert NotInitializing();\\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        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing) {\\n            revert InvalidInitialization();\\n        }\\n        if ($._initialized != type(uint64).max) {\\n            $._initialized = type(uint64).max;\\n            emit Initialized(type(uint64).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint64) {\\n        return _getInitializableStorage()._initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _getInitializableStorage()._initializing;\\n    }\\n\\n    /**\\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\\n     *\\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\\n     */\\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\\n        return INITIALIZABLE_STORAGE;\\n    }\\n\\n    /**\\n     * @dev Returns a pointer to the storage namespace.\\n     */\\n    // solhint-disable-next-line var-name-mixedcase\\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n        bytes32 slot = _initializableStorageSlot();\\n        assembly {\\n            $.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol":{"UUPSUpgradeable":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"UUPSUnauthorizedCallContext","type":"error"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"name":"UUPSUnsupportedProxiableUUID","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.","errors":{"AddressEmptyCode(address)":[{"details":"There's no code at `target` (it is not a contract)."}],"ERC1967InvalidImplementation(address)":[{"details":"The `implementation` of the proxy is invalid."}],"ERC1967NonPayable()":[{"details":"An upgrade function sees `msg.value > 0` that may be lost."}],"FailedCall()":[{"details":"A call to an address target failed. The target may have reverted."}],"InvalidInitialization()":[{"details":"The contract is already initialized."}],"NotInitializing()":[{"details":"The contract is not initializing."}],"UUPSUnauthorizedCallContext()":[{"details":"The call is from an unauthorized context."}],"UUPSUnsupportedProxiableUUID(bytes32)":[{"details":"The storage `slot` is unsupported as a UUID."}]},"events":{"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"stateVariables":{"UPGRADE_INTERFACE_VERSION":{"details":"The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)` and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called, while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string. If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must be the empty byte string if no function should be called, making it impossible to invoke the `receive` function during an upgrade."},"__self":{"custom:oz-upgrades-unsafe-allow":"state-variable-immutable"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","proxiableUUID()":"52d1902d","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"UPGRADE_INTERFACE_VERSION\":{\"details\":\"The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)` and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called, while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string. If the getter returns `\\\"5.0.0\\\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must be the empty byte string if no function should be called, making it impossible to invoke the `receive` function during an upgrade.\"},\"__self\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":\"UUPSUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\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 * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\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 Storage of the initializable contract.\\n     *\\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n     * when using with upgradeable contracts.\\n     *\\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n     */\\n    struct InitializableStorage {\\n        /**\\n         * @dev Indicates that the contract has been initialized.\\n         */\\n        uint64 _initialized;\\n        /**\\n         * @dev Indicates that the contract is in the process of being initialized.\\n         */\\n        bool _initializing;\\n    }\\n\\n    // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n    /**\\n     * @dev The contract is already initialized.\\n     */\\n    error InvalidInitialization();\\n\\n    /**\\n     * @dev The contract is not initializing.\\n     */\\n    error NotInitializing();\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint64 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 in the context of a constructor an `initializer` may be invoked any\\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n     * production.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        // Cache values to avoid duplicated sloads\\n        bool isTopLevelCall = !$._initializing;\\n        uint64 initialized = $._initialized;\\n\\n        // Allowed calls:\\n        // - initialSetup: the contract is not in the initializing state and no previous version was\\n        //                 initialized\\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\\n        //                 current contract is just being deployed\\n        bool initialSetup = initialized == 0 && isTopLevelCall;\\n        bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n        if (!initialSetup && !construction) {\\n            revert InvalidInitialization();\\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 2**64 - 1 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint64 version) {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing || $._initialized >= version) {\\n            revert InvalidInitialization();\\n        }\\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        _checkInitializing();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n     */\\n    function _checkInitializing() internal view virtual {\\n        if (!_isInitializing()) {\\n            revert NotInitializing();\\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        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing) {\\n            revert InvalidInitialization();\\n        }\\n        if ($._initialized != type(uint64).max) {\\n            $._initialized = type(uint64).max;\\n            emit Initialized(type(uint64).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint64) {\\n        return _getInitializableStorage()._initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _getInitializableStorage()._initializing;\\n    }\\n\\n    /**\\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\\n     *\\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\\n     */\\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\\n        return INITIALIZABLE_STORAGE;\\n    }\\n\\n    /**\\n     * @dev Returns a pointer to the storage namespace.\\n     */\\n    // solhint-disable-next-line var-name-mixedcase\\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n        bytes32 slot = _initializableStorageSlot();\\n        assembly {\\n            $.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.22;\\n\\nimport {IERC1822Proxiable} from \\\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\\\";\\nimport {ERC1967Utils} from \\\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\\\";\\nimport {Initializable} from \\\"./Initializable.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address private immutable __self = address(this);\\n\\n    /**\\n     * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\\n     * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\\n     * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\\n     * If the getter returns `\\\"5.0.0\\\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\\n     * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\\n     * during an upgrade.\\n     */\\n    string public constant UPGRADE_INTERFACE_VERSION = \\\"5.0.0\\\";\\n\\n    /**\\n     * @dev The call is from an unauthorized context.\\n     */\\n    error UUPSUnauthorizedCallContext();\\n\\n    /**\\n     * @dev The storage `slot` is unsupported as a UUID.\\n     */\\n    error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n    /**\\n     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n     * a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case\\n     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n     * function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n     * fail.\\n     */\\n    modifier onlyProxy() {\\n        _checkProxy();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n     * callable on the implementing contract but not through proxies.\\n     */\\n    modifier notDelegated() {\\n        _checkNotDelegated();\\n        _;\\n    }\\n\\n    function __UUPSUpgradeable_init() internal onlyInitializing {\\n    }\\n\\n    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the\\n     * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n     */\\n    function proxiableUUID() external view virtual notDelegated returns (bytes32) {\\n        return ERC1967Utils.IMPLEMENTATION_SLOT;\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n     * encoded in `data`.\\n     *\\n     * Calls {_authorizeUpgrade}.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\\n        _authorizeUpgrade(newImplementation);\\n        _upgradeToAndCallUUPS(newImplementation, data);\\n    }\\n\\n    /**\\n     * @dev Reverts if the execution is not performed via delegatecall or the execution\\n     * context is not of a proxy with an ERC-1967 compliant implementation pointing to self.\\n     */\\n    function _checkProxy() internal view virtual {\\n        if (\\n            address(this) == __self || // Must be called through delegatecall\\n            ERC1967Utils.getImplementation() != __self // Must be called through an active proxy\\n        ) {\\n            revert UUPSUnauthorizedCallContext();\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts if the execution is performed via delegatecall.\\n     * See {notDelegated}.\\n     */\\n    function _checkNotDelegated() internal view virtual {\\n        if (address(this) != __self) {\\n            // Must not be called through delegatecall\\n            revert UUPSUnauthorizedCallContext();\\n        }\\n    }\\n\\n    /**\\n     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n     * {upgradeToAndCall}.\\n     *\\n     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n     *\\n     * ```solidity\\n     * function _authorizeUpgrade(address) internal onlyOwner {}\\n     * ```\\n     */\\n    function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n    /**\\n     * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\\n     *\\n     * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\\n     * is expected to be the implementation slot in ERC-1967.\\n     *\\n     * Emits an {IERC1967-Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {\\n        try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n            if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {\\n                revert UUPSUnsupportedProxiableUUID(slot);\\n            }\\n            ERC1967Utils.upgradeToAndCall(newImplementation, data);\\n        } catch {\\n            // The implementation is not UUPS\\n            revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.2.0) (proxy/ERC1967/ERC1967Utils.sol)\\n\\npragma solidity ^0.8.22;\\n\\nimport {IBeacon} from \\\"../beacon/IBeacon.sol\\\";\\nimport {IERC1967} from \\\"../../interfaces/IERC1967.sol\\\";\\nimport {Address} from \\\"../../utils/Address.sol\\\";\\nimport {StorageSlot} from \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This library provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.\\n */\\nlibrary ERC1967Utils {\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev The `implementation` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidImplementation(address implementation);\\n\\n    /**\\n     * @dev The `admin` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidAdmin(address admin);\\n\\n    /**\\n     * @dev The `beacon` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidBeacon(address beacon);\\n\\n    /**\\n     * @dev An upgrade function sees `msg.value > 0` that may be lost.\\n     */\\n    error ERC1967NonPayable();\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the ERC-1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        if (newImplementation.code.length == 0) {\\n            revert ERC1967InvalidImplementation(newImplementation);\\n        }\\n        StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Performs implementation upgrade with additional setup call if data is nonempty.\\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\\n     * to avoid stuck value in the contract.\\n     *\\n     * Emits an {IERC1967-Upgraded} event.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes memory data) internal {\\n        _setImplementation(newImplementation);\\n        emit IERC1967.Upgraded(newImplementation);\\n\\n        if (data.length > 0) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        } else {\\n            _checkNonPayable();\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\\n     * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the ERC-1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        if (newAdmin == address(0)) {\\n            revert ERC1967InvalidAdmin(address(0));\\n        }\\n        StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {IERC1967-AdminChanged} event.\\n     */\\n    function changeAdmin(address newAdmin) internal {\\n        emit IERC1967.AdminChanged(getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.beacon\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the ERC-1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        if (newBeacon.code.length == 0) {\\n            revert ERC1967InvalidBeacon(newBeacon);\\n        }\\n\\n        StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\\n\\n        address beaconImplementation = IBeacon(newBeacon).implementation();\\n        if (beaconImplementation.code.length == 0) {\\n            revert ERC1967InvalidImplementation(beaconImplementation);\\n        }\\n    }\\n\\n    /**\\n     * @dev Change the beacon and trigger a setup call if data is nonempty.\\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\\n     * to avoid stuck value in the contract.\\n     *\\n     * Emits an {IERC1967-BeaconUpgraded} event.\\n     *\\n     * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\\n     * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\\n     * efficiency.\\n     */\\n    function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\\n        _setBeacon(newBeacon);\\n        emit IERC1967.BeaconUpgraded(newBeacon);\\n\\n        if (data.length > 0) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        } else {\\n            _checkNonPayable();\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\\n     * if an upgrade doesn't perform an initialization call.\\n     */\\n    function _checkNonPayable() private {\\n        if (msg.value > 0) {\\n            revert ERC1967NonPayable();\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {UpgradeableBeacon} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev There's no code at `target` (it is not a contract).\\n     */\\n    error AddressEmptyCode(address target);\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        if (address(this).balance < amount) {\\n            revert Errors.InsufficientBalance(address(this).balance, amount);\\n        }\\n\\n        (bool success, bytes memory returndata) = recipient.call{value: amount}(\\\"\\\");\\n        if (!success) {\\n            _revert(returndata);\\n        }\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\n     * up by this function (like regular Solidity function calls). However, if\\n     * the call reverted with no returned reason, this function reverts with a\\n     * {Errors.FailedCall} error.\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        if (address(this).balance < value) {\\n            revert Errors.InsufficientBalance(address(this).balance, value);\\n        }\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n     * of an unsuccessful call.\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata\\n    ) internal view returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            // only check if target is a contract if the call was successful and the return data is empty\\n            // otherwise we already know that it was a contract\\n            if (returndata.length == 0 && target.code.length == 0) {\\n                revert AddressEmptyCode(target);\\n            }\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n     * revert reason or with a default {Errors.FailedCall} error.\\n     */\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n     */\\n    function _revert(bytes memory returndata) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            assembly (\\\"memory-safe\\\") {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert Errors.FailedCall();\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n    /**\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\n     */\\n    error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev A call to an address target failed. The target may have reverted.\\n     */\\n    error FailedCall();\\n\\n    /**\\n     * @dev The deployment failed.\\n     */\\n    error FailedDeployment();\\n\\n    /**\\n     * @dev A necessary precompile is missing.\\n     */\\n    error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC-1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(newImplementation.code.length > 0);\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * TIP: Consider using this library along with {SlotDerivation}.\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct Int256Slot {\\n        int256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Int256Slot` with member `value` located at `slot`.\\n     */\\n    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol":{"ReentrancyGuardUpgradeable":{"abi":[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"}],"devdoc":{"details":"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].","errors":{"InvalidInitialization()":[{"details":"The contract is already initialized."}],"NotInitializing()":[{"details":"The contract is not initializing."}],"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}]},"events":{"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":\"ReentrancyGuardUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\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 * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\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 Storage of the initializable contract.\\n     *\\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n     * when using with upgradeable contracts.\\n     *\\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n     */\\n    struct InitializableStorage {\\n        /**\\n         * @dev Indicates that the contract has been initialized.\\n         */\\n        uint64 _initialized;\\n        /**\\n         * @dev Indicates that the contract is in the process of being initialized.\\n         */\\n        bool _initializing;\\n    }\\n\\n    // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n    /**\\n     * @dev The contract is already initialized.\\n     */\\n    error InvalidInitialization();\\n\\n    /**\\n     * @dev The contract is not initializing.\\n     */\\n    error NotInitializing();\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint64 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 in the context of a constructor an `initializer` may be invoked any\\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n     * production.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        // Cache values to avoid duplicated sloads\\n        bool isTopLevelCall = !$._initializing;\\n        uint64 initialized = $._initialized;\\n\\n        // Allowed calls:\\n        // - initialSetup: the contract is not in the initializing state and no previous version was\\n        //                 initialized\\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\\n        //                 current contract is just being deployed\\n        bool initialSetup = initialized == 0 && isTopLevelCall;\\n        bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n        if (!initialSetup && !construction) {\\n            revert InvalidInitialization();\\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 2**64 - 1 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint64 version) {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing || $._initialized >= version) {\\n            revert InvalidInitialization();\\n        }\\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        _checkInitializing();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n     */\\n    function _checkInitializing() internal view virtual {\\n        if (!_isInitializing()) {\\n            revert NotInitializing();\\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        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing) {\\n            revert InvalidInitialization();\\n        }\\n        if ($._initialized != type(uint64).max) {\\n            $._initialized = type(uint64).max;\\n            emit Initialized(type(uint64).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint64) {\\n        return _getInitializableStorage()._initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _getInitializableStorage()._initializing;\\n    }\\n\\n    /**\\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\\n     *\\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\\n     */\\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\\n        return INITIALIZABLE_STORAGE;\\n    }\\n\\n    /**\\n     * @dev Returns a pointer to the storage namespace.\\n     */\\n    // solhint-disable-next-line var-name-mixedcase\\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n        bytes32 slot = _initializableStorageSlot();\\n        assembly {\\n            $.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.20;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\\n * consider using {ReentrancyGuardTransient} instead.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant NOT_ENTERED = 1;\\n    uint256 private constant ENTERED = 2;\\n\\n    /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard\\n    struct ReentrancyGuardStorage {\\n        uint256 _status;\\n    }\\n\\n    // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.ReentrancyGuard\\\")) - 1)) & ~bytes32(uint256(0xff))\\n    bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\\n\\n    function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) {\\n        assembly {\\n            $.slot := ReentrancyGuardStorageLocation\\n        }\\n    }\\n\\n    /**\\n     * @dev Unauthorized reentrant call.\\n     */\\n    error ReentrancyGuardReentrantCall();\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        $._status = NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\\n        if ($._status == ENTERED) {\\n            revert ReentrancyGuardReentrantCall();\\n        }\\n\\n        // Any calls to nonReentrant after this point will fail\\n        $._status = ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        $._status = NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        return $._status == ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x361126a17677994081cd9cb69c3f50cffff6e920d25cb7e428acdb1ae41d1866\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/IERC1967.sol":{"IERC1967":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}],"devdoc":{"details":"ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is changed."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":\"IERC1967\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"IERC1822Proxiable":{"abi":[{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.","kind":"dev","methods":{"proxiableUUID()":{"details":"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"proxiableUUID()":"52d1902d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol":{"ERC1967Utils":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"ERC1967InvalidAdmin","type":"error"},{"inputs":[{"internalType":"address","name":"beacon","type":"address"}],"name":"ERC1967InvalidBeacon","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"}],"devdoc":{"details":"This library provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.","errors":{"ERC1967InvalidAdmin(address)":[{"details":"The `admin` of the proxy is invalid."}],"ERC1967InvalidBeacon(address)":[{"details":"The `beacon` of the proxy is invalid."}],"ERC1967InvalidImplementation(address)":[{"details":"The `implementation` of the proxy is invalid."}],"ERC1967NonPayable()":[{"details":"An upgrade function sees `msg.value > 0` that may be lost."}]},"kind":"dev","methods":{},"stateVariables":{"ADMIN_SLOT":{"details":"Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1."},"BEACON_SLOT":{"details":"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1."},"IMPLEMENTATION_SLOT":{"details":"Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122022847971b68d3f02ab2706ccb72ce50431612c2868d671241bc78f865e79703964736f6c634300081c0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 0x22 DUP5 PUSH26 0x71B68D3F02AB2706CCB72CE50431612C2868D671241BC78F865E PUSH26 0x703964736F6C634300081C003300000000000000000000000000 ","sourceMap":"496:5741:5:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;496:5741:5;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122022847971b68d3f02ab2706ccb72ce50431612c2868d671241bc78f865e79703964736f6c634300081c0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x22 DUP5 PUSH26 0x71B68D3F02AB2706CCB72CE50431612C2868D671241BC78F865E PUSH26 0x703964736F6C634300081C003300000000000000000000000000 ","sourceMap":"496:5741:5:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_checkNonPayable()":"infinite","_setAdmin(address)":"infinite","_setBeacon(address)":"infinite","_setImplementation(address)":"infinite","changeAdmin(address)":"infinite","getAdmin()":"infinite","getBeacon()":"infinite","getImplementation()":"infinite","upgradeBeaconToAndCall(address,bytes memory)":"infinite","upgradeToAndCall(address,bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidBeacon\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"This library provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.\",\"errors\":{\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidBeacon(address)\":[{\"details\":\"The `beacon` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}]},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1.\"},\"BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is the keccak-256 hash of \\\"eip1967.proxy.beacon\\\" subtracted by 1.\"},\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":\"ERC1967Utils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.2.0) (proxy/ERC1967/ERC1967Utils.sol)\\n\\npragma solidity ^0.8.22;\\n\\nimport {IBeacon} from \\\"../beacon/IBeacon.sol\\\";\\nimport {IERC1967} from \\\"../../interfaces/IERC1967.sol\\\";\\nimport {Address} from \\\"../../utils/Address.sol\\\";\\nimport {StorageSlot} from \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This library provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.\\n */\\nlibrary ERC1967Utils {\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev The `implementation` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidImplementation(address implementation);\\n\\n    /**\\n     * @dev The `admin` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidAdmin(address admin);\\n\\n    /**\\n     * @dev The `beacon` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidBeacon(address beacon);\\n\\n    /**\\n     * @dev An upgrade function sees `msg.value > 0` that may be lost.\\n     */\\n    error ERC1967NonPayable();\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the ERC-1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        if (newImplementation.code.length == 0) {\\n            revert ERC1967InvalidImplementation(newImplementation);\\n        }\\n        StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Performs implementation upgrade with additional setup call if data is nonempty.\\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\\n     * to avoid stuck value in the contract.\\n     *\\n     * Emits an {IERC1967-Upgraded} event.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes memory data) internal {\\n        _setImplementation(newImplementation);\\n        emit IERC1967.Upgraded(newImplementation);\\n\\n        if (data.length > 0) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        } else {\\n            _checkNonPayable();\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\\n     * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the ERC-1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        if (newAdmin == address(0)) {\\n            revert ERC1967InvalidAdmin(address(0));\\n        }\\n        StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {IERC1967-AdminChanged} event.\\n     */\\n    function changeAdmin(address newAdmin) internal {\\n        emit IERC1967.AdminChanged(getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.beacon\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the ERC-1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        if (newBeacon.code.length == 0) {\\n            revert ERC1967InvalidBeacon(newBeacon);\\n        }\\n\\n        StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\\n\\n        address beaconImplementation = IBeacon(newBeacon).implementation();\\n        if (beaconImplementation.code.length == 0) {\\n            revert ERC1967InvalidImplementation(beaconImplementation);\\n        }\\n    }\\n\\n    /**\\n     * @dev Change the beacon and trigger a setup call if data is nonempty.\\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\\n     * to avoid stuck value in the contract.\\n     *\\n     * Emits an {IERC1967-BeaconUpgraded} event.\\n     *\\n     * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\\n     * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\\n     * efficiency.\\n     */\\n    function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\\n        _setBeacon(newBeacon);\\n        emit IERC1967.BeaconUpgraded(newBeacon);\\n\\n        if (data.length > 0) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        } else {\\n            _checkNonPayable();\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\\n     * if an upgrade doesn't perform an initialization call.\\n     */\\n    function _checkNonPayable() private {\\n        if (msg.value > 0) {\\n            revert ERC1967NonPayable();\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {UpgradeableBeacon} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev There's no code at `target` (it is not a contract).\\n     */\\n    error AddressEmptyCode(address target);\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        if (address(this).balance < amount) {\\n            revert Errors.InsufficientBalance(address(this).balance, amount);\\n        }\\n\\n        (bool success, bytes memory returndata) = recipient.call{value: amount}(\\\"\\\");\\n        if (!success) {\\n            _revert(returndata);\\n        }\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\n     * up by this function (like regular Solidity function calls). However, if\\n     * the call reverted with no returned reason, this function reverts with a\\n     * {Errors.FailedCall} error.\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        if (address(this).balance < value) {\\n            revert Errors.InsufficientBalance(address(this).balance, value);\\n        }\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n     * of an unsuccessful call.\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata\\n    ) internal view returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            // only check if target is a contract if the call was successful and the return data is empty\\n            // otherwise we already know that it was a contract\\n            if (returndata.length == 0 && target.code.length == 0) {\\n                revert AddressEmptyCode(target);\\n            }\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n     * revert reason or with a default {Errors.FailedCall} error.\\n     */\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n     */\\n    function _revert(bytes memory returndata) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            assembly (\\\"memory-safe\\\") {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert Errors.FailedCall();\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n    /**\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\n     */\\n    error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev A call to an address target failed. The target may have reverted.\\n     */\\n    error FailedCall();\\n\\n    /**\\n     * @dev The deployment failed.\\n     */\\n    error FailedDeployment();\\n\\n    /**\\n     * @dev A necessary precompile is missing.\\n     */\\n    error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC-1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(newImplementation.code.length > 0);\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * TIP: Consider using this library along with {SlotDerivation}.\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct Int256Slot {\\n        int256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Int256Slot` with member `value` located at `slot`.\\n     */\\n    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"IBeacon":{"abi":[{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This is the interface that {BeaconProxy} expects of its beacon.","kind":"dev","methods":{"implementation()":{"details":"Must return an address that can be used as a delegate call target. {UpgradeableBeacon} will check that this address is a contract."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"implementation()":"5c60da1b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {UpgradeableBeacon} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {UpgradeableBeacon} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC1155/IERC1155.sol":{"IERC1155":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Required interface of an ERC-1155 compliant contract, as defined in the https://eips.ethereum.org/EIPS/eip-1155[ERC].","events":{"ApprovalForAll(address,address,bool)":{"details":"Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to `approved`."},"TransferBatch(address,address,address,uint256[],uint256[])":{"details":"Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfers."},"TransferSingle(address,address,address,uint256,uint256)":{"details":"Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`."},"URI(string,uint256)":{"details":"Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. If an {URI} event was emitted for `id`, the standard https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value returned by {IERC1155MetadataURI-uri}."}},"kind":"dev","methods":{"balanceOf(address,uint256)":{"details":"Returns the value of tokens of token type `id` owned by `account`."},"balanceOfBatch(address[],uint256[])":{"details":"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. Requirements: - `accounts` and `ids` must have the same length."},"isApprovedForAll(address,address)":{"details":"Returns true if `operator` is approved to transfer ``account``'s tokens. See {setApprovalForAll}."},"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)":{"details":"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. Requirements: - `ids` and `values` must have the same length. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value."},"safeTransferFrom(address,address,uint256,uint256,bytes)":{"details":"Transfers a `value` amount of tokens of type `id` from `from` to `to`. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits a {TransferSingle} event. Requirements: - `to` cannot be the zero address. - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. - `from` must have a balance of tokens of type `id` of at least `value` amount. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value."},"setApprovalForAll(address,bool)":{"details":"Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, Emits an {ApprovalForAll} event. Requirements: - `operator` cannot be the zero address."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"balanceOf(address,uint256)":"00fdd58e","balanceOfBatch(address[],uint256[])":"4e1273f4","isApprovedForAll(address,address)":"e985e9c5","safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)":"2eb2c2d6","safeTransferFrom(address,address,uint256,uint256,bytes)":"f242432a","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC-1155 compliant contract, as defined in the https://eips.ethereum.org/EIPS/eip-1155[ERC].\",\"events\":{\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to `approved`.\"},\"TransferBatch(address,address,address,uint256[],uint256[])\":{\"details\":\"Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfers.\"},\"TransferSingle(address,address,address,uint256,uint256)\":{\"details\":\"Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\"},\"URI(string,uint256)\":{\"details\":\"Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. If an {URI} event was emitted for `id`, the standard https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value returned by {IERC1155MetadataURI-uri}.\"}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Returns the value of tokens of token type `id` owned by `account`.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. Requirements: - `accounts` and `ids` must have the same length.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns true if `operator` is approved to transfer ``account``'s tokens. See {setApprovalForAll}.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. Requirements: - `ids` and `values` must have the same length. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers a `value` amount of tokens of type `id` from `from` to `to`. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits a {TransferSingle} event. Requirements: - `to` cannot be the zero address. - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. - `from` must have a balance of tokens of type `id` of at least `value` amount. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, Emits an {ApprovalForAll} event. Requirements: - `operator` cannot be the zero address.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":\"IERC1155\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC1155/IERC1155.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC-1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[ERC].\\n */\\ninterface IERC1155 is IERC165 {\\n    /**\\n     * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\\n     */\\n    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n    /**\\n     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n     * transfers.\\n     */\\n    event TransferBatch(\\n        address indexed operator,\\n        address indexed from,\\n        address indexed to,\\n        uint256[] ids,\\n        uint256[] values\\n    );\\n\\n    /**\\n     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n     * `approved`.\\n     */\\n    event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n    /**\\n     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n     *\\n     * If an {URI} event was emitted for `id`, the standard\\n     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n     * returned by {IERC1155MetadataURI-uri}.\\n     */\\n    event URI(string value, uint256 indexed id);\\n\\n    /**\\n     * @dev Returns the value of tokens of token type `id` owned by `account`.\\n     */\\n    function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n    /**\\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n     *\\n     * Requirements:\\n     *\\n     * - `accounts` and `ids` must have the same length.\\n     */\\n    function balanceOfBatch(\\n        address[] calldata accounts,\\n        uint256[] calldata ids\\n    ) external view returns (uint256[] memory);\\n\\n    /**\\n     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n     *\\n     * Emits an {ApprovalForAll} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `operator` cannot be the zero address.\\n     */\\n    function setApprovalForAll(address operator, bool approved) external;\\n\\n    /**\\n     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n     *\\n     * See {setApprovalForAll}.\\n     */\\n    function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n    /**\\n     * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`.\\n     *\\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver.\\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\\n     * reentrancy guards when interacting with untrusted contracts.\\n     *\\n     * Emits a {TransferSingle} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n     * - `from` must have a balance of tokens of type `id` of at least `value` amount.\\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n     * acceptance magic value.\\n     */\\n    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n\\n    /**\\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n     *\\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver.\\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\\n     * reentrancy guards when interacting with untrusted contracts.\\n     *\\n     * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments.\\n     *\\n     * Requirements:\\n     *\\n     * - `ids` and `values` must have the same length.\\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n     * acceptance magic value.\\n     */\\n    function safeBatchTransferFrom(\\n        address from,\\n        address to,\\n        uint256[] calldata ids,\\n        uint256[] calldata values,\\n        bytes calldata data\\n    ) external;\\n}\\n\",\"keccak256\":\"0x1d7a05b3219532ea5ece50a80cf390cac9109dc74e07763adfa463ab5a3af0dc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by\\n     * `interfaceId`. See the corresponding\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC-20 standard as defined in the ERC.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n     * caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC721/IERC721.sol":{"IERC721":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Required interface of an ERC-721 compliant contract.","events":{"Approval(address,address,uint256)":{"details":"Emitted when `owner` enables `approved` to manage the `tokenId` token."},"ApprovalForAll(address,address,bool)":{"details":"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."},"Transfer(address,address,uint256)":{"details":"Emitted when `tokenId` token is transferred from `from` to `to`."}},"kind":"dev","methods":{"approve(address,uint256)":{"details":"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the number of tokens in ``owner``'s account."},"getApproved(uint256)":{"details":"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."},"isApprovedForAll(address,address)":{"details":"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"},"ownerOf(uint256)":{"details":"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."},"safeTransferFrom(address,address,uint256)":{"details":"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or   {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event."},"setApprovalForAll(address,bool)":{"details":"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event."},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."},"transferFrom(address,address,uint256)":{"details":"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","getApproved(uint256)":"081812fc","isApprovedForAll(address,address)":"e985e9c5","ownerOf(uint256)":"6352211e","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","supportsInterface(bytes4)":"01ffc9a7","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC-721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC-721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or   {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon   a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the address zero. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC-721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n    /**\\n     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n    /**\\n     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n     */\\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n    /**\\n     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n     */\\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n    /**\\n     * @dev Returns the number of tokens in ``owner``'s account.\\n     */\\n    function balanceOf(address owner) external view returns (uint256 balance);\\n\\n    /**\\n     * @dev Returns the owner of the `tokenId` token.\\n     *\\n     * Requirements:\\n     *\\n     * - `tokenId` must exist.\\n     */\\n    function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n    /**\\n     * @dev Safely transfers `tokenId` token from `from` to `to`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `tokenId` token must exist and be owned by `from`.\\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\\n     *   a safe transfer.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n    /**\\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `tokenId` token must exist and be owned by `from`.\\n     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\\n     *   {setApprovalForAll}.\\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\\n     *   a safe transfer.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n    /**\\n     * @dev Transfers `tokenId` token from `from` to `to`.\\n     *\\n     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\\n     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n     * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `tokenId` token must be owned by `from`.\\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n    /**\\n     * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n     * The approval is cleared when the token is transferred.\\n     *\\n     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n     *\\n     * Requirements:\\n     *\\n     * - The caller must own the token or be an approved operator.\\n     * - `tokenId` must exist.\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address to, uint256 tokenId) external;\\n\\n    /**\\n     * @dev Approve or remove `operator` as an operator for the caller.\\n     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n     *\\n     * Requirements:\\n     *\\n     * - The `operator` cannot be the address zero.\\n     *\\n     * Emits an {ApprovalForAll} event.\\n     */\\n    function setApprovalForAll(address operator, bool approved) external;\\n\\n    /**\\n     * @dev Returns the account approved for `tokenId` token.\\n     *\\n     * Requirements:\\n     *\\n     * - `tokenId` must exist.\\n     */\\n    function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n    /**\\n     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n     *\\n     * See {setApprovalForAll}\\n     */\\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by\\n     * `interfaceId`. See the corresponding\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"}],"devdoc":{"details":"Collection of functions related to the address type","errors":{"AddressEmptyCode(address)":[{"details":"There's no code at `target` (it is not a contract)."}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122032abaa8d7f9526098c687a0eb3385187e3092d2f49acaf84971fc5d33e5af8fc64736f6c634300081c0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 ORIGIN 0xAB 0xAA DUP14 PUSH32 0x9526098C687A0EB3385187E3092D2F49ACAF84971FC5D33E5AF8FC64736F6C63 NUMBER STOP ADDMOD SHR STOP CALLER ","sourceMap":"233:5815:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;233:5815:10;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122032abaa8d7f9526098c687a0eb3385187e3092d2f49acaf84971fc5d33e5af8fc64736f6c634300081c0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ORIGIN 0xAB 0xAA DUP14 PUSH32 0x9526098C687A0EB3385187E3092D2F49ACAF84971FC5D33E5AF8FC64736F6C63 NUMBER STOP ADDMOD SHR STOP CALLER ","sourceMap":"233:5815:10:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_revert(bytes memory)":"infinite","functionCall(address,bytes memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory)":"infinite","verifyCallResultFromTarget(address,bool,bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev There's no code at `target` (it is not a contract).\\n     */\\n    error AddressEmptyCode(address target);\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        if (address(this).balance < amount) {\\n            revert Errors.InsufficientBalance(address(this).balance, amount);\\n        }\\n\\n        (bool success, bytes memory returndata) = recipient.call{value: amount}(\\\"\\\");\\n        if (!success) {\\n            _revert(returndata);\\n        }\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\n     * up by this function (like regular Solidity function calls). However, if\\n     * the call reverted with no returned reason, this function reverts with a\\n     * {Errors.FailedCall} error.\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        if (address(this).balance < value) {\\n            revert Errors.InsufficientBalance(address(this).balance, value);\\n        }\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n     * of an unsuccessful call.\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata\\n    ) internal view returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            // only check if target is a contract if the call was successful and the return data is empty\\n            // otherwise we already know that it was a contract\\n            if (returndata.length == 0 && target.code.length == 0) {\\n                revert AddressEmptyCode(target);\\n            }\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n     * revert reason or with a default {Errors.FailedCall} error.\\n     */\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n     */\\n    function _revert(bytes memory returndata) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            assembly (\\\"memory-safe\\\") {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert Errors.FailedCall();\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n    /**\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\n     */\\n    error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev A call to an address target failed. The target may have reverted.\\n     */\\n    error FailedCall();\\n\\n    /**\\n     * @dev The deployment failed.\\n     */\\n    error FailedDeployment();\\n\\n    /**\\n     * @dev A necessary precompile is missing.\\n     */\\n    error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MissingPrecompile","type":"error"}],"devdoc":{"details":"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._","errors":{"FailedCall()":[{"details":"A call to an address target failed. The target may have reverted."}],"FailedDeployment()":[{"details":"The deployment failed."}],"InsufficientBalance(uint256,uint256)":[{"details":"The ETH balance of the account is not enough to perform the operation."}],"MissingPrecompile(address)":[{"details":"A necessary precompile is missing."}]},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220259c4ceb6c173d6d4c4529438df318e4897f957e032daec1447fd0731f0fefd164736f6c634300081c0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 0x25 SWAP13 0x4C 0xEB PUSH13 0x173D6D4C4529438DF318E4897F SWAP6 PUSH31 0x32DAEC1447FD0731F0FEFD164736F6C634300081C00330000000000000000 ","sourceMap":"411:484:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;411:484:11;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220259c4ceb6c173d6d4c4529438df318e4897f957e032daec1447fd0731f0fefd164736f6c634300081c0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 SWAP13 0x4C 0xEB PUSH13 0x173D6D4C4529438DF318E4897F SWAP6 PUSH31 0x32DAEC1447FD0731F0FEFD164736F6C634300081C00330000000000000000 ","sourceMap":"411:484:11:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n    /**\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\n     */\\n    error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev A call to an address target failed. The target may have reverted.\\n     */\\n    error FailedCall();\\n\\n    /**\\n     * @dev The deployment failed.\\n     */\\n    error FailedDeployment();\\n\\n    /**\\n     * @dev A necessary precompile is missing.\\n     */\\n    error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"devdoc":{"details":"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 {     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(newImplementation.code.length > 0);         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` TIP: Consider using this library along with {SlotDerivation}.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205dff66893ddc142b9d665aaff4e4b6f8fc32de1de1024d2f2e2f2d73d2c6bab664736f6c634300081c0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 TSTORE SELFDESTRUCT PUSH7 0x893DDC142B9D66 GAS 0xAF DELEGATECALL 0xE4 0xB6 0xF8 0xFC ORIGIN 0xDE SAR 0xE1 MUL 0x4D 0x2F 0x2E 0x2F 0x2D PUSH20 0xD2C6BAB664736F6C634300081C00330000000000 ","sourceMap":"1407:2774:12:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1407:2774:12;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205dff66893ddc142b9d665aaff4e4b6f8fc32de1de1024d2f2e2f2d73d2c6bab664736f6c634300081c0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TSTORE SELFDESTRUCT PUSH7 0x893DDC142B9D66 GAS 0xAF DELEGATECALL 0xE4 0xB6 0xF8 0xFC ORIGIN 0xDE SAR 0xE1 MUL 0x4D 0x2F 0x2E 0x2F 0x2D PUSH20 0xD2C6BAB664736F6C634300081C00330000000000 ","sourceMap":"1407:2774:12:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getAddressSlot(bytes32)":"infinite","getBooleanSlot(bytes32)":"infinite","getBytes32Slot(bytes32)":"infinite","getBytesSlot(bytes storage pointer)":"infinite","getBytesSlot(bytes32)":"infinite","getInt256Slot(bytes32)":"infinite","getStringSlot(bytes32)":"infinite","getStringSlot(string storage pointer)":"infinite","getUint256Slot(bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 {     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(newImplementation.code.length > 0);         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC-1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(newImplementation.code.length > 0);\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * TIP: Consider using this library along with {SlotDerivation}.\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct Int256Slot {\\n        int256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Int256Slot` with member `value` located at `slot`.\\n     */\\n    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.","kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by\\n     * `interfaceId`. See the corresponding\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/VideoPayment.sol":{"VideoPayment":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"AlreadyPurchased","type":"error"},{"inputs":[],"name":"ArrayLengthMismatch","type":"error"},{"inputs":[],"name":"ContractPaused","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"InsufficientPayment","type":"error"},{"inputs":[],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"InvalidContent","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NoValidPermission","type":"error"},{"inputs":[],"name":"NotAdmin","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"UUPSUnauthorizedCallContext","type":"error"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"name":"UUPSUnsupportedProxiableUUID","type":"error"},{"inputs":[],"name":"UnsupportedToken","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"BatchPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"ContentConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"viewCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"validUntil","type":"uint256"}],"name":"ContentPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"address","name":"nftContract","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTPurchased","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"PermissionExpired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"SupportedTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"SupportedTokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"TokenPriceUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingViews","type":"uint256"}],"name":"ViewConsumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"addedCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalRemaining","type":"uint256"}],"name":"ViewCountAdded","type":"event"},{"inputs":[],"name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"}],"name":"batchConsumeView","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"batchPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"internalType":"uint256[]","name":"nativePrices","type":"uint256[]"},{"internalType":"uint256[]","name":"defaultViewCounts","type":"uint256[]"},{"internalType":"uint256[]","name":"viewDurations","type":"uint256[]"},{"internalType":"bool[]","name":"isActiveArray","type":"bool[]"}],"name":"batchSetContentConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"batchUpdateTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"consumeView","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"getContentPurchaseInfo","outputs":[{"components":[{"internalType":"uint256","name":"defaultViewCount","type":"uint256"},{"internalType":"uint256","name":"viewDuration","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"address[]","name":"supportedTokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenPrices","type":"uint256[]"},{"internalType":"bool","name":"isUnlimitedViewing","type":"bool"}],"internalType":"struct IVideoPayment.ContentPurchaseInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"getPermissionDetails","outputs":[{"components":[{"internalType":"uint256","name":"purchaseTime","type":"uint256"},{"internalType":"uint256","name":"remainingViews","type":"uint256"},{"internalType":"bool","name":"isValid","type":"bool"}],"internalType":"struct VideoPaymentStorage.ViewPermission","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"}],"name":"getUserPermissions","outputs":[{"components":[{"internalType":"uint256","name":"purchaseTime","type":"uint256"},{"internalType":"uint256","name":"remainingViews","type":"uint256"},{"internalType":"bool","name":"isValid","type":"bool"}],"internalType":"struct VideoPaymentStorage.ViewPermission[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"hasViewPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address[]","name":"initialAdmins","type":"address[]"},{"internalType":"address[]","name":"supportedTokenAddresses","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"isContentActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isSupportedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"purchaseContent","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"purchaseWithNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"uint256","name":"nativePrice","type":"uint256"},{"internalType":"uint256","name":"defaultViewCount","type":"uint256"},{"internalType":"uint256","name":"viewDuration","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setContentConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updateTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Main contract for video content payment and access control","errors":{"AddressEmptyCode(address)":[{"details":"There's no code at `target` (it is not a contract)."}],"ERC1967InvalidImplementation(address)":[{"details":"The `implementation` of the proxy is invalid."}],"ERC1967NonPayable()":[{"details":"An upgrade function sees `msg.value > 0` that may be lost."}],"FailedCall()":[{"details":"A call to an address target failed. The target may have reverted."}],"InvalidInitialization()":[{"details":"The contract is already initialized."}],"NotInitializing()":[{"details":"The contract is not initializing."}],"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}],"UUPSUnauthorizedCallContext()":[{"details":"The call is from an unauthorized context."}],"UUPSUnsupportedProxiableUUID(bytes32)":[{"details":"The storage `slot` is unsupported as a UUID."}]},"events":{"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{"addAdmin(address)":{"details":"Add admin","params":{"admin":"Admin address to add"}},"addSupportedToken(address)":{"details":"Add supported token (address(0) for native token)","params":{"token":"Token address to add (address(0) for native)"}},"batchConsumeView(address[],uint256[])":{"details":"Batch consume views for multiple users","params":{"contentIds":"Content ID array","users":"User address array"},"returns":{"_0":"Success status array"}},"batchPurchase(uint256[],address,uint256)":{"details":"Batch purchase content with token (address(0) for native token)","params":{"contentIds":"Content ID array","paymentToken":"Payment token address (address(0) for native)","totalAmount":"Total payment amount"}},"batchSetContentConfig(uint256[],uint256[],uint256[],uint256[],bool[])":{"details":"Batch set content configurations","params":{"contentIds":"Content ID array","defaultViewCounts":"Default view count array","isActiveArray":"Active status array","nativePrices":"Native price array","viewDurations":"View duration array"}},"batchUpdateTokenPrice(uint256[],address,uint256[])":{"details":"Batch update token prices for multiple contents (address(0) for native token)","params":{"contentIds":"Content ID array","prices":"Price array","token":"Token address (address(0) for native)"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"consumeView(address,uint256)":{"details":"Consume one view for user","params":{"contentId":"Content ID","user":"User address"},"returns":{"_0":"Success status"}},"getContentPurchaseInfo(uint256)":{"details":"Get content purchase information","params":{"contentId":"Content ID"},"returns":{"_0":"Purchase information including supported tokens and prices"}},"getPermissionDetails(address,uint256)":{"details":"Get detailed permission info","params":{"contentId":"Content ID","user":"User address"},"returns":{"_0":"Permission details"}},"getUserPermissions(address,uint256[])":{"details":"Get user permissions for multiple contents","params":{"contentIds":"Content ID array","user":"User address"},"returns":{"_0":"Permission array"}},"hasViewPermission(address,uint256)":{"details":"Check if user has valid view permission","params":{"contentId":"Content ID","user":"User address"},"returns":{"_0":"Whether user has valid permission"}},"initialize(address,address[],address[])":{"details":"Initialize the contract","params":{"initialAdmins":"Initial admin addresses array","initialOwner":"Initial owner address","supportedTokenAddresses":"Initial supported token addresses array"}},"isContentActive(uint256)":{"details":"Check if content is active","params":{"contentId":"Content ID"},"returns":{"_0":"Whether content is active"}},"isSupportedToken(address)":{"details":"Check if token is supported","params":{"token":"Token address to check"},"returns":{"_0":"Whether token is supported"}},"migrate()":{"details":"Migration function for future upgrades"},"pause()":{"details":"Pause contract"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"purchaseContent(uint256,address,uint256)":{"details":"Purchase content with token (address(0) for native token)","params":{"amount":"Payment amount","contentId":"Content ID","paymentToken":"Payment token address (address(0) for native)"}},"purchaseWithNFT(uint256,address,uint256)":{"details":"Purchase content with NFT","params":{"contentId":"Content ID","nftContract":"NFT contract address","tokenId":"NFT token ID"}},"removeAdmin(address)":{"details":"Remove admin","params":{"admin":"Admin address to remove"}},"removeSupportedToken(address)":{"details":"Remove supported token (address(0) for native token)","params":{"token":"Token address to remove (address(0) for native)"}},"setContentConfig(uint256,uint256,uint256,uint256,bool)":{"details":"Set content configuration","params":{"contentId":"Content ID","defaultViewCount":"Default view count","isActive":"Whether content is active","nativePrice":"Native coin price","viewDuration":"View duration in seconds"}},"unpause()":{"details":"Unpause contract"},"updateTokenPrice(uint256,address,uint256)":{"details":"Update token price for content (address(0) for native token)","params":{"contentId":"Content ID","price":"New price","token":"Token address (address(0) for native)"}},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"version()":{"details":"Get contract version"}},"title":"VideoPayment","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1736":{"entryPoint":null,"id":1736,"parameterSlots":0,"returnSlots":0},"@_disableInitializers_221":{"entryPoint":34,"id":221,"parameterSlots":0,"returnSlots":0},"@_getInitializableStorage_266":{"entryPoint":null,"id":266,"parameterSlots":0,"returnSlots":1},"@_initializableStorageSlot_252":{"entryPoint":null,"id":252,"parameterSlots":0,"returnSlots":1},"abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:216:17","nodeType":"YulBlock","src":"0:216:17","statements":[{"nativeSrc":"6:3:17","nodeType":"YulBlock","src":"6:3:17","statements":[]},{"body":{"nativeSrc":"113:101:17","nodeType":"YulBlock","src":"113:101:17","statements":[{"nativeSrc":"123:26:17","nodeType":"YulAssignment","src":"123:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"135:9:17","nodeType":"YulIdentifier","src":"135:9:17"},{"kind":"number","nativeSrc":"146:2:17","nodeType":"YulLiteral","src":"146:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"131:3:17","nodeType":"YulIdentifier","src":"131:3:17"},"nativeSrc":"131:18:17","nodeType":"YulFunctionCall","src":"131:18:17"},"variableNames":[{"name":"tail","nativeSrc":"123:4:17","nodeType":"YulIdentifier","src":"123:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"165:9:17","nodeType":"YulIdentifier","src":"165:9:17"},{"arguments":[{"name":"value0","nativeSrc":"180:6:17","nodeType":"YulIdentifier","src":"180:6:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"196:2:17","nodeType":"YulLiteral","src":"196:2:17","type":"","value":"64"},{"kind":"number","nativeSrc":"200:1:17","nodeType":"YulLiteral","src":"200:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"192:3:17","nodeType":"YulIdentifier","src":"192:3:17"},"nativeSrc":"192:10:17","nodeType":"YulFunctionCall","src":"192:10:17"},{"kind":"number","nativeSrc":"204:1:17","nodeType":"YulLiteral","src":"204:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"188:3:17","nodeType":"YulIdentifier","src":"188:3:17"},"nativeSrc":"188:18:17","nodeType":"YulFunctionCall","src":"188:18:17"}],"functionName":{"name":"and","nativeSrc":"176:3:17","nodeType":"YulIdentifier","src":"176:3:17"},"nativeSrc":"176:31:17","nodeType":"YulFunctionCall","src":"176:31:17"}],"functionName":{"name":"mstore","nativeSrc":"158:6:17","nodeType":"YulIdentifier","src":"158:6:17"},"nativeSrc":"158:50:17","nodeType":"YulFunctionCall","src":"158:50:17"},"nativeSrc":"158:50:17","nodeType":"YulExpressionStatement","src":"158:50:17"}]},"name":"abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed","nativeSrc":"14:200:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"82:9:17","nodeType":"YulTypedName","src":"82:9:17","type":""},{"name":"value0","nativeSrc":"93:6:17","nodeType":"YulTypedName","src":"93:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"104:4:17","nodeType":"YulTypedName","src":"104:4:17","type":""}],"src":"14:200:17"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(64, 1), 1)))\n    }\n}","id":17,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132606100fd60003960008181612183015281816121ac015261231801526132606000f3fe60806040526004361061019c5760003560e01c806370480275116100ec57806399ea24fe1161008a578063b303f53f11610064578063b303f53f146104b9578063b6f1d140146104e6578063b8e8f98e146104f9578063caae24b31461052657600080fd5b806399ea24fe14610448578063ad3cb1cc1461045b578063b1b105fe1461049957600080fd5b806386778641116100c657806386778641146103c65780638d13660e146103e65780638f0ff11b146104135780638fd3ab801461043357600080fd5b8063704802751461037157806376319190146103915780638456cb59146103b157600080fd5b806340033b3d11610159578063529e2b3211610133578063529e2b32146102ec57806352d1902d1461031957806354fd4d501461033c5780636d69fcaf1461035157600080fd5b806340033b3d146102865780634a200fa5146102b95780634f1ef286146102d957600080fd5b806305059571146101a157806309b952be146101d65780631785f53c146101f8578063240028e8146102185780633428cebb146102515780633f4ba83a14610271575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046128c4565b610546565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101f66101f1366004612a3b565b610722565b005b34801561020457600080fd5b506101f6610213366004612b22565b610952565b34801561022457600080fd5b506101c1610233366004612b22565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561025d57600080fd5b506101f661026c366004612b3f565b6109ed565b34801561027d57600080fd5b506101f6610ade565b34801561029257600080fd5b506101c16102a1366004612b77565b60009081526002602052604090206004015460ff1690565b3480156102c557600080fd5b506101f66102d4366004612bf7565b610b3e565b6101f66102e7366004612c70565b610e74565b3480156102f857600080fd5b5061030c610307366004612d1b565b610e93565b6040516101cd9190612d82565b34801561032557600080fd5b5061032e611286565b6040519081526020016101cd565b34801561034857600080fd5b5060065461032e565b34801561035d57600080fd5b506101f661036c366004612b22565b6112a3565b34801561037d57600080fd5b506101f661038c366004612b22565b61131f565b34801561039d57600080fd5b506101f66103ac366004612b22565b6113c0565b3480156103bd57600080fd5b506101f6611439565b3480156103d257600080fd5b506101f66103e1366004612b3f565b61149c565b3480156103f257600080fd5b506104066104013660046128c4565b611661565b6040516101cd9190612dc7565b34801561041f57600080fd5b506101f661042e366004612dea565b6116da565b34801561043f57600080fd5b506101f66118b0565b6101f6610456366004612e59565b6118dd565b34801561046757600080fd5b5061048c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190612ec5565b3480156104a557600080fd5b506101f66104b4366004612ef8565b611bc7565b3480156104c557600080fd5b506104d96104d4366004612f45565b611c5a565b6040516101cd9190612f7e565b6101f66104f4366004612b3f565b611d75565b34801561050557600080fd5b50610519610514366004612b77565b611fdc565b6040516101cd9190613013565b34801561053257600080fd5b506101c16105413660046128c4565b61207d565b3360009081526001602052604081205460ff1661057657604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03831660009081526003602090815260408083208584529091529020600281015460ff166105be5760405163fcd7a1b560e01b815260040160405180910390fd5b60008381526002602052604090206003015481546105dc91906130d4565b4211156105fc5760405163fcd7a1b560e01b815260040160405180910390fd5b600083815260026020819052604082200154908190036106545783856001600160a01b03166000805160206131cb833981519152600060405161064191815260200190565b60405180910390a360019250505061071c565b81600101546000036106795760405163fcd7a1b560e01b815260040160405180910390fd5b60018201805490600061068b836130e7565b919050555083856001600160a01b03166000805160206131cb83398151915284600101546040516106be91815260200190565b60405180910390a381600101546000036107155760028201805460ff1916905560405184906001600160a01b038716907f294e395c96ee31e4373f6b284b107e5341ffa80f2c53e582bc3cfb1f9efe500e90600090a35b6001925050505b92915050565b3360009081526001602052604090205460ff1661075257604051637bfa4b9f60e01b815260040160405180910390fd5b8351855114158061076557508251855114155b8061077257508151855114155b8061077f57508051855114155b1561079d5760405163512509d360e11b815260040160405180910390fd5b60005b855181101561094a578481815181106107bb576107bb6130fe565b6020026020010151600060020160008884815181106107dc576107dc6130fe565b602002602001015181526020019081526020016000206001018190555083818151811061080b5761080b6130fe565b60200260200101516000600201600088848151811061082c5761082c6130fe565b602002602001015181526020019081526020016000206002018190555082818151811061085b5761085b6130fe565b60200260200101516000600201600088848151811061087c5761087c6130fe565b60200260200101518152602001908152602001600020600301819055508181815181106108ab576108ab6130fe565b6020026020010151600060020160008884815181106108cc576108cc6130fe565b6020026020010151815260200190815260200160002060040160006101000a81548160ff02191690831515021790555085818151811061090e5761090e6130fe565b60200260200101517fa7c3f5f04f0c05ad82fcdf81039da5a01bf41ce2769b7b347afa43bb65e4426660405160405180910390a26001016107a0565b505050505050565b6000546001600160a01b0316331461097d576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166109a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9190a250565b3360009081526001602052604090205460ff16610a1d57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff16610a565760405163350b944160e11b815260040160405180910390fd5b60008381526002602090815260408083206001600160a01b0386168085529252909120829055610a955760008381526002602052604090206001018190555b816001600160a01b0316837f376716bd86293ff8b34061b9af3cac5116f15e0f2cbf689d822b6d6d7b1eeca983604051610ad191815260200190565b60405180910390a3505050565b6000546001600160a01b03163314610b09576040516330cd747160e01b815260040160405180910390fd5b6005805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6000610b48612137565b805490915060ff600160401b82041615906001600160401b0316600081158015610b6f5750825b90506000826001600160401b03166001148015610b8b5750303b155b905081158015610b99575080155b15610bb75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610be157845460ff60401b1916600160401b1785555b6001600160a01b038816610c085760405163d92e233d60e01b815260040160405180910390fd5b610c10612160565b610c18612168565b600080546001600160a01b0319166001600160a01b038a1617815560016006556005805460ff191690555b8751811015610d315760006001600160a01b0316888281518110610c6957610c696130fe565b60200260200101516001600160a01b031614610d29576001600060010160008a8481518110610c9a57610c9a6130fe565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550878181518110610ceb57610ceb6130fe565b60200260200101516001600160a01b03167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a25b600101610c43565b5060005b8651811015610e235760006001600160a01b0316878281518110610d5b57610d5b6130fe565b60200260200101516001600160a01b031614610e1b57600160006004016000898481518110610d8c57610d8c6130fe565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550868181518110610ddd57610ddd6130fe565b60200260200101516001600160a01b03167fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d760405160405180910390a25b600101610d35565b508315610e6a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610e7c612178565b610e858261221d565b610e8f828261224b565b5050565b3360009081526001602052604090205460609060ff16610ec657604051637bfa4b9f60e01b815260040160405180910390fd5b8151835114610ee85760405163512509d360e11b815260040160405180910390fd5b600083516001600160401b03811115610f0357610f036128f0565b604051908082528060200260200182016040528015610f2c578160200160208202803683370190505b50905060005b845181101561127e576000806003016000878481518110610f5557610f556130fe565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610f9157610f916130fe565b6020026020010151815260200190815260200160002090508060020160009054906101000a900460ff16610fe9576000838381518110610fd357610fd36130fe565b9115156020928302919091019091015250611276565b60006002016000868481518110611002576110026130fe565b6020026020010151815260200190815260200160002060030154816000015461102b91906130d4565b421115611046576000838381518110610fd357610fd36130fe565b6000806002016000878581518110611060576110606130fe565b602002602001015181526020019081526020016000206002015490508060000361111257858381518110611096576110966130fe565b60200260200101518784815181106110b0576110b06130fe565b60200260200101516001600160a01b03166000805160206131cb83398151915260006040516110e191815260200190565b60405180910390a360018484815181106110fd576110fd6130fe565b91151560209283029190910190910152611273565b816001015460000361114b576000848481518110611132576111326130fe565b6020026020010190151590811515815250505050611276565b60018201805490600061115d836130e7565b9190505550858381518110611174576111746130fe565b602002602001015187848151811061118e5761118e6130fe565b60200260200101516001600160a01b03166000805160206131cb83398151915284600101546040516111c291815260200190565b60405180910390a3816001015460000361124e5760028201805460ff1916905585518690849081106111f6576111f66130fe565b6020026020010151878481518110611210576112106130fe565b60200260200101516001600160a01b03167f294e395c96ee31e4373f6b284b107e5341ffa80f2c53e582bc3cfb1f9efe500e60405160405180910390a35b6001848481518110611262576112626130fe565b911515602092830291909101909101525b50505b600101610f32565b509392505050565b600061129061230d565b506000805160206131eb83398151915290565b3360009081526001602052604090205460ff166112d357604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d79190a250565b6000546001600160a01b0316331461134a576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166113715760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399190a250565b3360009081526001602052604090205460ff166113f057604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19169055517fbea12876694c4055c71f74308f752b9027cf3d554194000a366abddfc239a3069190a250565b6000546001600160a01b03163314611464576040516330cd747160e01b815260040160405180910390fd5b6005805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6114a4612356565b60055460ff16156114c85760405163ab35696f60e01b815260040160405180910390fd5b600083815260026020526040902060040154839060ff166114fc5760405163ab4142cf60e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905233906001600160a01b03851690636352211e90602401602060405180830381865afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190613114565b6001600160a01b03161461158e5760405163fcd7a1b560e01b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038416906323b872dd90606401600060405180830381600087803b1580156115dc57600080fd5b505af11580156115f0573d6000803e3d6000fd5b505050506115fe338561238e565b604080516001600160a01b038516815260208101849052859133917fd0de3e759b6d8ae4ab8dfd56f0869b691034bf2f14b896155287e5cd61d66a70910160405180910390a35061165c600160008051602061320b83398151915255565b505050565b611687604051806060016040528060008152602001600081526020016000151581525090565b506001600160a01b03821660009081526003602090815260408083208484528252918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915292915050565b3360009081526001602052604090205460ff1661170a57604051637bfa4b9f60e01b815260040160405180910390fd5b805183511461172c5760405163512509d360e11b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff166117655760405163350b944160e11b815260040160405180910390fd5b60005b83518110156118aa57818181518110611783576117836130fe565b6020026020010151600060020160008684815181106117a4576117a46130fe565b602090810291909101810151825281810192909252604090810160009081206001600160a01b0388168083529352209190915561182c578181815181106117ed576117ed6130fe565b60200260200101516000600201600086848151811061180e5761180e6130fe565b60200260200101518152602001908152602001600020600101819055505b826001600160a01b0316848281518110611848576118486130fe565b60200260200101517f376716bd86293ff8b34061b9af3cac5116f15e0f2cbf689d822b6d6d7b1eeca9848481518110611883576118836130fe565b602002602001015160405161189a91815260200190565b60405180910390a3600101611768565b50505050565b6000546001600160a01b031633146118db576040516330cd747160e01b815260040160405180910390fd5b565b6118e5612356565b60055460ff16156119095760405163ab35696f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff166119425760405163350b944160e11b815260040160405180910390fd5b6000805b8451811015611a655760006002016000868381518110611968576119686130fe565b60209081029190910181015182528101919091526040016000206004015460ff166119a65760405163ab4142cf60e01b815260040160405180910390fd5b6001600160a01b0384166119f957600060020160008683815181106119cd576119cd6130fe565b6020026020010151815260200190815260200160002060010154826119f291906130d4565b9150611a5d565b60006002016000868381518110611a1257611a126130fe565b602002602001015181526020019081526020016000206000016000856001600160a01b03166001600160a01b031681526020019081526020016000205482611a5a91906130d4565b91505b600101611946565b50808214611a865760405163cd1c886760e01b815260040160405180910390fd5b6001600160a01b038316611ab957813414611ab45760405163cd1c886760e01b815260040160405180910390fd5b611b32565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038416906323b872dd906064016020604051808303816000875af1158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b309190613131565b505b60005b8451811015611b6957611b6133868381518110611b5457611b546130fe565b602002602001015161238e565b600101611b35565b50336001600160a01b03167f2be07a645f06bfa8b189b4f0aba9bf2109d098d03cbede0449641495bba5d53d858585604051611ba79392919061314e565b60405180910390a25061165c600160008051602061320b83398151915255565b3360009081526001602052604090205460ff16611bf757604051637bfa4b9f60e01b815260040160405180910390fd5b600085815260026020819052604080832060018101889055918201869055600382018590556004909101805460ff19168415151790555186917fa7c3f5f04f0c05ad82fcdf81039da5a01bf41ce2769b7b347afa43bb65e4426691a25050505050565b6060600082516001600160401b03811115611c7757611c776128f0565b604051908082528060200260200182016040528015611cce57816020015b611cbb604051806060016040528060008152602001600081526020016000151581525090565b815260200190600190039081611c955790505b50905060005b835181101561127e576001600160a01b03851660009081526003602052604081208551909190869084908110611d0c57611d0c6130fe565b60209081029190910181015182528181019290925260409081016000208151606081018352815481526001820154938101939093526002015460ff161515908201528251839083908110611d6257611d626130fe565b6020908102919091010152600101611cd4565b611d7d612356565b60055460ff1615611da15760405163ab35696f60e01b815260040160405180910390fd5b600083815260026020526040902060040154839060ff16611dd55760405163ab4142cf60e01b815260040160405180910390fd5b6001600160a01b03831660009081526004602052604090205460ff16611e0e5760405163350b944160e11b815260040160405180910390fd5b60006001600160a01b038416611e765750600084815260026020526040902060010154348114611e515760405163cd1c886760e01b815260040160405180910390fd5b348314611e715760405163cd1c886760e01b815260040160405180910390fd5b611f33565b5060008481526002602090815260408083206001600160a01b0387168452909152902054828114611eba5760405163cd1c886760e01b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f319190613131565b505b611f3d338661238e565b600085815260026020526040812060030154611f5990426130d4565b6000878152600260208181526040928390209091015482516001600160a01b038a16815291820188905281830152606081018390529051919250879133917f180fe4b156a592a405cdd866f58883063db683348215e97cf864d6bf9679261c919081900360800190a350505061165c600160008051602061320b83398151915255565b6120196040518060c00160405280600081526020016000815260200160001515815260200160608152602001606081526020016000151581525090565b60008281526002602052604081209080612032856124e2565b6040805160c08101825260028701548082526003880154602083015260049097015460ff1615159181019190915260608101929092526080820152921560a084015250909392505050565b6001600160a01b038216600090815260036020908152604080832084845282528083208151606081018352815481526001820154938101939093526002015460ff1615159082018190526120d557600091505061071c565b60008381526002602052604090206003015481516120f391906130d4565b42111561210457600091505061071c565b600083815260026020819052604082200154908190036121295760019250505061071c565b50602001511515905061071c565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061071c565b6118db612690565b612170612690565b6118db6126b5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121ff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121f36000805160206131eb833981519152546001600160a01b031690565b6001600160a01b031614155b156118db5760405163703e46dd60e11b815260040160405180910390fd5b6000546001600160a01b03163314612248576040516330cd747160e01b815260040160405180910390fd5b50565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122a5575060408051601f3d908101601f191682019092526122a29181019061317c565b60015b6122d257604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206131eb833981519152811461230357604051632a87526960e21b8152600481018290526024016122c9565b61165c83836126bd565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118db5760405163703e46dd60e11b815260040160405180910390fd5b60008051602061320b83398151915280546001190161238857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821660009081526003602081815260408084208585528252808420600292839052908420918201549190920154919290919082900361241d57600283015460ff1680156123ef575082546123eb9082906130d4565b4211155b156123fb575050505050565b428355600060018085019190915560028401805460ff191690911790556124c7565b600283015460ff16801561243d575082546124399082906130d4565b4211155b156124ac578183600101600082825461245691906130d4565b9091555050600183015460408051848152602081019290925285916001600160a01b038816917fb76abe3c068fccae7ac0f9377f48f7261dcf952179a37060c5de877a493e67b7910160405180910390a36124c7565b428355600180840183905560028401805460ff191690911790555b5050505050565b600160008051602061320b83398151915255565b600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec54606091829160ff168015612532575060008481526002602052604090206001015415155b15612545578061254181613195565b9150505b806001600160401b0381111561255d5761255d6128f0565b604051908082528060200260200182016040528015612586578160200160208202803683370190505b509250806001600160401b038111156125a1576125a16128f0565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b50600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec549193509060ff16801561261a575060008581526002602052604090206001015415155b15612689576000848281518110612633576126336130fe565b6001600160a01b039092166020928302919091018201526000868152600290915260409020600101548351849083908110612670576126706130fe565b60209081029190910101528061268581613195565b9150505b5050915091565b612698612713565b6118db57604051631afcd79f60e31b815260040160405180910390fd5b6124ce612690565b6126c68261272d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561270b5761165c8282612792565b610e8f612808565b600061271d612137565b54600160401b900460ff16919050565b806001600160a01b03163b60000361276357604051634c9c8ce360e01b81526001600160a01b03821660048201526024016122c9565b6000805160206131eb83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127af91906131ae565b600060405180830381855af49150503d80600081146127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50915091506127ff858383612827565b95945050505050565b34156118db5760405163b398979f60e01b815260040160405180910390fd5b60608261283c5761283782612886565b61287f565b815115801561285357506001600160a01b0384163b155b1561287c57604051639996b31560e01b81526001600160a01b03851660048201526024016122c9565b50805b9392505050565b8051156128965780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6001600160a01b038116811461224857600080fd5b600080604083850312156128d757600080fd5b82356128e2816128af565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561292e5761292e6128f0565b604052919050565b60006001600160401b0382111561294f5761294f6128f0565b5060051b60200190565b600082601f83011261296a57600080fd5b813561297d61297882612936565b612906565b8082825260208201915060208360051b86010192508583111561299f57600080fd5b602085015b838110156129bc5780358352602092830192016129a4565b5095945050505050565b801515811461224857600080fd5b600082601f8301126129e557600080fd5b81356129f361297882612936565b8082825260208201915060208360051b860101925085831115612a1557600080fd5b602085015b838110156129bc578035612a2d816129c6565b835260209283019201612a1a565b600080600080600060a08688031215612a5357600080fd5b85356001600160401b03811115612a6957600080fd5b612a7588828901612959565b95505060208601356001600160401b03811115612a9157600080fd5b612a9d88828901612959565b94505060408601356001600160401b03811115612ab957600080fd5b612ac588828901612959565b93505060608601356001600160401b03811115612ae157600080fd5b612aed88828901612959565b92505060808601356001600160401b03811115612b0957600080fd5b612b15888289016129d4565b9150509295509295909350565b600060208284031215612b3457600080fd5b813561287f816128af565b600080600060608486031215612b5457600080fd5b833592506020840135612b66816128af565b929592945050506040919091013590565b600060208284031215612b8957600080fd5b5035919050565b600082601f830112612ba157600080fd5b8135612baf61297882612936565b8082825260208201915060208360051b860101925085831115612bd157600080fd5b602085015b838110156129bc578035612be9816128af565b835260209283019201612bd6565b600080600060608486031215612c0c57600080fd5b8335612c17816128af565b925060208401356001600160401b03811115612c3257600080fd5b612c3e86828701612b90565b92505060408401356001600160401b03811115612c5a57600080fd5b612c6686828701612b90565b9150509250925092565b60008060408385031215612c8357600080fd5b8235612c8e816128af565b915060208301356001600160401b03811115612ca957600080fd5b8301601f81018513612cba57600080fd5b80356001600160401b03811115612cd357612cd36128f0565b612ce6601f8201601f1916602001612906565b818152866020838501011115612cfb57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060408385031215612d2e57600080fd5b82356001600160401b03811115612d4457600080fd5b612d5085828601612b90565b92505060208301356001600160401b03811115612d6c57600080fd5b612d7885828601612959565b9150509250929050565b602080825282518282018190526000918401906040840190835b81811015612dbc5783511515835260209384019390920191600101612d9c565b509095945050505050565b81518152602080830151908201526040808301511515908201526060810161071c565b600080600060608486031215612dff57600080fd5b83356001600160401b03811115612e1557600080fd5b612e2186828701612959565b9350506020840135612e32816128af565b915060408401356001600160401b03811115612e4d57600080fd5b612c6686828701612959565b600080600060608486031215612e6e57600080fd5b83356001600160401b03811115612e8457600080fd5b612e9086828701612959565b9350506020840135612b66816128af565b60005b83811015612ebc578181015183820152602001612ea4565b50506000910152565b6020815260008251806020840152612ee4816040850160208701612ea1565b601f01601f19169190910160400192915050565b600080600080600060a08688031215612f1057600080fd5b853594506020860135935060408601359250606086013591506080860135612f37816129c6565b809150509295509295909350565b60008060408385031215612f5857600080fd5b8235612f63816128af565b915060208301356001600160401b03811115612d6c57600080fd5b602080825282518282018190526000918401906040840190835b81811015612dbc57612fc183855180518252602080820151908301526040908101511515910152565b6020939093019260609290920191600101612f98565b600081518084526020840193506020830160005b82811015613009578151865260209586019590910190600101612feb565b5093949350505050565b60208152600060e082018351602084015260208401516040840152604084015115156060840152606084015160c0608085015281815180845261010086019150602083019350600092505b808310156130895783516001600160a01b03168252602093840193600193909301929091019061305e565b506080860151858203601f190160a087015292506130a78184612fd7565b9250505060a084015161127e60c085018215159052565b634e487b7160e01b600052601160045260246000fd5b8082018082111561071c5761071c6130be565b6000816130f6576130f66130be565b506000190190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561312657600080fd5b815161287f816128af565b60006020828403121561314357600080fd5b815161287f816129c6565b6060815260006131616060830186612fd7565b6001600160a01b039490941660208301525060400152919050565b60006020828403121561318e57600080fd5b5051919050565b6000600182016131a7576131a76130be565b5060010190565b600082516131c0818460208701612ea1565b919091019291505056fe2ccc6c74b339e9d58b89aa6bb58d0519712aeff106f7981d466f54572cb88b42360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212205360a02460f8e8d4dfce4cfc45d45f74b6c93829f4b3e42714bf9ccaa698894a64736f6c634300081c0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE ADDRESS PUSH1 0x80 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D PUSH2 0x22 JUMP JUMPDEST PUSH2 0xD4 JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x72 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND EQ PUSH2 0xD1 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x3260 PUSH2 0xFD PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x2183 ADD MSTORE DUP2 DUP2 PUSH2 0x21AC ADD MSTORE PUSH2 0x2318 ADD MSTORE PUSH2 0x3260 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x19C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70480275 GT PUSH2 0xEC JUMPI DUP1 PUSH4 0x99EA24FE GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xB303F53F GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xB303F53F EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0xB6F1D140 EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xB8E8F98E EQ PUSH2 0x4F9 JUMPI DUP1 PUSH4 0xCAAE24B3 EQ PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x99EA24FE EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0xB1B105FE EQ PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x86778641 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x86778641 EQ PUSH2 0x3C6 JUMPI DUP1 PUSH4 0x8D13660E EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x8F0FF11B EQ PUSH2 0x413 JUMPI DUP1 PUSH4 0x8FD3AB80 EQ PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70480275 EQ PUSH2 0x371 JUMPI DUP1 PUSH4 0x76319190 EQ PUSH2 0x391 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40033B3D GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x529E2B32 GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x529E2B32 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x52D1902D EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x6D69FCAF EQ PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40033B3D EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x4A200FA5 EQ PUSH2 0x2B9 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x2D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5059571 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x9B952BE EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x1785F53C EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x240028E8 EQ PUSH2 0x218 JUMPI DUP1 PUSH4 0x3428CEBB EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x271 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x1BC CALLDATASIZE PUSH1 0x4 PUSH2 0x28C4 JUMP JUMPDEST PUSH2 0x546 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x1F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A3B JUMP JUMPDEST PUSH2 0x722 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x213 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x952 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x233 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x26C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3F JUMP JUMPDEST PUSH2 0x9ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0xADE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x2A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B77 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x2D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BF7 JUMP JUMPDEST PUSH2 0xB3E JUMP JUMPDEST PUSH2 0x1F6 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0xE74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30C PUSH2 0x307 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D1B JUMP JUMPDEST PUSH2 0xE93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2D82 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32E PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x32E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x36C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x12A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x131F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x3AC CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x13C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x1439 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x3E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3F JUMP JUMPDEST PUSH2 0x149C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x406 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x28C4 JUMP JUMPDEST PUSH2 0x1661 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2DC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x2DEA JUMP JUMPDEST PUSH2 0x16DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x18B0 JUMP JUMPDEST PUSH2 0x1F6 PUSH2 0x456 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E59 JUMP JUMPDEST PUSH2 0x18DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x352E302E3 PUSH1 0xDC SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2EC5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x4B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1BC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D9 PUSH2 0x4D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F45 JUMP JUMPDEST PUSH2 0x1C5A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2F7E JUMP JUMPDEST PUSH2 0x1F6 PUSH2 0x4F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3F JUMP JUMPDEST PUSH2 0x1D75 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x505 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x519 PUSH2 0x514 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B77 JUMP JUMPDEST PUSH2 0x1FDC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x3013 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x28C4 JUMP JUMPDEST PUSH2 0x207D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x576 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND PUSH2 0x5BE JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP2 SLOAD PUSH2 0x5DC SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x5FC JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x654 JUMPI DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x641 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x71C JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x679 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x68B DUP4 PUSH2 0x30E7 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x1 ADD SLOAD PUSH1 0x40 MLOAD PUSH2 0x6BE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x715 JUMPI PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH32 0x294E395C96EE31E4373F6B284B107E5341FFA80F2C53E582BC3CFB1F9EFE500E SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x752 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 MLOAD DUP6 MLOAD EQ ISZERO DUP1 PUSH2 0x765 JUMPI POP DUP3 MLOAD DUP6 MLOAD EQ ISZERO JUMPDEST DUP1 PUSH2 0x772 JUMPI POP DUP2 MLOAD DUP6 MLOAD EQ ISZERO JUMPDEST DUP1 PUSH2 0x77F JUMPI POP DUP1 MLOAD DUP6 MLOAD EQ ISZERO JUMPDEST ISZERO PUSH2 0x79D JUMPI PUSH1 0x40 MLOAD PUSH4 0x512509D3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x94A JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x7BB JUMPI PUSH2 0x7BB PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x7DC JUMPI PUSH2 0x7DC PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x80B JUMPI PUSH2 0x80B PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x82C JUMPI PUSH2 0x82C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD DUP2 SWAP1 SSTORE POP DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x85B JUMPI PUSH2 0x85B PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x87C JUMPI PUSH2 0x87C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD DUP2 SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x8AB JUMPI PUSH2 0x8AB PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8CC JUMPI PUSH2 0x8CC PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x90E JUMPI PUSH2 0x90E PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH32 0xA7C3F5F04F0C05AD82FCDF81039DA5A01BF41CE2769B7B347AFA43BB65E44266 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x7A0 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x97D JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xA3B62BC36326052D97EA62D63C3D60308ED4C3EA8AC079DD8499F1E9C4F80C0F SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xA1D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xA56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP3 SWAP1 SSTORE PUSH2 0xA95 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0x376716BD86293FF8B34061B9AF3CAC5116F15E0F2CBF689D822B6D6D7B1EECA9 DUP4 PUSH1 0x40 MLOAD PUSH2 0xAD1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA45F47FDEA8A1EFDD9029A5691C7F759C32B7C698632B563573E155625D16933 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB48 PUSH2 0x2137 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xB8B JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xBB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xBE1 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH2 0xC08 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC10 PUSH2 0x2160 JUMP JUMPDEST PUSH2 0xC18 PUSH2 0x2168 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND OR DUP2 SSTORE PUSH1 0x1 PUSH1 0x6 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0xD31 JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC69 JUMPI PUSH2 0xC69 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD29 JUMPI PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 ADD PUSH1 0x0 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC9A JUMPI PUSH2 0xC9A PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xCEB JUMPI PUSH2 0xCEB PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x44D6D25963F097AD14F29F06854A01F575648A1EF82F30E562CCD3889717E339 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 ADD PUSH2 0xC43 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0xE23 JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xD5B JUMPI PUSH2 0xD5B PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE1B JUMPI PUSH1 0x1 PUSH1 0x0 PUSH1 0x4 ADD PUSH1 0x0 DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xD8C JUMPI PUSH2 0xD8C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xDDD JUMPI PUSH2 0xDDD PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD1BE2E90BD3D24839D9DD94AD871068E1F9688B02FA43F2A62C9975DFA9DE2D7 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 ADD PUSH2 0xD35 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0xE6A JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE7C PUSH2 0x2178 JUMP JUMPDEST PUSH2 0xE85 DUP3 PUSH2 0x221D JUMP JUMPDEST PUSH2 0xE8F DUP3 DUP3 PUSH2 0x224B JUMP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0xEC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0xEE8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x512509D3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xF03 JUMPI PUSH2 0xF03 PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF2C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x127E JUMPI PUSH1 0x0 DUP1 PUSH1 0x3 ADD PUSH1 0x0 DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF55 JUMPI PUSH2 0xF55 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF91 JUMPI PUSH2 0xF91 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP DUP1 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0xFE9 JUMPI PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xFD3 JUMPI PUSH2 0xFD3 PUSH2 0x30FE JUMP JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE POP PUSH2 0x1276 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1002 JUMPI PUSH2 0x1002 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD SLOAD DUP2 PUSH1 0x0 ADD SLOAD PUSH2 0x102B SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x1046 JUMPI PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xFD3 JUMPI PUSH2 0xFD3 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x2 ADD PUSH1 0x0 DUP8 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1060 JUMPI PUSH2 0x1060 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1112 JUMPI DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1096 JUMPI PUSH2 0x1096 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x10B0 JUMPI PUSH2 0x10B0 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x10E1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x10FD JUMPI PUSH2 0x10FD PUSH2 0x30FE JUMP JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH2 0x1273 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x114B JUMPI PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1132 JUMPI PUSH2 0x1132 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 ISZERO ISZERO SWAP1 DUP2 ISZERO ISZERO DUP2 MSTORE POP POP POP POP PUSH2 0x1276 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x115D DUP4 PUSH2 0x30E7 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1174 JUMPI PUSH2 0x1174 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI PUSH2 0x118E PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x1 ADD SLOAD PUSH1 0x40 MLOAD PUSH2 0x11C2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x124E JUMPI PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP6 MLOAD DUP7 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x11F6 JUMPI PUSH2 0x11F6 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1210 JUMPI PUSH2 0x1210 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x294E395C96EE31E4373F6B284B107E5341FFA80F2C53E582BC3CFB1F9EFE500E PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1262 JUMPI PUSH2 0x1262 PUSH2 0x30FE JUMP JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xF32 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1290 PUSH2 0x230D JUMP JUMPDEST POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x12D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xD1BE2E90BD3D24839D9DD94AD871068E1F9688B02FA43F2A62C9975DFA9DE2D7 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x134A JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1371 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x44D6D25963F097AD14F29F06854A01F575648A1EF82F30E562CCD3889717E339 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x13F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xBEA12876694C4055C71F74308F752B9027CF3D554194000A366ABDDFC239A306 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1464 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E87FAC88FF661F02D44F95383C817FECE4BCE600A3DAB7A54406878B965E752 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x14A4 PUSH2 0x2356 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x14C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB35696F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP4 SWAP1 PUSH1 0xFF AND PUSH2 0x14FC JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB4142CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x31A9108F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x6352211E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1567 SWAP2 SWAP1 PUSH2 0x3114 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x158E JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x15FE CALLER DUP6 PUSH2 0x238E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP6 SWAP2 CALLER SWAP2 PUSH32 0xD0DE3E759B6D8AE4AB8DFD56F0869B691034BF2F14B896155287E5CD61D66A70 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x165C PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1687 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x170A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP4 MLOAD EQ PUSH2 0x172C JUMPI PUSH1 0x40 MLOAD PUSH4 0x512509D3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1765 JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x18AA JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1783 JUMPI PUSH2 0x1783 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x17A4 JUMPI PUSH2 0x17A4 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD DUP3 MSTORE DUP2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP4 MSTORE SWAP4 MSTORE KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x182C JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x17ED JUMPI PUSH2 0x17ED PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x180E JUMPI PUSH2 0x180E PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1848 JUMPI PUSH2 0x1848 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH32 0x376716BD86293FF8B34061B9AF3CAC5116F15E0F2CBF689D822B6D6D7B1EECA9 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1883 JUMPI PUSH2 0x1883 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x189A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 ADD PUSH2 0x1768 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x18E5 PUSH2 0x2356 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1909 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB35696F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1942 JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x1A65 JUMPI PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1968 JUMPI PUSH2 0x1968 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND PUSH2 0x19A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB4142CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x19F9 JUMPI PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x19CD JUMPI PUSH2 0x19CD PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 PUSH2 0x19F2 SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A5D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A12 JUMPI PUSH2 0x1A12 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP3 PUSH2 0x1A5A SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1946 JUMP JUMPDEST POP DUP1 DUP3 EQ PUSH2 0x1A86 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1AB9 JUMPI DUP2 CALLVALUE EQ PUSH2 0x1AB4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B0C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B30 SWAP2 SWAP1 PUSH2 0x3131 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x1B69 JUMPI PUSH2 0x1B61 CALLER DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1B54 JUMPI PUSH2 0x1B54 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x238E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1B35 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2BE07A645F06BFA8B189B4F0ABA9BF2109D098D03CBEDE0449641495BBA5D53D DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1BA7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x314E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP PUSH2 0x165C PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1BF7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 DUP2 ADD DUP9 SWAP1 SSTORE SWAP2 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x3 DUP3 ADD DUP6 SWAP1 SSTORE PUSH1 0x4 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND DUP5 ISZERO ISZERO OR SWAP1 SSTORE MLOAD DUP7 SWAP2 PUSH32 0xA7C3F5F04F0C05AD82FCDF81039DA5A01BF41CE2769B7B347AFA43BB65E44266 SWAP2 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1C77 JUMPI PUSH2 0x1C77 PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1CCE JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1CBB PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1C95 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x127E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP6 MLOAD SWAP1 SWAP2 SWAP1 DUP7 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1D0C JUMPI PUSH2 0x1D0C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD DUP3 MSTORE DUP2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP1 DUP3 ADD MSTORE DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1D62 JUMPI PUSH2 0x1D62 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1CD4 JUMP JUMPDEST PUSH2 0x1D7D PUSH2 0x2356 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1DA1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB35696F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP4 SWAP1 PUSH1 0xFF AND PUSH2 0x1DD5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB4142CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1E76 JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD CALLVALUE DUP2 EQ PUSH2 0x1E51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLVALUE DUP4 EQ PUSH2 0x1E71 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1F33 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 EQ PUSH2 0x1EBA JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F31 SWAP2 SWAP1 PUSH2 0x3131 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1F3D CALLER DUP7 PUSH2 0x238E JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH2 0x1F59 SWAP1 TIMESTAMP PUSH2 0x30D4 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP2 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP DUP8 SWAP2 CALLER SWAP2 PUSH32 0x180FE4B156A592A405CDD866F58883063DB683348215E97CF864D6BF9679261C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP POP PUSH2 0x165C PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH2 0x2019 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 DUP1 PUSH2 0x2032 DUP6 PUSH2 0x24E2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x2 DUP8 ADD SLOAD DUP1 DUP3 MSTORE PUSH1 0x3 DUP9 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x4 SWAP1 SWAP8 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP3 ADD MSTORE SWAP3 ISZERO PUSH1 0xA0 DUP5 ADD MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x20D5 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP2 MLOAD PUSH2 0x20F3 SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x2104 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2129 JUMPI PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x71C JUMP JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO ISZERO SWAP1 POP PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 PUSH2 0x71C JUMP JUMPDEST PUSH2 0x18DB PUSH2 0x2690 JUMP JUMPDEST PUSH2 0x2170 PUSH2 0x2690 JUMP JUMPDEST PUSH2 0x18DB PUSH2 0x26B5 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x21FF JUMPI POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21F3 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x703E46DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2248 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x52D1902D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x22A5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x22A2 SWAP2 DUP2 ADD SWAP1 PUSH2 0x317C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x22D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 EQ PUSH2 0x2303 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A875269 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x22C9 JUMP JUMPDEST PUSH2 0x165C DUP4 DUP4 PUSH2 0x26BD JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x703E46DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP1 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x2388 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 PUSH1 0x2 SWAP3 DUP4 SWAP1 MSTORE SWAP1 DUP5 KECCAK256 SWAP2 DUP3 ADD SLOAD SWAP2 SWAP1 SWAP3 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB PUSH2 0x241D JUMPI PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x23EF JUMPI POP DUP3 SLOAD PUSH2 0x23EB SWAP1 DUP3 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO JUMPDEST ISZERO PUSH2 0x23FB JUMPI POP POP POP POP POP JUMP JUMPDEST TIMESTAMP DUP4 SSTORE PUSH1 0x0 PUSH1 0x1 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x24C7 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x243D JUMPI POP DUP3 SLOAD PUSH2 0x2439 SWAP1 DUP3 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO JUMPDEST ISZERO PUSH2 0x24AC JUMPI DUP2 DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2456 SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0xB76ABE3C068FCCAE7AC0F9377F48F7261DCF952179A37060C5DE877A493E67B7 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x24C7 JUMP JUMPDEST TIMESTAMP DUP4 SSTORE PUSH1 0x1 DUP1 DUP5 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH32 0x17EF568E3E12AB5B9C7254A8D58478811DE00F9E6EB34345ACD53BF8FD09D3EC SLOAD PUSH1 0x60 SWAP2 DUP3 SWAP2 PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x2532 JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x2545 JUMPI DUP1 PUSH2 0x2541 DUP2 PUSH2 0x3195 JUMP JUMPDEST SWAP2 POP POP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x255D JUMPI PUSH2 0x255D PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2586 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25A1 JUMPI PUSH2 0x25A1 PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25CA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH32 0x17EF568E3E12AB5B9C7254A8D58478811DE00F9E6EB34345ACD53BF8FD09D3EC SLOAD SWAP2 SWAP4 POP SWAP1 PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x261A JUMPI POP PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x2689 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2633 JUMPI PUSH2 0x2633 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP4 MLOAD DUP5 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x2670 JUMPI PUSH2 0x2670 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x2685 DUP2 PUSH2 0x3195 JUMP JUMPDEST SWAP2 POP POP JUMPDEST POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x2698 PUSH2 0x2713 JUMP JUMPDEST PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x24CE PUSH2 0x2690 JUMP JUMPDEST PUSH2 0x26C6 DUP3 PUSH2 0x272D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0x270B JUMPI PUSH2 0x165C DUP3 DUP3 PUSH2 0x2792 JUMP JUMPDEST PUSH2 0xE8F PUSH2 0x2808 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x271D PUSH2 0x2137 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0x2763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x22C9 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x27AF SWAP2 SWAP1 PUSH2 0x31AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x27EA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x27EF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x27FF DUP6 DUP4 DUP4 PUSH2 0x2827 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0xB398979F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x283C JUMPI PUSH2 0x2837 DUP3 PUSH2 0x2886 JUMP JUMPDEST PUSH2 0x287F JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2853 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x287C JUMPI PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x22C9 JUMP JUMPDEST POP DUP1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2896 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD6BDA275 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x28E2 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x292E JUMPI PUSH2 0x292E PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x294F JUMPI PUSH2 0x294F PUSH2 0x28F0 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x296A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x297D PUSH2 0x2978 DUP3 PUSH2 0x2936 JUMP JUMPDEST PUSH2 0x2906 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x299F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29BC JUMPI DUP1 CALLDATALOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x29A4 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x29E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x29F3 PUSH2 0x2978 DUP3 PUSH2 0x2936 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x2A15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29BC JUMPI DUP1 CALLDATALOAD PUSH2 0x2A2D DUP2 PUSH2 0x29C6 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x2A1A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2A53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A75 DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A9D DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AC5 DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AED DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2B09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B15 DUP9 DUP3 DUP10 ADD PUSH2 0x29D4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x287F DUP2 PUSH2 0x28AF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2B54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2B66 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2BA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2BAF PUSH2 0x2978 DUP3 PUSH2 0x2936 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x2BD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29BC JUMPI DUP1 CALLDATALOAD PUSH2 0x2BE9 DUP2 PUSH2 0x28AF JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x2BD6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2C0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2C17 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C3E DUP7 DUP3 DUP8 ADD PUSH2 0x2B90 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C66 DUP7 DUP3 DUP8 ADD PUSH2 0x2B90 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2C83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2C8E DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x2CBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CD3 JUMPI PUSH2 0x2CD3 PUSH2 0x28F0 JUMP JUMPDEST PUSH2 0x2CE6 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2906 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP7 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D50 DUP6 DUP3 DUP7 ADD PUSH2 0x2B90 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D78 DUP6 DUP3 DUP7 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DBC JUMPI DUP4 MLOAD ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2D9C JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2DFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E21 DUP7 DUP3 DUP8 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2E32 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C66 DUP7 DUP3 DUP8 ADD PUSH2 0x2959 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2E6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E90 DUP7 DUP3 DUP8 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2B66 DUP2 PUSH2 0x28AF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2EBC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2EA4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2EE4 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x2EA1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2F10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x2F37 DUP2 PUSH2 0x29C6 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2F58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2F63 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DBC JUMPI PUSH2 0x2FC1 DUP4 DUP6 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2F98 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3009 JUMPI DUP2 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2FEB JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH1 0xE0 DUP3 ADD DUP4 MLOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE DUP2 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x100 DUP7 ADD SWAP2 POP PUSH1 0x20 DUP4 ADD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x3089 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 PUSH1 0x1 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x305E JUMP JUMPDEST POP PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP3 SUB PUSH1 0x1F NOT ADD PUSH1 0xA0 DUP8 ADD MSTORE SWAP3 POP PUSH2 0x30A7 DUP2 DUP5 PUSH2 0x2FD7 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0x127E PUSH1 0xC0 DUP6 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x71C JUMPI PUSH2 0x71C PUSH2 0x30BE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x30F6 JUMPI PUSH2 0x30F6 PUSH2 0x30BE JUMP JUMPDEST POP PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x287F DUP2 PUSH2 0x28AF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x287F DUP2 PUSH2 0x29C6 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3161 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x2FD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x318E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x31A7 JUMPI PUSH2 0x31A7 PUSH2 0x30BE JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x31C0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2EA1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID 0x2C 0xCC PUSH13 0x74B339E9D58B89AA6BB58D0519 PUSH18 0x2AEFF106F7981D466F54572CB88B42360894 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC9B779B17422D0DF9222301 DUP12 ORIGIN 0xB4 0xD1 STATICCALL CHAINID 0xE0 PUSH18 0x723D6817E2486D003BECC55F00A264697066 PUSH20 0x582212205360A02460F8E8D4DFCE4CFC45D45F74 0xB6 0xC9 CODESIZE 0x29 DELEGATECALL 0xB3 0xE4 0x27 EQ 0xBF SWAP13 0xCA 0xA6 SWAP9 DUP10 BLOBBASEFEE PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"658:24517:14:-:0;;;1171:4:1;1128:48;;1491:53:14;;;;;;;;;-1:-1:-1;1515:22:14;:20;:22::i;:::-;658:24517;;7709:422:0;3147:66;7898:15;;;;;;;7894:76;;;7936:23;;-1:-1:-1;;;7936:23:0;;;;;;;;;;;7894:76;7983:14;;-1:-1:-1;;;;;7983:14:0;;;:34;7979:146;;8033:33;;-1:-1:-1;;;;;;8033:33:0;-1:-1:-1;;;;;8033:33:0;;;;;8085:29;;158:50:17;;;8085:29:0;;146:2:17;131:18;8085:29:0;;;;;;;7979:146;7758:373;7709:422::o;14:200:17:-;658:24517:14;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@UPGRADE_INTERFACE_VERSION_291":{"entryPoint":null,"id":291,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_489":{"entryPoint":8552,"id":489,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_unchained_507":{"entryPoint":9909,"id":507,"parameterSlots":0,"returnSlots":0},"@__UUPSUpgradeable_init_321":{"entryPoint":8544,"id":321,"parameterSlots":0,"returnSlots":0},"@_authorizeUpgrade_1890":{"entryPoint":8733,"id":1890,"parameterSlots":1,"returnSlots":0},"@_checkInitializing_175":{"entryPoint":9872,"id":175,"parameterSlots":0,"returnSlots":0},"@_checkNonPayable_902":{"entryPoint":10248,"id":902,"parameterSlots":0,"returnSlots":0},"@_checkNotDelegated_397":{"entryPoint":8973,"id":397,"parameterSlots":0,"returnSlots":0},"@_checkProxy_381":{"entryPoint":8568,"id":381,"parameterSlots":0,"returnSlots":0},"@_getInitializableStorage_266":{"entryPoint":8503,"id":266,"parameterSlots":0,"returnSlots":1},"@_getReentrancyGuardStorage_477":{"entryPoint":null,"id":477,"parameterSlots":0,"returnSlots":1},"@_getSupportedTokensForContent_3388":{"entryPoint":9442,"id":3388,"parameterSlots":1,"returnSlots":2},"@_initializableStorageSlot_252":{"entryPoint":null,"id":252,"parameterSlots":0,"returnSlots":1},"@_isInitializing_243":{"entryPoint":10003,"id":243,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_559":{"entryPoint":9422,"id":559,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_543":{"entryPoint":9046,"id":543,"parameterSlots":0,"returnSlots":0},"@_revert_1490":{"entryPoint":10374,"id":1490,"parameterSlots":1,"returnSlots":0},"@_setImplementation_682":{"entryPoint":10029,"id":682,"parameterSlots":1,"returnSlots":0},"@_updateViewPermission_2802":{"entryPoint":9102,"id":2802,"parameterSlots":2,"returnSlots":0},"@_upgradeToAndCallUUPS_448":{"entryPoint":8779,"id":448,"parameterSlots":2,"returnSlots":0},"@addAdmin_1921":{"entryPoint":4895,"id":1921,"parameterSlots":1,"returnSlots":0},"@addSupportedToken_2313":{"entryPoint":4771,"id":2313,"parameterSlots":1,"returnSlots":0},"@batchConsumeView_3244":{"entryPoint":3731,"id":3244,"parameterSlots":2,"returnSlots":1},"@batchPurchase_2623":{"entryPoint":6365,"id":2623,"parameterSlots":3,"returnSlots":0},"@batchSetContentConfig_2129":{"entryPoint":1826,"id":2129,"parameterSlots":5,"returnSlots":0},"@batchUpdateTokenPrice_2292":{"entryPoint":5850,"id":2292,"parameterSlots":3,"returnSlots":0},"@consumeView_3054":{"entryPoint":1350,"id":3054,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_1408":{"entryPoint":10130,"id":1408,"parameterSlots":2,"returnSlots":1},"@getAddressSlot_1548":{"entryPoint":null,"id":1548,"parameterSlots":1,"returnSlots":1},"@getContentPurchaseInfo_3292":{"entryPoint":8156,"id":3292,"parameterSlots":1,"returnSlots":1},"@getImplementation_655":{"entryPoint":null,"id":655,"parameterSlots":0,"returnSlots":1},"@getPermissionDetails_2943":{"entryPoint":5729,"id":2943,"parameterSlots":2,"returnSlots":1},"@getUserPermissions_2924":{"entryPoint":7258,"id":2924,"parameterSlots":2,"returnSlots":1},"@hasViewPermission_2868":{"entryPoint":8317,"id":2868,"parameterSlots":2,"returnSlots":1},"@initialize_1863":{"entryPoint":2878,"id":1863,"parameterSlots":3,"returnSlots":0},"@isContentActive_2144":{"entryPoint":null,"id":2144,"parameterSlots":1,"returnSlots":1},"@isSupportedToken_2348":{"entryPoint":null,"id":2348,"parameterSlots":1,"returnSlots":1},"@migrate_1880":{"entryPoint":6320,"id":1880,"parameterSlots":0,"returnSlots":0},"@pause_3404":{"entryPoint":5177,"id":3404,"parameterSlots":0,"returnSlots":0},"@proxiableUUID_339":{"entryPoint":4742,"id":339,"parameterSlots":0,"returnSlots":1},"@purchaseContent_2472":{"entryPoint":7541,"id":2472,"parameterSlots":3,"returnSlots":0},"@purchaseWithNFT_2681":{"entryPoint":5276,"id":2681,"parameterSlots":3,"returnSlots":0},"@removeAdmin_1952":{"entryPoint":2386,"id":1952,"parameterSlots":1,"returnSlots":0},"@removeSupportedToken_2334":{"entryPoint":5056,"id":2334,"parameterSlots":1,"returnSlots":0},"@setContentConfig_2009":{"entryPoint":7111,"id":2009,"parameterSlots":5,"returnSlots":0},"@unpause_3420":{"entryPoint":2782,"id":3420,"parameterSlots":0,"returnSlots":0},"@updateTokenPrice_2200":{"entryPoint":2541,"id":2200,"parameterSlots":3,"returnSlots":0},"@upgradeToAndCall_359":{"entryPoint":3700,"id":359,"parameterSlots":2,"returnSlots":0},"@upgradeToAndCall_718":{"entryPoint":9917,"id":718,"parameterSlots":2,"returnSlots":0},"@verifyCallResultFromTarget_1448":{"entryPoint":10279,"id":1448,"parameterSlots":3,"returnSlots":1},"@version_1873":{"entryPoint":null,"id":1873,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":11152,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_bool_dyn":{"entryPoint":10708,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":10585,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":11042,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":12564,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptr":{"entryPoint":11255,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":12101,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_bytes_memory_ptr":{"entryPoint":11376,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":10436,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":11547,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_addresst_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":11754,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_addresst_uint256":{"entryPoint":11865,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_bool_$dyn_memory_ptr":{"entryPoint":10811,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":12593,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":12668,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":11127,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_addresst_uint256":{"entryPoint":11071,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_bool":{"entryPoint":12024,"id":null,"parameterSlots":2,"returnSlots":5},"abi_encode_array_uint256_dyn":{"entryPoint":12247,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_ViewPermission":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":12718,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_array$_t_bool_$dyn_memory_ptr__to_t_array$_t_bool_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":11650,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":12158,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_uint256__fromStack_reversed":{"entryPoint":12622,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":11973,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ContentPurchaseInfo_$3440_memory_ptr__to_t_struct$_ContentPurchaseInfo_$3440_memory_ptr__fromStack_reversed":{"entryPoint":12307,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ViewPermission_$3767_memory_ptr__to_t_struct$_ViewPermission_$3767_memory_ptr__fromStack_reversed":{"entryPoint":11719,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_memory":{"entryPoint":10502,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":10550,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":12500,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":11937,"id":null,"parameterSlots":3,"returnSlots":0},"decrement_t_uint256":{"entryPoint":12519,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":12693,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":12478,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":12542,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":10480,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":10415,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":10694,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:19420:17","nodeType":"YulBlock","src":"0:19420:17","statements":[{"nativeSrc":"6:3:17","nodeType":"YulBlock","src":"6:3:17","statements":[]},{"body":{"nativeSrc":"59:86:17","nodeType":"YulBlock","src":"59:86:17","statements":[{"body":{"nativeSrc":"123:16:17","nodeType":"YulBlock","src":"123:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"132:1:17","nodeType":"YulLiteral","src":"132:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"135:1:17","nodeType":"YulLiteral","src":"135:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"125:6:17","nodeType":"YulIdentifier","src":"125:6:17"},"nativeSrc":"125:12:17","nodeType":"YulFunctionCall","src":"125:12:17"},"nativeSrc":"125:12:17","nodeType":"YulExpressionStatement","src":"125:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"82:5:17","nodeType":"YulIdentifier","src":"82:5:17"},{"arguments":[{"name":"value","nativeSrc":"93:5:17","nodeType":"YulIdentifier","src":"93:5:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"108:3:17","nodeType":"YulLiteral","src":"108:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"113:1:17","nodeType":"YulLiteral","src":"113:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"104:3:17","nodeType":"YulIdentifier","src":"104:3:17"},"nativeSrc":"104:11:17","nodeType":"YulFunctionCall","src":"104:11:17"},{"kind":"number","nativeSrc":"117:1:17","nodeType":"YulLiteral","src":"117:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"100:3:17","nodeType":"YulIdentifier","src":"100:3:17"},"nativeSrc":"100:19:17","nodeType":"YulFunctionCall","src":"100:19:17"}],"functionName":{"name":"and","nativeSrc":"89:3:17","nodeType":"YulIdentifier","src":"89:3:17"},"nativeSrc":"89:31:17","nodeType":"YulFunctionCall","src":"89:31:17"}],"functionName":{"name":"eq","nativeSrc":"79:2:17","nodeType":"YulIdentifier","src":"79:2:17"},"nativeSrc":"79:42:17","nodeType":"YulFunctionCall","src":"79:42:17"}],"functionName":{"name":"iszero","nativeSrc":"72:6:17","nodeType":"YulIdentifier","src":"72:6:17"},"nativeSrc":"72:50:17","nodeType":"YulFunctionCall","src":"72:50:17"},"nativeSrc":"69:70:17","nodeType":"YulIf","src":"69:70:17"}]},"name":"validator_revert_address","nativeSrc":"14:131:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"48:5:17","nodeType":"YulTypedName","src":"48:5:17","type":""}],"src":"14:131:17"},{"body":{"nativeSrc":"237:280:17","nodeType":"YulBlock","src":"237:280:17","statements":[{"body":{"nativeSrc":"283:16:17","nodeType":"YulBlock","src":"283:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"292:1:17","nodeType":"YulLiteral","src":"292:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"295:1:17","nodeType":"YulLiteral","src":"295:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"285:6:17","nodeType":"YulIdentifier","src":"285:6:17"},"nativeSrc":"285:12:17","nodeType":"YulFunctionCall","src":"285:12:17"},"nativeSrc":"285:12:17","nodeType":"YulExpressionStatement","src":"285:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"258:7:17","nodeType":"YulIdentifier","src":"258:7:17"},{"name":"headStart","nativeSrc":"267:9:17","nodeType":"YulIdentifier","src":"267:9:17"}],"functionName":{"name":"sub","nativeSrc":"254:3:17","nodeType":"YulIdentifier","src":"254:3:17"},"nativeSrc":"254:23:17","nodeType":"YulFunctionCall","src":"254:23:17"},{"kind":"number","nativeSrc":"279:2:17","nodeType":"YulLiteral","src":"279:2:17","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"250:3:17","nodeType":"YulIdentifier","src":"250:3:17"},"nativeSrc":"250:32:17","nodeType":"YulFunctionCall","src":"250:32:17"},"nativeSrc":"247:52:17","nodeType":"YulIf","src":"247:52:17"},{"nativeSrc":"308:36:17","nodeType":"YulVariableDeclaration","src":"308:36:17","value":{"arguments":[{"name":"headStart","nativeSrc":"334:9:17","nodeType":"YulIdentifier","src":"334:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"321:12:17","nodeType":"YulIdentifier","src":"321:12:17"},"nativeSrc":"321:23:17","nodeType":"YulFunctionCall","src":"321:23:17"},"variables":[{"name":"value","nativeSrc":"312:5:17","nodeType":"YulTypedName","src":"312:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"378:5:17","nodeType":"YulIdentifier","src":"378:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"353:24:17","nodeType":"YulIdentifier","src":"353:24:17"},"nativeSrc":"353:31:17","nodeType":"YulFunctionCall","src":"353:31:17"},"nativeSrc":"353:31:17","nodeType":"YulExpressionStatement","src":"353:31:17"},{"nativeSrc":"393:15:17","nodeType":"YulAssignment","src":"393:15:17","value":{"name":"value","nativeSrc":"403:5:17","nodeType":"YulIdentifier","src":"403:5:17"},"variableNames":[{"name":"value0","nativeSrc":"393:6:17","nodeType":"YulIdentifier","src":"393:6:17"}]},{"nativeSrc":"417:16:17","nodeType":"YulVariableDeclaration","src":"417:16:17","value":{"kind":"number","nativeSrc":"432:1:17","nodeType":"YulLiteral","src":"432:1:17","type":"","value":"0"},"variables":[{"name":"value_1","nativeSrc":"421:7:17","nodeType":"YulTypedName","src":"421:7:17","type":""}]},{"nativeSrc":"442:43:17","nodeType":"YulAssignment","src":"442:43:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"470:9:17","nodeType":"YulIdentifier","src":"470:9:17"},{"kind":"number","nativeSrc":"481:2:17","nodeType":"YulLiteral","src":"481:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"466:3:17","nodeType":"YulIdentifier","src":"466:3:17"},"nativeSrc":"466:18:17","nodeType":"YulFunctionCall","src":"466:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"453:12:17","nodeType":"YulIdentifier","src":"453:12:17"},"nativeSrc":"453:32:17","nodeType":"YulFunctionCall","src":"453:32:17"},"variableNames":[{"name":"value_1","nativeSrc":"442:7:17","nodeType":"YulIdentifier","src":"442:7:17"}]},{"nativeSrc":"494:17:17","nodeType":"YulAssignment","src":"494:17:17","value":{"name":"value_1","nativeSrc":"504:7:17","nodeType":"YulIdentifier","src":"504:7:17"},"variableNames":[{"name":"value1","nativeSrc":"494:6:17","nodeType":"YulIdentifier","src":"494:6:17"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nativeSrc":"150:367:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"195:9:17","nodeType":"YulTypedName","src":"195:9:17","type":""},{"name":"dataEnd","nativeSrc":"206:7:17","nodeType":"YulTypedName","src":"206:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"218:6:17","nodeType":"YulTypedName","src":"218:6:17","type":""},{"name":"value1","nativeSrc":"226:6:17","nodeType":"YulTypedName","src":"226:6:17","type":""}],"src":"150:367:17"},{"body":{"nativeSrc":"563:50:17","nodeType":"YulBlock","src":"563:50:17","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"580:3:17","nodeType":"YulIdentifier","src":"580:3:17"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"599:5:17","nodeType":"YulIdentifier","src":"599:5:17"}],"functionName":{"name":"iszero","nativeSrc":"592:6:17","nodeType":"YulIdentifier","src":"592:6:17"},"nativeSrc":"592:13:17","nodeType":"YulFunctionCall","src":"592:13:17"}],"functionName":{"name":"iszero","nativeSrc":"585:6:17","nodeType":"YulIdentifier","src":"585:6:17"},"nativeSrc":"585:21:17","nodeType":"YulFunctionCall","src":"585:21:17"}],"functionName":{"name":"mstore","nativeSrc":"573:6:17","nodeType":"YulIdentifier","src":"573:6:17"},"nativeSrc":"573:34:17","nodeType":"YulFunctionCall","src":"573:34:17"},"nativeSrc":"573:34:17","nodeType":"YulExpressionStatement","src":"573:34:17"}]},"name":"abi_encode_bool","nativeSrc":"522:91:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"547:5:17","nodeType":"YulTypedName","src":"547:5:17","type":""},{"name":"pos","nativeSrc":"554:3:17","nodeType":"YulTypedName","src":"554:3:17","type":""}],"src":"522:91:17"},{"body":{"nativeSrc":"713:92:17","nodeType":"YulBlock","src":"713:92:17","statements":[{"nativeSrc":"723:26:17","nodeType":"YulAssignment","src":"723:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"735:9:17","nodeType":"YulIdentifier","src":"735:9:17"},{"kind":"number","nativeSrc":"746:2:17","nodeType":"YulLiteral","src":"746:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"731:3:17","nodeType":"YulIdentifier","src":"731:3:17"},"nativeSrc":"731:18:17","nodeType":"YulFunctionCall","src":"731:18:17"},"variableNames":[{"name":"tail","nativeSrc":"723:4:17","nodeType":"YulIdentifier","src":"723:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"765:9:17","nodeType":"YulIdentifier","src":"765:9:17"},{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"790:6:17","nodeType":"YulIdentifier","src":"790:6:17"}],"functionName":{"name":"iszero","nativeSrc":"783:6:17","nodeType":"YulIdentifier","src":"783:6:17"},"nativeSrc":"783:14:17","nodeType":"YulFunctionCall","src":"783:14:17"}],"functionName":{"name":"iszero","nativeSrc":"776:6:17","nodeType":"YulIdentifier","src":"776:6:17"},"nativeSrc":"776:22:17","nodeType":"YulFunctionCall","src":"776:22:17"}],"functionName":{"name":"mstore","nativeSrc":"758:6:17","nodeType":"YulIdentifier","src":"758:6:17"},"nativeSrc":"758:41:17","nodeType":"YulFunctionCall","src":"758:41:17"},"nativeSrc":"758:41:17","nodeType":"YulExpressionStatement","src":"758:41:17"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nativeSrc":"618:187:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"682:9:17","nodeType":"YulTypedName","src":"682:9:17","type":""},{"name":"value0","nativeSrc":"693:6:17","nodeType":"YulTypedName","src":"693:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"704:4:17","nodeType":"YulTypedName","src":"704:4:17","type":""}],"src":"618:187:17"},{"body":{"nativeSrc":"842:95:17","nodeType":"YulBlock","src":"842:95:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"859:1:17","nodeType":"YulLiteral","src":"859:1:17","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"866:3:17","nodeType":"YulLiteral","src":"866:3:17","type":"","value":"224"},{"kind":"number","nativeSrc":"871:10:17","nodeType":"YulLiteral","src":"871:10:17","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"862:3:17","nodeType":"YulIdentifier","src":"862:3:17"},"nativeSrc":"862:20:17","nodeType":"YulFunctionCall","src":"862:20:17"}],"functionName":{"name":"mstore","nativeSrc":"852:6:17","nodeType":"YulIdentifier","src":"852:6:17"},"nativeSrc":"852:31:17","nodeType":"YulFunctionCall","src":"852:31:17"},"nativeSrc":"852:31:17","nodeType":"YulExpressionStatement","src":"852:31:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"899:1:17","nodeType":"YulLiteral","src":"899:1:17","type":"","value":"4"},{"kind":"number","nativeSrc":"902:4:17","nodeType":"YulLiteral","src":"902:4:17","type":"","value":"0x41"}],"functionName":{"name":"mstore","nativeSrc":"892:6:17","nodeType":"YulIdentifier","src":"892:6:17"},"nativeSrc":"892:15:17","nodeType":"YulFunctionCall","src":"892:15:17"},"nativeSrc":"892:15:17","nodeType":"YulExpressionStatement","src":"892:15:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"923:1:17","nodeType":"YulLiteral","src":"923:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"926:4:17","nodeType":"YulLiteral","src":"926:4:17","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"916:6:17","nodeType":"YulIdentifier","src":"916:6:17"},"nativeSrc":"916:15:17","nodeType":"YulFunctionCall","src":"916:15:17"},"nativeSrc":"916:15:17","nodeType":"YulExpressionStatement","src":"916:15:17"}]},"name":"panic_error_0x41","nativeSrc":"810:127:17","nodeType":"YulFunctionDefinition","src":"810:127:17"},{"body":{"nativeSrc":"987:230:17","nodeType":"YulBlock","src":"987:230:17","statements":[{"nativeSrc":"997:19:17","nodeType":"YulAssignment","src":"997:19:17","value":{"arguments":[{"kind":"number","nativeSrc":"1013:2:17","nodeType":"YulLiteral","src":"1013:2:17","type":"","value":"64"}],"functionName":{"name":"mload","nativeSrc":"1007:5:17","nodeType":"YulIdentifier","src":"1007:5:17"},"nativeSrc":"1007:9:17","nodeType":"YulFunctionCall","src":"1007:9:17"},"variableNames":[{"name":"memPtr","nativeSrc":"997:6:17","nodeType":"YulIdentifier","src":"997:6:17"}]},{"nativeSrc":"1025:58:17","nodeType":"YulVariableDeclaration","src":"1025:58:17","value":{"arguments":[{"name":"memPtr","nativeSrc":"1047:6:17","nodeType":"YulIdentifier","src":"1047:6:17"},{"arguments":[{"arguments":[{"name":"size","nativeSrc":"1063:4:17","nodeType":"YulIdentifier","src":"1063:4:17"},{"kind":"number","nativeSrc":"1069:2:17","nodeType":"YulLiteral","src":"1069:2:17","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"1059:3:17","nodeType":"YulIdentifier","src":"1059:3:17"},"nativeSrc":"1059:13:17","nodeType":"YulFunctionCall","src":"1059:13:17"},{"arguments":[{"kind":"number","nativeSrc":"1078:2:17","nodeType":"YulLiteral","src":"1078:2:17","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"1074:3:17","nodeType":"YulIdentifier","src":"1074:3:17"},"nativeSrc":"1074:7:17","nodeType":"YulFunctionCall","src":"1074:7:17"}],"functionName":{"name":"and","nativeSrc":"1055:3:17","nodeType":"YulIdentifier","src":"1055:3:17"},"nativeSrc":"1055:27:17","nodeType":"YulFunctionCall","src":"1055:27:17"}],"functionName":{"name":"add","nativeSrc":"1043:3:17","nodeType":"YulIdentifier","src":"1043:3:17"},"nativeSrc":"1043:40:17","nodeType":"YulFunctionCall","src":"1043:40:17"},"variables":[{"name":"newFreePtr","nativeSrc":"1029:10:17","nodeType":"YulTypedName","src":"1029:10:17","type":""}]},{"body":{"nativeSrc":"1158:22:17","nodeType":"YulBlock","src":"1158:22:17","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1160:16:17","nodeType":"YulIdentifier","src":"1160:16:17"},"nativeSrc":"1160:18:17","nodeType":"YulFunctionCall","src":"1160:18:17"},"nativeSrc":"1160:18:17","nodeType":"YulExpressionStatement","src":"1160:18:17"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nativeSrc":"1101:10:17","nodeType":"YulIdentifier","src":"1101:10:17"},{"kind":"number","nativeSrc":"1113:18:17","nodeType":"YulLiteral","src":"1113:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1098:2:17","nodeType":"YulIdentifier","src":"1098:2:17"},"nativeSrc":"1098:34:17","nodeType":"YulFunctionCall","src":"1098:34:17"},{"arguments":[{"name":"newFreePtr","nativeSrc":"1137:10:17","nodeType":"YulIdentifier","src":"1137:10:17"},{"name":"memPtr","nativeSrc":"1149:6:17","nodeType":"YulIdentifier","src":"1149:6:17"}],"functionName":{"name":"lt","nativeSrc":"1134:2:17","nodeType":"YulIdentifier","src":"1134:2:17"},"nativeSrc":"1134:22:17","nodeType":"YulFunctionCall","src":"1134:22:17"}],"functionName":{"name":"or","nativeSrc":"1095:2:17","nodeType":"YulIdentifier","src":"1095:2:17"},"nativeSrc":"1095:62:17","nodeType":"YulFunctionCall","src":"1095:62:17"},"nativeSrc":"1092:88:17","nodeType":"YulIf","src":"1092:88:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1196:2:17","nodeType":"YulLiteral","src":"1196:2:17","type":"","value":"64"},{"name":"newFreePtr","nativeSrc":"1200:10:17","nodeType":"YulIdentifier","src":"1200:10:17"}],"functionName":{"name":"mstore","nativeSrc":"1189:6:17","nodeType":"YulIdentifier","src":"1189:6:17"},"nativeSrc":"1189:22:17","nodeType":"YulFunctionCall","src":"1189:22:17"},"nativeSrc":"1189:22:17","nodeType":"YulExpressionStatement","src":"1189:22:17"}]},"name":"allocate_memory","nativeSrc":"942:275:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nativeSrc":"967:4:17","nodeType":"YulTypedName","src":"967:4:17","type":""}],"returnVariables":[{"name":"memPtr","nativeSrc":"976:6:17","nodeType":"YulTypedName","src":"976:6:17","type":""}],"src":"942:275:17"},{"body":{"nativeSrc":"1291:114:17","nodeType":"YulBlock","src":"1291:114:17","statements":[{"body":{"nativeSrc":"1335:22:17","nodeType":"YulBlock","src":"1335:22:17","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"1337:16:17","nodeType":"YulIdentifier","src":"1337:16:17"},"nativeSrc":"1337:18:17","nodeType":"YulFunctionCall","src":"1337:18:17"},"nativeSrc":"1337:18:17","nodeType":"YulExpressionStatement","src":"1337:18:17"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"1307:6:17","nodeType":"YulIdentifier","src":"1307:6:17"},{"kind":"number","nativeSrc":"1315:18:17","nodeType":"YulLiteral","src":"1315:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"1304:2:17","nodeType":"YulIdentifier","src":"1304:2:17"},"nativeSrc":"1304:30:17","nodeType":"YulFunctionCall","src":"1304:30:17"},"nativeSrc":"1301:56:17","nodeType":"YulIf","src":"1301:56:17"},{"nativeSrc":"1366:33:17","nodeType":"YulAssignment","src":"1366:33:17","value":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1382:1:17","nodeType":"YulLiteral","src":"1382:1:17","type":"","value":"5"},{"name":"length","nativeSrc":"1385:6:17","nodeType":"YulIdentifier","src":"1385:6:17"}],"functionName":{"name":"shl","nativeSrc":"1378:3:17","nodeType":"YulIdentifier","src":"1378:3:17"},"nativeSrc":"1378:14:17","nodeType":"YulFunctionCall","src":"1378:14:17"},{"kind":"number","nativeSrc":"1394:4:17","nodeType":"YulLiteral","src":"1394:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1374:3:17","nodeType":"YulIdentifier","src":"1374:3:17"},"nativeSrc":"1374:25:17","nodeType":"YulFunctionCall","src":"1374:25:17"},"variableNames":[{"name":"size","nativeSrc":"1366:4:17","nodeType":"YulIdentifier","src":"1366:4:17"}]}]},"name":"array_allocation_size_array_uint256_dyn","nativeSrc":"1222:183:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nativeSrc":"1271:6:17","nodeType":"YulTypedName","src":"1271:6:17","type":""}],"returnVariables":[{"name":"size","nativeSrc":"1282:4:17","nodeType":"YulTypedName","src":"1282:4:17","type":""}],"src":"1222:183:17"},{"body":{"nativeSrc":"1474:659:17","nodeType":"YulBlock","src":"1474:659:17","statements":[{"body":{"nativeSrc":"1523:16:17","nodeType":"YulBlock","src":"1523:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1532:1:17","nodeType":"YulLiteral","src":"1532:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"1535:1:17","nodeType":"YulLiteral","src":"1535:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1525:6:17","nodeType":"YulIdentifier","src":"1525:6:17"},"nativeSrc":"1525:12:17","nodeType":"YulFunctionCall","src":"1525:12:17"},"nativeSrc":"1525:12:17","nodeType":"YulExpressionStatement","src":"1525:12:17"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"1502:6:17","nodeType":"YulIdentifier","src":"1502:6:17"},{"kind":"number","nativeSrc":"1510:4:17","nodeType":"YulLiteral","src":"1510:4:17","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"1498:3:17","nodeType":"YulIdentifier","src":"1498:3:17"},"nativeSrc":"1498:17:17","nodeType":"YulFunctionCall","src":"1498:17:17"},{"name":"end","nativeSrc":"1517:3:17","nodeType":"YulIdentifier","src":"1517:3:17"}],"functionName":{"name":"slt","nativeSrc":"1494:3:17","nodeType":"YulIdentifier","src":"1494:3:17"},"nativeSrc":"1494:27:17","nodeType":"YulFunctionCall","src":"1494:27:17"}],"functionName":{"name":"iszero","nativeSrc":"1487:6:17","nodeType":"YulIdentifier","src":"1487:6:17"},"nativeSrc":"1487:35:17","nodeType":"YulFunctionCall","src":"1487:35:17"},"nativeSrc":"1484:55:17","nodeType":"YulIf","src":"1484:55:17"},{"nativeSrc":"1548:34:17","nodeType":"YulVariableDeclaration","src":"1548:34:17","value":{"arguments":[{"name":"offset","nativeSrc":"1575:6:17","nodeType":"YulIdentifier","src":"1575:6:17"}],"functionName":{"name":"calldataload","nativeSrc":"1562:12:17","nodeType":"YulIdentifier","src":"1562:12:17"},"nativeSrc":"1562:20:17","nodeType":"YulFunctionCall","src":"1562:20:17"},"variables":[{"name":"length","nativeSrc":"1552:6:17","nodeType":"YulTypedName","src":"1552:6:17","type":""}]},{"nativeSrc":"1591:75:17","nodeType":"YulVariableDeclaration","src":"1591:75:17","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"1658:6:17","nodeType":"YulIdentifier","src":"1658:6:17"}],"functionName":{"name":"array_allocation_size_array_uint256_dyn","nativeSrc":"1618:39:17","nodeType":"YulIdentifier","src":"1618:39:17"},"nativeSrc":"1618:47:17","nodeType":"YulFunctionCall","src":"1618:47:17"}],"functionName":{"name":"allocate_memory","nativeSrc":"1602:15:17","nodeType":"YulIdentifier","src":"1602:15:17"},"nativeSrc":"1602:64:17","nodeType":"YulFunctionCall","src":"1602:64:17"},"variables":[{"name":"dst","nativeSrc":"1595:3:17","nodeType":"YulTypedName","src":"1595:3:17","type":""}]},{"nativeSrc":"1675:18:17","nodeType":"YulVariableDeclaration","src":"1675:18:17","value":{"name":"dst","nativeSrc":"1690:3:17","nodeType":"YulIdentifier","src":"1690:3:17"},"variables":[{"name":"array_1","nativeSrc":"1679:7:17","nodeType":"YulTypedName","src":"1679:7:17","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"1709:3:17","nodeType":"YulIdentifier","src":"1709:3:17"},{"name":"length","nativeSrc":"1714:6:17","nodeType":"YulIdentifier","src":"1714:6:17"}],"functionName":{"name":"mstore","nativeSrc":"1702:6:17","nodeType":"YulIdentifier","src":"1702:6:17"},"nativeSrc":"1702:19:17","nodeType":"YulFunctionCall","src":"1702:19:17"},"nativeSrc":"1702:19:17","nodeType":"YulExpressionStatement","src":"1702:19:17"},{"nativeSrc":"1730:21:17","nodeType":"YulAssignment","src":"1730:21:17","value":{"arguments":[{"name":"dst","nativeSrc":"1741:3:17","nodeType":"YulIdentifier","src":"1741:3:17"},{"kind":"number","nativeSrc":"1746:4:17","nodeType":"YulLiteral","src":"1746:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1737:3:17","nodeType":"YulIdentifier","src":"1737:3:17"},"nativeSrc":"1737:14:17","nodeType":"YulFunctionCall","src":"1737:14:17"},"variableNames":[{"name":"dst","nativeSrc":"1730:3:17","nodeType":"YulIdentifier","src":"1730:3:17"}]},{"nativeSrc":"1760:52:17","nodeType":"YulVariableDeclaration","src":"1760:52:17","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"1782:6:17","nodeType":"YulIdentifier","src":"1782:6:17"},{"arguments":[{"kind":"number","nativeSrc":"1794:1:17","nodeType":"YulLiteral","src":"1794:1:17","type":"","value":"5"},{"name":"length","nativeSrc":"1797:6:17","nodeType":"YulIdentifier","src":"1797:6:17"}],"functionName":{"name":"shl","nativeSrc":"1790:3:17","nodeType":"YulIdentifier","src":"1790:3:17"},"nativeSrc":"1790:14:17","nodeType":"YulFunctionCall","src":"1790:14:17"}],"functionName":{"name":"add","nativeSrc":"1778:3:17","nodeType":"YulIdentifier","src":"1778:3:17"},"nativeSrc":"1778:27:17","nodeType":"YulFunctionCall","src":"1778:27:17"},{"kind":"number","nativeSrc":"1807:4:17","nodeType":"YulLiteral","src":"1807:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1774:3:17","nodeType":"YulIdentifier","src":"1774:3:17"},"nativeSrc":"1774:38:17","nodeType":"YulFunctionCall","src":"1774:38:17"},"variables":[{"name":"srcEnd","nativeSrc":"1764:6:17","nodeType":"YulTypedName","src":"1764:6:17","type":""}]},{"body":{"nativeSrc":"1840:16:17","nodeType":"YulBlock","src":"1840:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1849:1:17","nodeType":"YulLiteral","src":"1849:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"1852:1:17","nodeType":"YulLiteral","src":"1852:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"1842:6:17","nodeType":"YulIdentifier","src":"1842:6:17"},"nativeSrc":"1842:12:17","nodeType":"YulFunctionCall","src":"1842:12:17"},"nativeSrc":"1842:12:17","nodeType":"YulExpressionStatement","src":"1842:12:17"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"1827:6:17","nodeType":"YulIdentifier","src":"1827:6:17"},{"name":"end","nativeSrc":"1835:3:17","nodeType":"YulIdentifier","src":"1835:3:17"}],"functionName":{"name":"gt","nativeSrc":"1824:2:17","nodeType":"YulIdentifier","src":"1824:2:17"},"nativeSrc":"1824:15:17","nodeType":"YulFunctionCall","src":"1824:15:17"},"nativeSrc":"1821:35:17","nodeType":"YulIf","src":"1821:35:17"},{"nativeSrc":"1865:28:17","nodeType":"YulVariableDeclaration","src":"1865:28:17","value":{"arguments":[{"name":"offset","nativeSrc":"1880:6:17","nodeType":"YulIdentifier","src":"1880:6:17"},{"kind":"number","nativeSrc":"1888:4:17","nodeType":"YulLiteral","src":"1888:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1876:3:17","nodeType":"YulIdentifier","src":"1876:3:17"},"nativeSrc":"1876:17:17","nodeType":"YulFunctionCall","src":"1876:17:17"},"variables":[{"name":"src","nativeSrc":"1869:3:17","nodeType":"YulTypedName","src":"1869:3:17","type":""}]},{"body":{"nativeSrc":"1960:142:17","nodeType":"YulBlock","src":"1960:142:17","statements":[{"nativeSrc":"1974:14:17","nodeType":"YulVariableDeclaration","src":"1974:14:17","value":{"kind":"number","nativeSrc":"1987:1:17","nodeType":"YulLiteral","src":"1987:1:17","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"1978:5:17","nodeType":"YulTypedName","src":"1978:5:17","type":""}]},{"nativeSrc":"2001:26:17","nodeType":"YulAssignment","src":"2001:26:17","value":{"arguments":[{"name":"src","nativeSrc":"2023:3:17","nodeType":"YulIdentifier","src":"2023:3:17"}],"functionName":{"name":"calldataload","nativeSrc":"2010:12:17","nodeType":"YulIdentifier","src":"2010:12:17"},"nativeSrc":"2010:17:17","nodeType":"YulFunctionCall","src":"2010:17:17"},"variableNames":[{"name":"value","nativeSrc":"2001:5:17","nodeType":"YulIdentifier","src":"2001:5:17"}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"2047:3:17","nodeType":"YulIdentifier","src":"2047:3:17"},{"name":"value","nativeSrc":"2052:5:17","nodeType":"YulIdentifier","src":"2052:5:17"}],"functionName":{"name":"mstore","nativeSrc":"2040:6:17","nodeType":"YulIdentifier","src":"2040:6:17"},"nativeSrc":"2040:18:17","nodeType":"YulFunctionCall","src":"2040:18:17"},"nativeSrc":"2040:18:17","nodeType":"YulExpressionStatement","src":"2040:18:17"},{"nativeSrc":"2071:21:17","nodeType":"YulAssignment","src":"2071:21:17","value":{"arguments":[{"name":"dst","nativeSrc":"2082:3:17","nodeType":"YulIdentifier","src":"2082:3:17"},{"kind":"number","nativeSrc":"2087:4:17","nodeType":"YulLiteral","src":"2087:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2078:3:17","nodeType":"YulIdentifier","src":"2078:3:17"},"nativeSrc":"2078:14:17","nodeType":"YulFunctionCall","src":"2078:14:17"},"variableNames":[{"name":"dst","nativeSrc":"2071:3:17","nodeType":"YulIdentifier","src":"2071:3:17"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"1913:3:17","nodeType":"YulIdentifier","src":"1913:3:17"},{"name":"srcEnd","nativeSrc":"1918:6:17","nodeType":"YulIdentifier","src":"1918:6:17"}],"functionName":{"name":"lt","nativeSrc":"1910:2:17","nodeType":"YulIdentifier","src":"1910:2:17"},"nativeSrc":"1910:15:17","nodeType":"YulFunctionCall","src":"1910:15:17"},"nativeSrc":"1902:200:17","nodeType":"YulForLoop","post":{"nativeSrc":"1926:25:17","nodeType":"YulBlock","src":"1926:25:17","statements":[{"nativeSrc":"1928:21:17","nodeType":"YulAssignment","src":"1928:21:17","value":{"arguments":[{"name":"src","nativeSrc":"1939:3:17","nodeType":"YulIdentifier","src":"1939:3:17"},{"kind":"number","nativeSrc":"1944:4:17","nodeType":"YulLiteral","src":"1944:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1935:3:17","nodeType":"YulIdentifier","src":"1935:3:17"},"nativeSrc":"1935:14:17","nodeType":"YulFunctionCall","src":"1935:14:17"},"variableNames":[{"name":"src","nativeSrc":"1928:3:17","nodeType":"YulIdentifier","src":"1928:3:17"}]}]},"pre":{"nativeSrc":"1906:3:17","nodeType":"YulBlock","src":"1906:3:17","statements":[]},"src":"1902:200:17"},{"nativeSrc":"2111:16:17","nodeType":"YulAssignment","src":"2111:16:17","value":{"name":"array_1","nativeSrc":"2120:7:17","nodeType":"YulIdentifier","src":"2120:7:17"},"variableNames":[{"name":"array","nativeSrc":"2111:5:17","nodeType":"YulIdentifier","src":"2111:5:17"}]}]},"name":"abi_decode_array_uint256_dyn","nativeSrc":"1410:723:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"1448:6:17","nodeType":"YulTypedName","src":"1448:6:17","type":""},{"name":"end","nativeSrc":"1456:3:17","nodeType":"YulTypedName","src":"1456:3:17","type":""}],"returnVariables":[{"name":"array","nativeSrc":"1464:5:17","nodeType":"YulTypedName","src":"1464:5:17","type":""}],"src":"1410:723:17"},{"body":{"nativeSrc":"2180:76:17","nodeType":"YulBlock","src":"2180:76:17","statements":[{"body":{"nativeSrc":"2234:16:17","nodeType":"YulBlock","src":"2234:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2243:1:17","nodeType":"YulLiteral","src":"2243:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"2246:1:17","nodeType":"YulLiteral","src":"2246:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2236:6:17","nodeType":"YulIdentifier","src":"2236:6:17"},"nativeSrc":"2236:12:17","nodeType":"YulFunctionCall","src":"2236:12:17"},"nativeSrc":"2236:12:17","nodeType":"YulExpressionStatement","src":"2236:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2203:5:17","nodeType":"YulIdentifier","src":"2203:5:17"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2224:5:17","nodeType":"YulIdentifier","src":"2224:5:17"}],"functionName":{"name":"iszero","nativeSrc":"2217:6:17","nodeType":"YulIdentifier","src":"2217:6:17"},"nativeSrc":"2217:13:17","nodeType":"YulFunctionCall","src":"2217:13:17"}],"functionName":{"name":"iszero","nativeSrc":"2210:6:17","nodeType":"YulIdentifier","src":"2210:6:17"},"nativeSrc":"2210:21:17","nodeType":"YulFunctionCall","src":"2210:21:17"}],"functionName":{"name":"eq","nativeSrc":"2200:2:17","nodeType":"YulIdentifier","src":"2200:2:17"},"nativeSrc":"2200:32:17","nodeType":"YulFunctionCall","src":"2200:32:17"}],"functionName":{"name":"iszero","nativeSrc":"2193:6:17","nodeType":"YulIdentifier","src":"2193:6:17"},"nativeSrc":"2193:40:17","nodeType":"YulFunctionCall","src":"2193:40:17"},"nativeSrc":"2190:60:17","nodeType":"YulIf","src":"2190:60:17"}]},"name":"validator_revert_bool","nativeSrc":"2138:118:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"2169:5:17","nodeType":"YulTypedName","src":"2169:5:17","type":""}],"src":"2138:118:17"},{"body":{"nativeSrc":"2322:677:17","nodeType":"YulBlock","src":"2322:677:17","statements":[{"body":{"nativeSrc":"2371:16:17","nodeType":"YulBlock","src":"2371:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2380:1:17","nodeType":"YulLiteral","src":"2380:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"2383:1:17","nodeType":"YulLiteral","src":"2383:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2373:6:17","nodeType":"YulIdentifier","src":"2373:6:17"},"nativeSrc":"2373:12:17","nodeType":"YulFunctionCall","src":"2373:12:17"},"nativeSrc":"2373:12:17","nodeType":"YulExpressionStatement","src":"2373:12:17"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2350:6:17","nodeType":"YulIdentifier","src":"2350:6:17"},{"kind":"number","nativeSrc":"2358:4:17","nodeType":"YulLiteral","src":"2358:4:17","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"2346:3:17","nodeType":"YulIdentifier","src":"2346:3:17"},"nativeSrc":"2346:17:17","nodeType":"YulFunctionCall","src":"2346:17:17"},{"name":"end","nativeSrc":"2365:3:17","nodeType":"YulIdentifier","src":"2365:3:17"}],"functionName":{"name":"slt","nativeSrc":"2342:3:17","nodeType":"YulIdentifier","src":"2342:3:17"},"nativeSrc":"2342:27:17","nodeType":"YulFunctionCall","src":"2342:27:17"}],"functionName":{"name":"iszero","nativeSrc":"2335:6:17","nodeType":"YulIdentifier","src":"2335:6:17"},"nativeSrc":"2335:35:17","nodeType":"YulFunctionCall","src":"2335:35:17"},"nativeSrc":"2332:55:17","nodeType":"YulIf","src":"2332:55:17"},{"nativeSrc":"2396:34:17","nodeType":"YulVariableDeclaration","src":"2396:34:17","value":{"arguments":[{"name":"offset","nativeSrc":"2423:6:17","nodeType":"YulIdentifier","src":"2423:6:17"}],"functionName":{"name":"calldataload","nativeSrc":"2410:12:17","nodeType":"YulIdentifier","src":"2410:12:17"},"nativeSrc":"2410:20:17","nodeType":"YulFunctionCall","src":"2410:20:17"},"variables":[{"name":"length","nativeSrc":"2400:6:17","nodeType":"YulTypedName","src":"2400:6:17","type":""}]},{"nativeSrc":"2439:75:17","nodeType":"YulVariableDeclaration","src":"2439:75:17","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"2506:6:17","nodeType":"YulIdentifier","src":"2506:6:17"}],"functionName":{"name":"array_allocation_size_array_uint256_dyn","nativeSrc":"2466:39:17","nodeType":"YulIdentifier","src":"2466:39:17"},"nativeSrc":"2466:47:17","nodeType":"YulFunctionCall","src":"2466:47:17"}],"functionName":{"name":"allocate_memory","nativeSrc":"2450:15:17","nodeType":"YulIdentifier","src":"2450:15:17"},"nativeSrc":"2450:64:17","nodeType":"YulFunctionCall","src":"2450:64:17"},"variables":[{"name":"dst","nativeSrc":"2443:3:17","nodeType":"YulTypedName","src":"2443:3:17","type":""}]},{"nativeSrc":"2523:18:17","nodeType":"YulVariableDeclaration","src":"2523:18:17","value":{"name":"dst","nativeSrc":"2538:3:17","nodeType":"YulIdentifier","src":"2538:3:17"},"variables":[{"name":"array_1","nativeSrc":"2527:7:17","nodeType":"YulTypedName","src":"2527:7:17","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"2557:3:17","nodeType":"YulIdentifier","src":"2557:3:17"},{"name":"length","nativeSrc":"2562:6:17","nodeType":"YulIdentifier","src":"2562:6:17"}],"functionName":{"name":"mstore","nativeSrc":"2550:6:17","nodeType":"YulIdentifier","src":"2550:6:17"},"nativeSrc":"2550:19:17","nodeType":"YulFunctionCall","src":"2550:19:17"},"nativeSrc":"2550:19:17","nodeType":"YulExpressionStatement","src":"2550:19:17"},{"nativeSrc":"2578:21:17","nodeType":"YulAssignment","src":"2578:21:17","value":{"arguments":[{"name":"dst","nativeSrc":"2589:3:17","nodeType":"YulIdentifier","src":"2589:3:17"},{"kind":"number","nativeSrc":"2594:4:17","nodeType":"YulLiteral","src":"2594:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2585:3:17","nodeType":"YulIdentifier","src":"2585:3:17"},"nativeSrc":"2585:14:17","nodeType":"YulFunctionCall","src":"2585:14:17"},"variableNames":[{"name":"dst","nativeSrc":"2578:3:17","nodeType":"YulIdentifier","src":"2578:3:17"}]},{"nativeSrc":"2608:52:17","nodeType":"YulVariableDeclaration","src":"2608:52:17","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2630:6:17","nodeType":"YulIdentifier","src":"2630:6:17"},{"arguments":[{"kind":"number","nativeSrc":"2642:1:17","nodeType":"YulLiteral","src":"2642:1:17","type":"","value":"5"},{"name":"length","nativeSrc":"2645:6:17","nodeType":"YulIdentifier","src":"2645:6:17"}],"functionName":{"name":"shl","nativeSrc":"2638:3:17","nodeType":"YulIdentifier","src":"2638:3:17"},"nativeSrc":"2638:14:17","nodeType":"YulFunctionCall","src":"2638:14:17"}],"functionName":{"name":"add","nativeSrc":"2626:3:17","nodeType":"YulIdentifier","src":"2626:3:17"},"nativeSrc":"2626:27:17","nodeType":"YulFunctionCall","src":"2626:27:17"},{"kind":"number","nativeSrc":"2655:4:17","nodeType":"YulLiteral","src":"2655:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2622:3:17","nodeType":"YulIdentifier","src":"2622:3:17"},"nativeSrc":"2622:38:17","nodeType":"YulFunctionCall","src":"2622:38:17"},"variables":[{"name":"srcEnd","nativeSrc":"2612:6:17","nodeType":"YulTypedName","src":"2612:6:17","type":""}]},{"body":{"nativeSrc":"2688:16:17","nodeType":"YulBlock","src":"2688:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2697:1:17","nodeType":"YulLiteral","src":"2697:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"2700:1:17","nodeType":"YulLiteral","src":"2700:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2690:6:17","nodeType":"YulIdentifier","src":"2690:6:17"},"nativeSrc":"2690:12:17","nodeType":"YulFunctionCall","src":"2690:12:17"},"nativeSrc":"2690:12:17","nodeType":"YulExpressionStatement","src":"2690:12:17"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"2675:6:17","nodeType":"YulIdentifier","src":"2675:6:17"},{"name":"end","nativeSrc":"2683:3:17","nodeType":"YulIdentifier","src":"2683:3:17"}],"functionName":{"name":"gt","nativeSrc":"2672:2:17","nodeType":"YulIdentifier","src":"2672:2:17"},"nativeSrc":"2672:15:17","nodeType":"YulFunctionCall","src":"2672:15:17"},"nativeSrc":"2669:35:17","nodeType":"YulIf","src":"2669:35:17"},{"nativeSrc":"2713:28:17","nodeType":"YulVariableDeclaration","src":"2713:28:17","value":{"arguments":[{"name":"offset","nativeSrc":"2728:6:17","nodeType":"YulIdentifier","src":"2728:6:17"},{"kind":"number","nativeSrc":"2736:4:17","nodeType":"YulLiteral","src":"2736:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2724:3:17","nodeType":"YulIdentifier","src":"2724:3:17"},"nativeSrc":"2724:17:17","nodeType":"YulFunctionCall","src":"2724:17:17"},"variables":[{"name":"src","nativeSrc":"2717:3:17","nodeType":"YulTypedName","src":"2717:3:17","type":""}]},{"body":{"nativeSrc":"2808:160:17","nodeType":"YulBlock","src":"2808:160:17","statements":[{"nativeSrc":"2822:30:17","nodeType":"YulVariableDeclaration","src":"2822:30:17","value":{"arguments":[{"name":"src","nativeSrc":"2848:3:17","nodeType":"YulIdentifier","src":"2848:3:17"}],"functionName":{"name":"calldataload","nativeSrc":"2835:12:17","nodeType":"YulIdentifier","src":"2835:12:17"},"nativeSrc":"2835:17:17","nodeType":"YulFunctionCall","src":"2835:17:17"},"variables":[{"name":"value","nativeSrc":"2826:5:17","nodeType":"YulTypedName","src":"2826:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"2887:5:17","nodeType":"YulIdentifier","src":"2887:5:17"}],"functionName":{"name":"validator_revert_bool","nativeSrc":"2865:21:17","nodeType":"YulIdentifier","src":"2865:21:17"},"nativeSrc":"2865:28:17","nodeType":"YulFunctionCall","src":"2865:28:17"},"nativeSrc":"2865:28:17","nodeType":"YulExpressionStatement","src":"2865:28:17"},{"expression":{"arguments":[{"name":"dst","nativeSrc":"2913:3:17","nodeType":"YulIdentifier","src":"2913:3:17"},{"name":"value","nativeSrc":"2918:5:17","nodeType":"YulIdentifier","src":"2918:5:17"}],"functionName":{"name":"mstore","nativeSrc":"2906:6:17","nodeType":"YulIdentifier","src":"2906:6:17"},"nativeSrc":"2906:18:17","nodeType":"YulFunctionCall","src":"2906:18:17"},"nativeSrc":"2906:18:17","nodeType":"YulExpressionStatement","src":"2906:18:17"},{"nativeSrc":"2937:21:17","nodeType":"YulAssignment","src":"2937:21:17","value":{"arguments":[{"name":"dst","nativeSrc":"2948:3:17","nodeType":"YulIdentifier","src":"2948:3:17"},{"kind":"number","nativeSrc":"2953:4:17","nodeType":"YulLiteral","src":"2953:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2944:3:17","nodeType":"YulIdentifier","src":"2944:3:17"},"nativeSrc":"2944:14:17","nodeType":"YulFunctionCall","src":"2944:14:17"},"variableNames":[{"name":"dst","nativeSrc":"2937:3:17","nodeType":"YulIdentifier","src":"2937:3:17"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"2761:3:17","nodeType":"YulIdentifier","src":"2761:3:17"},{"name":"srcEnd","nativeSrc":"2766:6:17","nodeType":"YulIdentifier","src":"2766:6:17"}],"functionName":{"name":"lt","nativeSrc":"2758:2:17","nodeType":"YulIdentifier","src":"2758:2:17"},"nativeSrc":"2758:15:17","nodeType":"YulFunctionCall","src":"2758:15:17"},"nativeSrc":"2750:218:17","nodeType":"YulForLoop","post":{"nativeSrc":"2774:25:17","nodeType":"YulBlock","src":"2774:25:17","statements":[{"nativeSrc":"2776:21:17","nodeType":"YulAssignment","src":"2776:21:17","value":{"arguments":[{"name":"src","nativeSrc":"2787:3:17","nodeType":"YulIdentifier","src":"2787:3:17"},{"kind":"number","nativeSrc":"2792:4:17","nodeType":"YulLiteral","src":"2792:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2783:3:17","nodeType":"YulIdentifier","src":"2783:3:17"},"nativeSrc":"2783:14:17","nodeType":"YulFunctionCall","src":"2783:14:17"},"variableNames":[{"name":"src","nativeSrc":"2776:3:17","nodeType":"YulIdentifier","src":"2776:3:17"}]}]},"pre":{"nativeSrc":"2754:3:17","nodeType":"YulBlock","src":"2754:3:17","statements":[]},"src":"2750:218:17"},{"nativeSrc":"2977:16:17","nodeType":"YulAssignment","src":"2977:16:17","value":{"name":"array_1","nativeSrc":"2986:7:17","nodeType":"YulIdentifier","src":"2986:7:17"},"variableNames":[{"name":"array","nativeSrc":"2977:5:17","nodeType":"YulIdentifier","src":"2977:5:17"}]}]},"name":"abi_decode_array_bool_dyn","nativeSrc":"2261:738:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"2296:6:17","nodeType":"YulTypedName","src":"2296:6:17","type":""},{"name":"end","nativeSrc":"2304:3:17","nodeType":"YulTypedName","src":"2304:3:17","type":""}],"returnVariables":[{"name":"array","nativeSrc":"2312:5:17","nodeType":"YulTypedName","src":"2312:5:17","type":""}],"src":"2261:738:17"},{"body":{"nativeSrc":"3264:1052:17","nodeType":"YulBlock","src":"3264:1052:17","statements":[{"body":{"nativeSrc":"3311:16:17","nodeType":"YulBlock","src":"3311:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3320:1:17","nodeType":"YulLiteral","src":"3320:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"3323:1:17","nodeType":"YulLiteral","src":"3323:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3313:6:17","nodeType":"YulIdentifier","src":"3313:6:17"},"nativeSrc":"3313:12:17","nodeType":"YulFunctionCall","src":"3313:12:17"},"nativeSrc":"3313:12:17","nodeType":"YulExpressionStatement","src":"3313:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"3285:7:17","nodeType":"YulIdentifier","src":"3285:7:17"},{"name":"headStart","nativeSrc":"3294:9:17","nodeType":"YulIdentifier","src":"3294:9:17"}],"functionName":{"name":"sub","nativeSrc":"3281:3:17","nodeType":"YulIdentifier","src":"3281:3:17"},"nativeSrc":"3281:23:17","nodeType":"YulFunctionCall","src":"3281:23:17"},{"kind":"number","nativeSrc":"3306:3:17","nodeType":"YulLiteral","src":"3306:3:17","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"3277:3:17","nodeType":"YulIdentifier","src":"3277:3:17"},"nativeSrc":"3277:33:17","nodeType":"YulFunctionCall","src":"3277:33:17"},"nativeSrc":"3274:53:17","nodeType":"YulIf","src":"3274:53:17"},{"nativeSrc":"3336:37:17","nodeType":"YulVariableDeclaration","src":"3336:37:17","value":{"arguments":[{"name":"headStart","nativeSrc":"3363:9:17","nodeType":"YulIdentifier","src":"3363:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"3350:12:17","nodeType":"YulIdentifier","src":"3350:12:17"},"nativeSrc":"3350:23:17","nodeType":"YulFunctionCall","src":"3350:23:17"},"variables":[{"name":"offset","nativeSrc":"3340:6:17","nodeType":"YulTypedName","src":"3340:6:17","type":""}]},{"body":{"nativeSrc":"3416:16:17","nodeType":"YulBlock","src":"3416:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3425:1:17","nodeType":"YulLiteral","src":"3425:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"3428:1:17","nodeType":"YulLiteral","src":"3428:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3418:6:17","nodeType":"YulIdentifier","src":"3418:6:17"},"nativeSrc":"3418:12:17","nodeType":"YulFunctionCall","src":"3418:12:17"},"nativeSrc":"3418:12:17","nodeType":"YulExpressionStatement","src":"3418:12:17"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"3388:6:17","nodeType":"YulIdentifier","src":"3388:6:17"},{"kind":"number","nativeSrc":"3396:18:17","nodeType":"YulLiteral","src":"3396:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3385:2:17","nodeType":"YulIdentifier","src":"3385:2:17"},"nativeSrc":"3385:30:17","nodeType":"YulFunctionCall","src":"3385:30:17"},"nativeSrc":"3382:50:17","nodeType":"YulIf","src":"3382:50:17"},{"nativeSrc":"3441:71:17","nodeType":"YulAssignment","src":"3441:71:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3484:9:17","nodeType":"YulIdentifier","src":"3484:9:17"},{"name":"offset","nativeSrc":"3495:6:17","nodeType":"YulIdentifier","src":"3495:6:17"}],"functionName":{"name":"add","nativeSrc":"3480:3:17","nodeType":"YulIdentifier","src":"3480:3:17"},"nativeSrc":"3480:22:17","nodeType":"YulFunctionCall","src":"3480:22:17"},{"name":"dataEnd","nativeSrc":"3504:7:17","nodeType":"YulIdentifier","src":"3504:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"3451:28:17","nodeType":"YulIdentifier","src":"3451:28:17"},"nativeSrc":"3451:61:17","nodeType":"YulFunctionCall","src":"3451:61:17"},"variableNames":[{"name":"value0","nativeSrc":"3441:6:17","nodeType":"YulIdentifier","src":"3441:6:17"}]},{"nativeSrc":"3521:48:17","nodeType":"YulVariableDeclaration","src":"3521:48:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3554:9:17","nodeType":"YulIdentifier","src":"3554:9:17"},{"kind":"number","nativeSrc":"3565:2:17","nodeType":"YulLiteral","src":"3565:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3550:3:17","nodeType":"YulIdentifier","src":"3550:3:17"},"nativeSrc":"3550:18:17","nodeType":"YulFunctionCall","src":"3550:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"3537:12:17","nodeType":"YulIdentifier","src":"3537:12:17"},"nativeSrc":"3537:32:17","nodeType":"YulFunctionCall","src":"3537:32:17"},"variables":[{"name":"offset_1","nativeSrc":"3525:8:17","nodeType":"YulTypedName","src":"3525:8:17","type":""}]},{"body":{"nativeSrc":"3614:16:17","nodeType":"YulBlock","src":"3614:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3623:1:17","nodeType":"YulLiteral","src":"3623:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"3626:1:17","nodeType":"YulLiteral","src":"3626:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3616:6:17","nodeType":"YulIdentifier","src":"3616:6:17"},"nativeSrc":"3616:12:17","nodeType":"YulFunctionCall","src":"3616:12:17"},"nativeSrc":"3616:12:17","nodeType":"YulExpressionStatement","src":"3616:12:17"}]},"condition":{"arguments":[{"name":"offset_1","nativeSrc":"3584:8:17","nodeType":"YulIdentifier","src":"3584:8:17"},{"kind":"number","nativeSrc":"3594:18:17","nodeType":"YulLiteral","src":"3594:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3581:2:17","nodeType":"YulIdentifier","src":"3581:2:17"},"nativeSrc":"3581:32:17","nodeType":"YulFunctionCall","src":"3581:32:17"},"nativeSrc":"3578:52:17","nodeType":"YulIf","src":"3578:52:17"},{"nativeSrc":"3639:73:17","nodeType":"YulAssignment","src":"3639:73:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3682:9:17","nodeType":"YulIdentifier","src":"3682:9:17"},{"name":"offset_1","nativeSrc":"3693:8:17","nodeType":"YulIdentifier","src":"3693:8:17"}],"functionName":{"name":"add","nativeSrc":"3678:3:17","nodeType":"YulIdentifier","src":"3678:3:17"},"nativeSrc":"3678:24:17","nodeType":"YulFunctionCall","src":"3678:24:17"},{"name":"dataEnd","nativeSrc":"3704:7:17","nodeType":"YulIdentifier","src":"3704:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"3649:28:17","nodeType":"YulIdentifier","src":"3649:28:17"},"nativeSrc":"3649:63:17","nodeType":"YulFunctionCall","src":"3649:63:17"},"variableNames":[{"name":"value1","nativeSrc":"3639:6:17","nodeType":"YulIdentifier","src":"3639:6:17"}]},{"nativeSrc":"3721:48:17","nodeType":"YulVariableDeclaration","src":"3721:48:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3754:9:17","nodeType":"YulIdentifier","src":"3754:9:17"},{"kind":"number","nativeSrc":"3765:2:17","nodeType":"YulLiteral","src":"3765:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3750:3:17","nodeType":"YulIdentifier","src":"3750:3:17"},"nativeSrc":"3750:18:17","nodeType":"YulFunctionCall","src":"3750:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"3737:12:17","nodeType":"YulIdentifier","src":"3737:12:17"},"nativeSrc":"3737:32:17","nodeType":"YulFunctionCall","src":"3737:32:17"},"variables":[{"name":"offset_2","nativeSrc":"3725:8:17","nodeType":"YulTypedName","src":"3725:8:17","type":""}]},{"body":{"nativeSrc":"3814:16:17","nodeType":"YulBlock","src":"3814:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3823:1:17","nodeType":"YulLiteral","src":"3823:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"3826:1:17","nodeType":"YulLiteral","src":"3826:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"3816:6:17","nodeType":"YulIdentifier","src":"3816:6:17"},"nativeSrc":"3816:12:17","nodeType":"YulFunctionCall","src":"3816:12:17"},"nativeSrc":"3816:12:17","nodeType":"YulExpressionStatement","src":"3816:12:17"}]},"condition":{"arguments":[{"name":"offset_2","nativeSrc":"3784:8:17","nodeType":"YulIdentifier","src":"3784:8:17"},{"kind":"number","nativeSrc":"3794:18:17","nodeType":"YulLiteral","src":"3794:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3781:2:17","nodeType":"YulIdentifier","src":"3781:2:17"},"nativeSrc":"3781:32:17","nodeType":"YulFunctionCall","src":"3781:32:17"},"nativeSrc":"3778:52:17","nodeType":"YulIf","src":"3778:52:17"},{"nativeSrc":"3839:73:17","nodeType":"YulAssignment","src":"3839:73:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3882:9:17","nodeType":"YulIdentifier","src":"3882:9:17"},{"name":"offset_2","nativeSrc":"3893:8:17","nodeType":"YulIdentifier","src":"3893:8:17"}],"functionName":{"name":"add","nativeSrc":"3878:3:17","nodeType":"YulIdentifier","src":"3878:3:17"},"nativeSrc":"3878:24:17","nodeType":"YulFunctionCall","src":"3878:24:17"},{"name":"dataEnd","nativeSrc":"3904:7:17","nodeType":"YulIdentifier","src":"3904:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"3849:28:17","nodeType":"YulIdentifier","src":"3849:28:17"},"nativeSrc":"3849:63:17","nodeType":"YulFunctionCall","src":"3849:63:17"},"variableNames":[{"name":"value2","nativeSrc":"3839:6:17","nodeType":"YulIdentifier","src":"3839:6:17"}]},{"nativeSrc":"3921:48:17","nodeType":"YulVariableDeclaration","src":"3921:48:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3954:9:17","nodeType":"YulIdentifier","src":"3954:9:17"},{"kind":"number","nativeSrc":"3965:2:17","nodeType":"YulLiteral","src":"3965:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3950:3:17","nodeType":"YulIdentifier","src":"3950:3:17"},"nativeSrc":"3950:18:17","nodeType":"YulFunctionCall","src":"3950:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"3937:12:17","nodeType":"YulIdentifier","src":"3937:12:17"},"nativeSrc":"3937:32:17","nodeType":"YulFunctionCall","src":"3937:32:17"},"variables":[{"name":"offset_3","nativeSrc":"3925:8:17","nodeType":"YulTypedName","src":"3925:8:17","type":""}]},{"body":{"nativeSrc":"4014:16:17","nodeType":"YulBlock","src":"4014:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4023:1:17","nodeType":"YulLiteral","src":"4023:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"4026:1:17","nodeType":"YulLiteral","src":"4026:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4016:6:17","nodeType":"YulIdentifier","src":"4016:6:17"},"nativeSrc":"4016:12:17","nodeType":"YulFunctionCall","src":"4016:12:17"},"nativeSrc":"4016:12:17","nodeType":"YulExpressionStatement","src":"4016:12:17"}]},"condition":{"arguments":[{"name":"offset_3","nativeSrc":"3984:8:17","nodeType":"YulIdentifier","src":"3984:8:17"},{"kind":"number","nativeSrc":"3994:18:17","nodeType":"YulLiteral","src":"3994:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"3981:2:17","nodeType":"YulIdentifier","src":"3981:2:17"},"nativeSrc":"3981:32:17","nodeType":"YulFunctionCall","src":"3981:32:17"},"nativeSrc":"3978:52:17","nodeType":"YulIf","src":"3978:52:17"},{"nativeSrc":"4039:73:17","nodeType":"YulAssignment","src":"4039:73:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4082:9:17","nodeType":"YulIdentifier","src":"4082:9:17"},{"name":"offset_3","nativeSrc":"4093:8:17","nodeType":"YulIdentifier","src":"4093:8:17"}],"functionName":{"name":"add","nativeSrc":"4078:3:17","nodeType":"YulIdentifier","src":"4078:3:17"},"nativeSrc":"4078:24:17","nodeType":"YulFunctionCall","src":"4078:24:17"},{"name":"dataEnd","nativeSrc":"4104:7:17","nodeType":"YulIdentifier","src":"4104:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"4049:28:17","nodeType":"YulIdentifier","src":"4049:28:17"},"nativeSrc":"4049:63:17","nodeType":"YulFunctionCall","src":"4049:63:17"},"variableNames":[{"name":"value3","nativeSrc":"4039:6:17","nodeType":"YulIdentifier","src":"4039:6:17"}]},{"nativeSrc":"4121:49:17","nodeType":"YulVariableDeclaration","src":"4121:49:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4154:9:17","nodeType":"YulIdentifier","src":"4154:9:17"},{"kind":"number","nativeSrc":"4165:3:17","nodeType":"YulLiteral","src":"4165:3:17","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"4150:3:17","nodeType":"YulIdentifier","src":"4150:3:17"},"nativeSrc":"4150:19:17","nodeType":"YulFunctionCall","src":"4150:19:17"}],"functionName":{"name":"calldataload","nativeSrc":"4137:12:17","nodeType":"YulIdentifier","src":"4137:12:17"},"nativeSrc":"4137:33:17","nodeType":"YulFunctionCall","src":"4137:33:17"},"variables":[{"name":"offset_4","nativeSrc":"4125:8:17","nodeType":"YulTypedName","src":"4125:8:17","type":""}]},{"body":{"nativeSrc":"4215:16:17","nodeType":"YulBlock","src":"4215:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4224:1:17","nodeType":"YulLiteral","src":"4224:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"4227:1:17","nodeType":"YulLiteral","src":"4227:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4217:6:17","nodeType":"YulIdentifier","src":"4217:6:17"},"nativeSrc":"4217:12:17","nodeType":"YulFunctionCall","src":"4217:12:17"},"nativeSrc":"4217:12:17","nodeType":"YulExpressionStatement","src":"4217:12:17"}]},"condition":{"arguments":[{"name":"offset_4","nativeSrc":"4185:8:17","nodeType":"YulIdentifier","src":"4185:8:17"},{"kind":"number","nativeSrc":"4195:18:17","nodeType":"YulLiteral","src":"4195:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"4182:2:17","nodeType":"YulIdentifier","src":"4182:2:17"},"nativeSrc":"4182:32:17","nodeType":"YulFunctionCall","src":"4182:32:17"},"nativeSrc":"4179:52:17","nodeType":"YulIf","src":"4179:52:17"},{"nativeSrc":"4240:70:17","nodeType":"YulAssignment","src":"4240:70:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4280:9:17","nodeType":"YulIdentifier","src":"4280:9:17"},{"name":"offset_4","nativeSrc":"4291:8:17","nodeType":"YulIdentifier","src":"4291:8:17"}],"functionName":{"name":"add","nativeSrc":"4276:3:17","nodeType":"YulIdentifier","src":"4276:3:17"},"nativeSrc":"4276:24:17","nodeType":"YulFunctionCall","src":"4276:24:17"},{"name":"dataEnd","nativeSrc":"4302:7:17","nodeType":"YulIdentifier","src":"4302:7:17"}],"functionName":{"name":"abi_decode_array_bool_dyn","nativeSrc":"4250:25:17","nodeType":"YulIdentifier","src":"4250:25:17"},"nativeSrc":"4250:60:17","nodeType":"YulFunctionCall","src":"4250:60:17"},"variableNames":[{"name":"value4","nativeSrc":"4240:6:17","nodeType":"YulIdentifier","src":"4240:6:17"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_bool_$dyn_memory_ptr","nativeSrc":"3004:1312:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3198:9:17","nodeType":"YulTypedName","src":"3198:9:17","type":""},{"name":"dataEnd","nativeSrc":"3209:7:17","nodeType":"YulTypedName","src":"3209:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"3221:6:17","nodeType":"YulTypedName","src":"3221:6:17","type":""},{"name":"value1","nativeSrc":"3229:6:17","nodeType":"YulTypedName","src":"3229:6:17","type":""},{"name":"value2","nativeSrc":"3237:6:17","nodeType":"YulTypedName","src":"3237:6:17","type":""},{"name":"value3","nativeSrc":"3245:6:17","nodeType":"YulTypedName","src":"3245:6:17","type":""},{"name":"value4","nativeSrc":"3253:6:17","nodeType":"YulTypedName","src":"3253:6:17","type":""}],"src":"3004:1312:17"},{"body":{"nativeSrc":"4391:177:17","nodeType":"YulBlock","src":"4391:177:17","statements":[{"body":{"nativeSrc":"4437:16:17","nodeType":"YulBlock","src":"4437:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4446:1:17","nodeType":"YulLiteral","src":"4446:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"4449:1:17","nodeType":"YulLiteral","src":"4449:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4439:6:17","nodeType":"YulIdentifier","src":"4439:6:17"},"nativeSrc":"4439:12:17","nodeType":"YulFunctionCall","src":"4439:12:17"},"nativeSrc":"4439:12:17","nodeType":"YulExpressionStatement","src":"4439:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4412:7:17","nodeType":"YulIdentifier","src":"4412:7:17"},{"name":"headStart","nativeSrc":"4421:9:17","nodeType":"YulIdentifier","src":"4421:9:17"}],"functionName":{"name":"sub","nativeSrc":"4408:3:17","nodeType":"YulIdentifier","src":"4408:3:17"},"nativeSrc":"4408:23:17","nodeType":"YulFunctionCall","src":"4408:23:17"},{"kind":"number","nativeSrc":"4433:2:17","nodeType":"YulLiteral","src":"4433:2:17","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"4404:3:17","nodeType":"YulIdentifier","src":"4404:3:17"},"nativeSrc":"4404:32:17","nodeType":"YulFunctionCall","src":"4404:32:17"},"nativeSrc":"4401:52:17","nodeType":"YulIf","src":"4401:52:17"},{"nativeSrc":"4462:36:17","nodeType":"YulVariableDeclaration","src":"4462:36:17","value":{"arguments":[{"name":"headStart","nativeSrc":"4488:9:17","nodeType":"YulIdentifier","src":"4488:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"4475:12:17","nodeType":"YulIdentifier","src":"4475:12:17"},"nativeSrc":"4475:23:17","nodeType":"YulFunctionCall","src":"4475:23:17"},"variables":[{"name":"value","nativeSrc":"4466:5:17","nodeType":"YulTypedName","src":"4466:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"4532:5:17","nodeType":"YulIdentifier","src":"4532:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"4507:24:17","nodeType":"YulIdentifier","src":"4507:24:17"},"nativeSrc":"4507:31:17","nodeType":"YulFunctionCall","src":"4507:31:17"},"nativeSrc":"4507:31:17","nodeType":"YulExpressionStatement","src":"4507:31:17"},{"nativeSrc":"4547:15:17","nodeType":"YulAssignment","src":"4547:15:17","value":{"name":"value","nativeSrc":"4557:5:17","nodeType":"YulIdentifier","src":"4557:5:17"},"variableNames":[{"name":"value0","nativeSrc":"4547:6:17","nodeType":"YulIdentifier","src":"4547:6:17"}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"4321:247:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4357:9:17","nodeType":"YulTypedName","src":"4357:9:17","type":""},{"name":"dataEnd","nativeSrc":"4368:7:17","nodeType":"YulTypedName","src":"4368:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4380:6:17","nodeType":"YulTypedName","src":"4380:6:17","type":""}],"src":"4321:247:17"},{"body":{"nativeSrc":"4677:383:17","nodeType":"YulBlock","src":"4677:383:17","statements":[{"body":{"nativeSrc":"4723:16:17","nodeType":"YulBlock","src":"4723:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4732:1:17","nodeType":"YulLiteral","src":"4732:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"4735:1:17","nodeType":"YulLiteral","src":"4735:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"4725:6:17","nodeType":"YulIdentifier","src":"4725:6:17"},"nativeSrc":"4725:12:17","nodeType":"YulFunctionCall","src":"4725:12:17"},"nativeSrc":"4725:12:17","nodeType":"YulExpressionStatement","src":"4725:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"4698:7:17","nodeType":"YulIdentifier","src":"4698:7:17"},{"name":"headStart","nativeSrc":"4707:9:17","nodeType":"YulIdentifier","src":"4707:9:17"}],"functionName":{"name":"sub","nativeSrc":"4694:3:17","nodeType":"YulIdentifier","src":"4694:3:17"},"nativeSrc":"4694:23:17","nodeType":"YulFunctionCall","src":"4694:23:17"},{"kind":"number","nativeSrc":"4719:2:17","nodeType":"YulLiteral","src":"4719:2:17","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"4690:3:17","nodeType":"YulIdentifier","src":"4690:3:17"},"nativeSrc":"4690:32:17","nodeType":"YulFunctionCall","src":"4690:32:17"},"nativeSrc":"4687:52:17","nodeType":"YulIf","src":"4687:52:17"},{"nativeSrc":"4748:14:17","nodeType":"YulVariableDeclaration","src":"4748:14:17","value":{"kind":"number","nativeSrc":"4761:1:17","nodeType":"YulLiteral","src":"4761:1:17","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"4752:5:17","nodeType":"YulTypedName","src":"4752:5:17","type":""}]},{"nativeSrc":"4771:32:17","nodeType":"YulAssignment","src":"4771:32:17","value":{"arguments":[{"name":"headStart","nativeSrc":"4793:9:17","nodeType":"YulIdentifier","src":"4793:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"4780:12:17","nodeType":"YulIdentifier","src":"4780:12:17"},"nativeSrc":"4780:23:17","nodeType":"YulFunctionCall","src":"4780:23:17"},"variableNames":[{"name":"value","nativeSrc":"4771:5:17","nodeType":"YulIdentifier","src":"4771:5:17"}]},{"nativeSrc":"4812:15:17","nodeType":"YulAssignment","src":"4812:15:17","value":{"name":"value","nativeSrc":"4822:5:17","nodeType":"YulIdentifier","src":"4822:5:17"},"variableNames":[{"name":"value0","nativeSrc":"4812:6:17","nodeType":"YulIdentifier","src":"4812:6:17"}]},{"nativeSrc":"4836:47:17","nodeType":"YulVariableDeclaration","src":"4836:47:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4868:9:17","nodeType":"YulIdentifier","src":"4868:9:17"},{"kind":"number","nativeSrc":"4879:2:17","nodeType":"YulLiteral","src":"4879:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4864:3:17","nodeType":"YulIdentifier","src":"4864:3:17"},"nativeSrc":"4864:18:17","nodeType":"YulFunctionCall","src":"4864:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"4851:12:17","nodeType":"YulIdentifier","src":"4851:12:17"},"nativeSrc":"4851:32:17","nodeType":"YulFunctionCall","src":"4851:32:17"},"variables":[{"name":"value_1","nativeSrc":"4840:7:17","nodeType":"YulTypedName","src":"4840:7:17","type":""}]},{"expression":{"arguments":[{"name":"value_1","nativeSrc":"4917:7:17","nodeType":"YulIdentifier","src":"4917:7:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"4892:24:17","nodeType":"YulIdentifier","src":"4892:24:17"},"nativeSrc":"4892:33:17","nodeType":"YulFunctionCall","src":"4892:33:17"},"nativeSrc":"4892:33:17","nodeType":"YulExpressionStatement","src":"4892:33:17"},{"nativeSrc":"4934:17:17","nodeType":"YulAssignment","src":"4934:17:17","value":{"name":"value_1","nativeSrc":"4944:7:17","nodeType":"YulIdentifier","src":"4944:7:17"},"variableNames":[{"name":"value1","nativeSrc":"4934:6:17","nodeType":"YulIdentifier","src":"4934:6:17"}]},{"nativeSrc":"4960:16:17","nodeType":"YulVariableDeclaration","src":"4960:16:17","value":{"kind":"number","nativeSrc":"4975:1:17","nodeType":"YulLiteral","src":"4975:1:17","type":"","value":"0"},"variables":[{"name":"value_2","nativeSrc":"4964:7:17","nodeType":"YulTypedName","src":"4964:7:17","type":""}]},{"nativeSrc":"4985:43:17","nodeType":"YulAssignment","src":"4985:43:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5013:9:17","nodeType":"YulIdentifier","src":"5013:9:17"},{"kind":"number","nativeSrc":"5024:2:17","nodeType":"YulLiteral","src":"5024:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5009:3:17","nodeType":"YulIdentifier","src":"5009:3:17"},"nativeSrc":"5009:18:17","nodeType":"YulFunctionCall","src":"5009:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"4996:12:17","nodeType":"YulIdentifier","src":"4996:12:17"},"nativeSrc":"4996:32:17","nodeType":"YulFunctionCall","src":"4996:32:17"},"variableNames":[{"name":"value_2","nativeSrc":"4985:7:17","nodeType":"YulIdentifier","src":"4985:7:17"}]},{"nativeSrc":"5037:17:17","nodeType":"YulAssignment","src":"5037:17:17","value":{"name":"value_2","nativeSrc":"5047:7:17","nodeType":"YulIdentifier","src":"5047:7:17"},"variableNames":[{"name":"value2","nativeSrc":"5037:6:17","nodeType":"YulIdentifier","src":"5037:6:17"}]}]},"name":"abi_decode_tuple_t_uint256t_addresst_uint256","nativeSrc":"4573:487:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4627:9:17","nodeType":"YulTypedName","src":"4627:9:17","type":""},{"name":"dataEnd","nativeSrc":"4638:7:17","nodeType":"YulTypedName","src":"4638:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"4650:6:17","nodeType":"YulTypedName","src":"4650:6:17","type":""},{"name":"value1","nativeSrc":"4658:6:17","nodeType":"YulTypedName","src":"4658:6:17","type":""},{"name":"value2","nativeSrc":"4666:6:17","nodeType":"YulTypedName","src":"4666:6:17","type":""}],"src":"4573:487:17"},{"body":{"nativeSrc":"5135:156:17","nodeType":"YulBlock","src":"5135:156:17","statements":[{"body":{"nativeSrc":"5181:16:17","nodeType":"YulBlock","src":"5181:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5190:1:17","nodeType":"YulLiteral","src":"5190:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"5193:1:17","nodeType":"YulLiteral","src":"5193:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5183:6:17","nodeType":"YulIdentifier","src":"5183:6:17"},"nativeSrc":"5183:12:17","nodeType":"YulFunctionCall","src":"5183:12:17"},"nativeSrc":"5183:12:17","nodeType":"YulExpressionStatement","src":"5183:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5156:7:17","nodeType":"YulIdentifier","src":"5156:7:17"},{"name":"headStart","nativeSrc":"5165:9:17","nodeType":"YulIdentifier","src":"5165:9:17"}],"functionName":{"name":"sub","nativeSrc":"5152:3:17","nodeType":"YulIdentifier","src":"5152:3:17"},"nativeSrc":"5152:23:17","nodeType":"YulFunctionCall","src":"5152:23:17"},{"kind":"number","nativeSrc":"5177:2:17","nodeType":"YulLiteral","src":"5177:2:17","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"5148:3:17","nodeType":"YulIdentifier","src":"5148:3:17"},"nativeSrc":"5148:32:17","nodeType":"YulFunctionCall","src":"5148:32:17"},"nativeSrc":"5145:52:17","nodeType":"YulIf","src":"5145:52:17"},{"nativeSrc":"5206:14:17","nodeType":"YulVariableDeclaration","src":"5206:14:17","value":{"kind":"number","nativeSrc":"5219:1:17","nodeType":"YulLiteral","src":"5219:1:17","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"5210:5:17","nodeType":"YulTypedName","src":"5210:5:17","type":""}]},{"nativeSrc":"5229:32:17","nodeType":"YulAssignment","src":"5229:32:17","value":{"arguments":[{"name":"headStart","nativeSrc":"5251:9:17","nodeType":"YulIdentifier","src":"5251:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"5238:12:17","nodeType":"YulIdentifier","src":"5238:12:17"},"nativeSrc":"5238:23:17","nodeType":"YulFunctionCall","src":"5238:23:17"},"variableNames":[{"name":"value","nativeSrc":"5229:5:17","nodeType":"YulIdentifier","src":"5229:5:17"}]},{"nativeSrc":"5270:15:17","nodeType":"YulAssignment","src":"5270:15:17","value":{"name":"value","nativeSrc":"5280:5:17","nodeType":"YulIdentifier","src":"5280:5:17"},"variableNames":[{"name":"value0","nativeSrc":"5270:6:17","nodeType":"YulIdentifier","src":"5270:6:17"}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"5065:226:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5101:9:17","nodeType":"YulTypedName","src":"5101:9:17","type":""},{"name":"dataEnd","nativeSrc":"5112:7:17","nodeType":"YulTypedName","src":"5112:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5124:6:17","nodeType":"YulTypedName","src":"5124:6:17","type":""}],"src":"5065:226:17"},{"body":{"nativeSrc":"5360:680:17","nodeType":"YulBlock","src":"5360:680:17","statements":[{"body":{"nativeSrc":"5409:16:17","nodeType":"YulBlock","src":"5409:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5418:1:17","nodeType":"YulLiteral","src":"5418:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"5421:1:17","nodeType":"YulLiteral","src":"5421:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5411:6:17","nodeType":"YulIdentifier","src":"5411:6:17"},"nativeSrc":"5411:12:17","nodeType":"YulFunctionCall","src":"5411:12:17"},"nativeSrc":"5411:12:17","nodeType":"YulExpressionStatement","src":"5411:12:17"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"5388:6:17","nodeType":"YulIdentifier","src":"5388:6:17"},{"kind":"number","nativeSrc":"5396:4:17","nodeType":"YulLiteral","src":"5396:4:17","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"5384:3:17","nodeType":"YulIdentifier","src":"5384:3:17"},"nativeSrc":"5384:17:17","nodeType":"YulFunctionCall","src":"5384:17:17"},{"name":"end","nativeSrc":"5403:3:17","nodeType":"YulIdentifier","src":"5403:3:17"}],"functionName":{"name":"slt","nativeSrc":"5380:3:17","nodeType":"YulIdentifier","src":"5380:3:17"},"nativeSrc":"5380:27:17","nodeType":"YulFunctionCall","src":"5380:27:17"}],"functionName":{"name":"iszero","nativeSrc":"5373:6:17","nodeType":"YulIdentifier","src":"5373:6:17"},"nativeSrc":"5373:35:17","nodeType":"YulFunctionCall","src":"5373:35:17"},"nativeSrc":"5370:55:17","nodeType":"YulIf","src":"5370:55:17"},{"nativeSrc":"5434:34:17","nodeType":"YulVariableDeclaration","src":"5434:34:17","value":{"arguments":[{"name":"offset","nativeSrc":"5461:6:17","nodeType":"YulIdentifier","src":"5461:6:17"}],"functionName":{"name":"calldataload","nativeSrc":"5448:12:17","nodeType":"YulIdentifier","src":"5448:12:17"},"nativeSrc":"5448:20:17","nodeType":"YulFunctionCall","src":"5448:20:17"},"variables":[{"name":"length","nativeSrc":"5438:6:17","nodeType":"YulTypedName","src":"5438:6:17","type":""}]},{"nativeSrc":"5477:75:17","nodeType":"YulVariableDeclaration","src":"5477:75:17","value":{"arguments":[{"arguments":[{"name":"length","nativeSrc":"5544:6:17","nodeType":"YulIdentifier","src":"5544:6:17"}],"functionName":{"name":"array_allocation_size_array_uint256_dyn","nativeSrc":"5504:39:17","nodeType":"YulIdentifier","src":"5504:39:17"},"nativeSrc":"5504:47:17","nodeType":"YulFunctionCall","src":"5504:47:17"}],"functionName":{"name":"allocate_memory","nativeSrc":"5488:15:17","nodeType":"YulIdentifier","src":"5488:15:17"},"nativeSrc":"5488:64:17","nodeType":"YulFunctionCall","src":"5488:64:17"},"variables":[{"name":"dst","nativeSrc":"5481:3:17","nodeType":"YulTypedName","src":"5481:3:17","type":""}]},{"nativeSrc":"5561:18:17","nodeType":"YulVariableDeclaration","src":"5561:18:17","value":{"name":"dst","nativeSrc":"5576:3:17","nodeType":"YulIdentifier","src":"5576:3:17"},"variables":[{"name":"array_1","nativeSrc":"5565:7:17","nodeType":"YulTypedName","src":"5565:7:17","type":""}]},{"expression":{"arguments":[{"name":"dst","nativeSrc":"5595:3:17","nodeType":"YulIdentifier","src":"5595:3:17"},{"name":"length","nativeSrc":"5600:6:17","nodeType":"YulIdentifier","src":"5600:6:17"}],"functionName":{"name":"mstore","nativeSrc":"5588:6:17","nodeType":"YulIdentifier","src":"5588:6:17"},"nativeSrc":"5588:19:17","nodeType":"YulFunctionCall","src":"5588:19:17"},"nativeSrc":"5588:19:17","nodeType":"YulExpressionStatement","src":"5588:19:17"},{"nativeSrc":"5616:21:17","nodeType":"YulAssignment","src":"5616:21:17","value":{"arguments":[{"name":"dst","nativeSrc":"5627:3:17","nodeType":"YulIdentifier","src":"5627:3:17"},{"kind":"number","nativeSrc":"5632:4:17","nodeType":"YulLiteral","src":"5632:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5623:3:17","nodeType":"YulIdentifier","src":"5623:3:17"},"nativeSrc":"5623:14:17","nodeType":"YulFunctionCall","src":"5623:14:17"},"variableNames":[{"name":"dst","nativeSrc":"5616:3:17","nodeType":"YulIdentifier","src":"5616:3:17"}]},{"nativeSrc":"5646:52:17","nodeType":"YulVariableDeclaration","src":"5646:52:17","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"5668:6:17","nodeType":"YulIdentifier","src":"5668:6:17"},{"arguments":[{"kind":"number","nativeSrc":"5680:1:17","nodeType":"YulLiteral","src":"5680:1:17","type":"","value":"5"},{"name":"length","nativeSrc":"5683:6:17","nodeType":"YulIdentifier","src":"5683:6:17"}],"functionName":{"name":"shl","nativeSrc":"5676:3:17","nodeType":"YulIdentifier","src":"5676:3:17"},"nativeSrc":"5676:14:17","nodeType":"YulFunctionCall","src":"5676:14:17"}],"functionName":{"name":"add","nativeSrc":"5664:3:17","nodeType":"YulIdentifier","src":"5664:3:17"},"nativeSrc":"5664:27:17","nodeType":"YulFunctionCall","src":"5664:27:17"},{"kind":"number","nativeSrc":"5693:4:17","nodeType":"YulLiteral","src":"5693:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5660:3:17","nodeType":"YulIdentifier","src":"5660:3:17"},"nativeSrc":"5660:38:17","nodeType":"YulFunctionCall","src":"5660:38:17"},"variables":[{"name":"srcEnd","nativeSrc":"5650:6:17","nodeType":"YulTypedName","src":"5650:6:17","type":""}]},{"body":{"nativeSrc":"5726:16:17","nodeType":"YulBlock","src":"5726:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5735:1:17","nodeType":"YulLiteral","src":"5735:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"5738:1:17","nodeType":"YulLiteral","src":"5738:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5728:6:17","nodeType":"YulIdentifier","src":"5728:6:17"},"nativeSrc":"5728:12:17","nodeType":"YulFunctionCall","src":"5728:12:17"},"nativeSrc":"5728:12:17","nodeType":"YulExpressionStatement","src":"5728:12:17"}]},"condition":{"arguments":[{"name":"srcEnd","nativeSrc":"5713:6:17","nodeType":"YulIdentifier","src":"5713:6:17"},{"name":"end","nativeSrc":"5721:3:17","nodeType":"YulIdentifier","src":"5721:3:17"}],"functionName":{"name":"gt","nativeSrc":"5710:2:17","nodeType":"YulIdentifier","src":"5710:2:17"},"nativeSrc":"5710:15:17","nodeType":"YulFunctionCall","src":"5710:15:17"},"nativeSrc":"5707:35:17","nodeType":"YulIf","src":"5707:35:17"},{"nativeSrc":"5751:28:17","nodeType":"YulVariableDeclaration","src":"5751:28:17","value":{"arguments":[{"name":"offset","nativeSrc":"5766:6:17","nodeType":"YulIdentifier","src":"5766:6:17"},{"kind":"number","nativeSrc":"5774:4:17","nodeType":"YulLiteral","src":"5774:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5762:3:17","nodeType":"YulIdentifier","src":"5762:3:17"},"nativeSrc":"5762:17:17","nodeType":"YulFunctionCall","src":"5762:17:17"},"variables":[{"name":"src","nativeSrc":"5755:3:17","nodeType":"YulTypedName","src":"5755:3:17","type":""}]},{"body":{"nativeSrc":"5846:163:17","nodeType":"YulBlock","src":"5846:163:17","statements":[{"nativeSrc":"5860:30:17","nodeType":"YulVariableDeclaration","src":"5860:30:17","value":{"arguments":[{"name":"src","nativeSrc":"5886:3:17","nodeType":"YulIdentifier","src":"5886:3:17"}],"functionName":{"name":"calldataload","nativeSrc":"5873:12:17","nodeType":"YulIdentifier","src":"5873:12:17"},"nativeSrc":"5873:17:17","nodeType":"YulFunctionCall","src":"5873:17:17"},"variables":[{"name":"value","nativeSrc":"5864:5:17","nodeType":"YulTypedName","src":"5864:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"5928:5:17","nodeType":"YulIdentifier","src":"5928:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"5903:24:17","nodeType":"YulIdentifier","src":"5903:24:17"},"nativeSrc":"5903:31:17","nodeType":"YulFunctionCall","src":"5903:31:17"},"nativeSrc":"5903:31:17","nodeType":"YulExpressionStatement","src":"5903:31:17"},{"expression":{"arguments":[{"name":"dst","nativeSrc":"5954:3:17","nodeType":"YulIdentifier","src":"5954:3:17"},{"name":"value","nativeSrc":"5959:5:17","nodeType":"YulIdentifier","src":"5959:5:17"}],"functionName":{"name":"mstore","nativeSrc":"5947:6:17","nodeType":"YulIdentifier","src":"5947:6:17"},"nativeSrc":"5947:18:17","nodeType":"YulFunctionCall","src":"5947:18:17"},"nativeSrc":"5947:18:17","nodeType":"YulExpressionStatement","src":"5947:18:17"},{"nativeSrc":"5978:21:17","nodeType":"YulAssignment","src":"5978:21:17","value":{"arguments":[{"name":"dst","nativeSrc":"5989:3:17","nodeType":"YulIdentifier","src":"5989:3:17"},{"kind":"number","nativeSrc":"5994:4:17","nodeType":"YulLiteral","src":"5994:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5985:3:17","nodeType":"YulIdentifier","src":"5985:3:17"},"nativeSrc":"5985:14:17","nodeType":"YulFunctionCall","src":"5985:14:17"},"variableNames":[{"name":"dst","nativeSrc":"5978:3:17","nodeType":"YulIdentifier","src":"5978:3:17"}]}]},"condition":{"arguments":[{"name":"src","nativeSrc":"5799:3:17","nodeType":"YulIdentifier","src":"5799:3:17"},{"name":"srcEnd","nativeSrc":"5804:6:17","nodeType":"YulIdentifier","src":"5804:6:17"}],"functionName":{"name":"lt","nativeSrc":"5796:2:17","nodeType":"YulIdentifier","src":"5796:2:17"},"nativeSrc":"5796:15:17","nodeType":"YulFunctionCall","src":"5796:15:17"},"nativeSrc":"5788:221:17","nodeType":"YulForLoop","post":{"nativeSrc":"5812:25:17","nodeType":"YulBlock","src":"5812:25:17","statements":[{"nativeSrc":"5814:21:17","nodeType":"YulAssignment","src":"5814:21:17","value":{"arguments":[{"name":"src","nativeSrc":"5825:3:17","nodeType":"YulIdentifier","src":"5825:3:17"},{"kind":"number","nativeSrc":"5830:4:17","nodeType":"YulLiteral","src":"5830:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5821:3:17","nodeType":"YulIdentifier","src":"5821:3:17"},"nativeSrc":"5821:14:17","nodeType":"YulFunctionCall","src":"5821:14:17"},"variableNames":[{"name":"src","nativeSrc":"5814:3:17","nodeType":"YulIdentifier","src":"5814:3:17"}]}]},"pre":{"nativeSrc":"5792:3:17","nodeType":"YulBlock","src":"5792:3:17","statements":[]},"src":"5788:221:17"},{"nativeSrc":"6018:16:17","nodeType":"YulAssignment","src":"6018:16:17","value":{"name":"array_1","nativeSrc":"6027:7:17","nodeType":"YulIdentifier","src":"6027:7:17"},"variableNames":[{"name":"array","nativeSrc":"6018:5:17","nodeType":"YulIdentifier","src":"6018:5:17"}]}]},"name":"abi_decode_array_address_dyn","nativeSrc":"5296:744:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"5334:6:17","nodeType":"YulTypedName","src":"5334:6:17","type":""},{"name":"end","nativeSrc":"5342:3:17","nodeType":"YulTypedName","src":"5342:3:17","type":""}],"returnVariables":[{"name":"array","nativeSrc":"5350:5:17","nodeType":"YulTypedName","src":"5350:5:17","type":""}],"src":"5296:744:17"},{"body":{"nativeSrc":"6199:571:17","nodeType":"YulBlock","src":"6199:571:17","statements":[{"body":{"nativeSrc":"6245:16:17","nodeType":"YulBlock","src":"6245:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6254:1:17","nodeType":"YulLiteral","src":"6254:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"6257:1:17","nodeType":"YulLiteral","src":"6257:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6247:6:17","nodeType":"YulIdentifier","src":"6247:6:17"},"nativeSrc":"6247:12:17","nodeType":"YulFunctionCall","src":"6247:12:17"},"nativeSrc":"6247:12:17","nodeType":"YulExpressionStatement","src":"6247:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6220:7:17","nodeType":"YulIdentifier","src":"6220:7:17"},{"name":"headStart","nativeSrc":"6229:9:17","nodeType":"YulIdentifier","src":"6229:9:17"}],"functionName":{"name":"sub","nativeSrc":"6216:3:17","nodeType":"YulIdentifier","src":"6216:3:17"},"nativeSrc":"6216:23:17","nodeType":"YulFunctionCall","src":"6216:23:17"},{"kind":"number","nativeSrc":"6241:2:17","nodeType":"YulLiteral","src":"6241:2:17","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"6212:3:17","nodeType":"YulIdentifier","src":"6212:3:17"},"nativeSrc":"6212:32:17","nodeType":"YulFunctionCall","src":"6212:32:17"},"nativeSrc":"6209:52:17","nodeType":"YulIf","src":"6209:52:17"},{"nativeSrc":"6270:36:17","nodeType":"YulVariableDeclaration","src":"6270:36:17","value":{"arguments":[{"name":"headStart","nativeSrc":"6296:9:17","nodeType":"YulIdentifier","src":"6296:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"6283:12:17","nodeType":"YulIdentifier","src":"6283:12:17"},"nativeSrc":"6283:23:17","nodeType":"YulFunctionCall","src":"6283:23:17"},"variables":[{"name":"value","nativeSrc":"6274:5:17","nodeType":"YulTypedName","src":"6274:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"6340:5:17","nodeType":"YulIdentifier","src":"6340:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"6315:24:17","nodeType":"YulIdentifier","src":"6315:24:17"},"nativeSrc":"6315:31:17","nodeType":"YulFunctionCall","src":"6315:31:17"},"nativeSrc":"6315:31:17","nodeType":"YulExpressionStatement","src":"6315:31:17"},{"nativeSrc":"6355:15:17","nodeType":"YulAssignment","src":"6355:15:17","value":{"name":"value","nativeSrc":"6365:5:17","nodeType":"YulIdentifier","src":"6365:5:17"},"variableNames":[{"name":"value0","nativeSrc":"6355:6:17","nodeType":"YulIdentifier","src":"6355:6:17"}]},{"nativeSrc":"6379:46:17","nodeType":"YulVariableDeclaration","src":"6379:46:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6410:9:17","nodeType":"YulIdentifier","src":"6410:9:17"},{"kind":"number","nativeSrc":"6421:2:17","nodeType":"YulLiteral","src":"6421:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6406:3:17","nodeType":"YulIdentifier","src":"6406:3:17"},"nativeSrc":"6406:18:17","nodeType":"YulFunctionCall","src":"6406:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"6393:12:17","nodeType":"YulIdentifier","src":"6393:12:17"},"nativeSrc":"6393:32:17","nodeType":"YulFunctionCall","src":"6393:32:17"},"variables":[{"name":"offset","nativeSrc":"6383:6:17","nodeType":"YulTypedName","src":"6383:6:17","type":""}]},{"body":{"nativeSrc":"6468:16:17","nodeType":"YulBlock","src":"6468:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6477:1:17","nodeType":"YulLiteral","src":"6477:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"6480:1:17","nodeType":"YulLiteral","src":"6480:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6470:6:17","nodeType":"YulIdentifier","src":"6470:6:17"},"nativeSrc":"6470:12:17","nodeType":"YulFunctionCall","src":"6470:12:17"},"nativeSrc":"6470:12:17","nodeType":"YulExpressionStatement","src":"6470:12:17"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"6440:6:17","nodeType":"YulIdentifier","src":"6440:6:17"},{"kind":"number","nativeSrc":"6448:18:17","nodeType":"YulLiteral","src":"6448:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"6437:2:17","nodeType":"YulIdentifier","src":"6437:2:17"},"nativeSrc":"6437:30:17","nodeType":"YulFunctionCall","src":"6437:30:17"},"nativeSrc":"6434:50:17","nodeType":"YulIf","src":"6434:50:17"},{"nativeSrc":"6493:71:17","nodeType":"YulAssignment","src":"6493:71:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6536:9:17","nodeType":"YulIdentifier","src":"6536:9:17"},{"name":"offset","nativeSrc":"6547:6:17","nodeType":"YulIdentifier","src":"6547:6:17"}],"functionName":{"name":"add","nativeSrc":"6532:3:17","nodeType":"YulIdentifier","src":"6532:3:17"},"nativeSrc":"6532:22:17","nodeType":"YulFunctionCall","src":"6532:22:17"},{"name":"dataEnd","nativeSrc":"6556:7:17","nodeType":"YulIdentifier","src":"6556:7:17"}],"functionName":{"name":"abi_decode_array_address_dyn","nativeSrc":"6503:28:17","nodeType":"YulIdentifier","src":"6503:28:17"},"nativeSrc":"6503:61:17","nodeType":"YulFunctionCall","src":"6503:61:17"},"variableNames":[{"name":"value1","nativeSrc":"6493:6:17","nodeType":"YulIdentifier","src":"6493:6:17"}]},{"nativeSrc":"6573:48:17","nodeType":"YulVariableDeclaration","src":"6573:48:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6606:9:17","nodeType":"YulIdentifier","src":"6606:9:17"},{"kind":"number","nativeSrc":"6617:2:17","nodeType":"YulLiteral","src":"6617:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6602:3:17","nodeType":"YulIdentifier","src":"6602:3:17"},"nativeSrc":"6602:18:17","nodeType":"YulFunctionCall","src":"6602:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"6589:12:17","nodeType":"YulIdentifier","src":"6589:12:17"},"nativeSrc":"6589:32:17","nodeType":"YulFunctionCall","src":"6589:32:17"},"variables":[{"name":"offset_1","nativeSrc":"6577:8:17","nodeType":"YulTypedName","src":"6577:8:17","type":""}]},{"body":{"nativeSrc":"6666:16:17","nodeType":"YulBlock","src":"6666:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6675:1:17","nodeType":"YulLiteral","src":"6675:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"6678:1:17","nodeType":"YulLiteral","src":"6678:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6668:6:17","nodeType":"YulIdentifier","src":"6668:6:17"},"nativeSrc":"6668:12:17","nodeType":"YulFunctionCall","src":"6668:12:17"},"nativeSrc":"6668:12:17","nodeType":"YulExpressionStatement","src":"6668:12:17"}]},"condition":{"arguments":[{"name":"offset_1","nativeSrc":"6636:8:17","nodeType":"YulIdentifier","src":"6636:8:17"},{"kind":"number","nativeSrc":"6646:18:17","nodeType":"YulLiteral","src":"6646:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"6633:2:17","nodeType":"YulIdentifier","src":"6633:2:17"},"nativeSrc":"6633:32:17","nodeType":"YulFunctionCall","src":"6633:32:17"},"nativeSrc":"6630:52:17","nodeType":"YulIf","src":"6630:52:17"},{"nativeSrc":"6691:73:17","nodeType":"YulAssignment","src":"6691:73:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6734:9:17","nodeType":"YulIdentifier","src":"6734:9:17"},{"name":"offset_1","nativeSrc":"6745:8:17","nodeType":"YulIdentifier","src":"6745:8:17"}],"functionName":{"name":"add","nativeSrc":"6730:3:17","nodeType":"YulIdentifier","src":"6730:3:17"},"nativeSrc":"6730:24:17","nodeType":"YulFunctionCall","src":"6730:24:17"},{"name":"dataEnd","nativeSrc":"6756:7:17","nodeType":"YulIdentifier","src":"6756:7:17"}],"functionName":{"name":"abi_decode_array_address_dyn","nativeSrc":"6701:28:17","nodeType":"YulIdentifier","src":"6701:28:17"},"nativeSrc":"6701:63:17","nodeType":"YulFunctionCall","src":"6701:63:17"},"variableNames":[{"name":"value2","nativeSrc":"6691:6:17","nodeType":"YulIdentifier","src":"6691:6:17"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptr","nativeSrc":"6045:725:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6149:9:17","nodeType":"YulTypedName","src":"6149:9:17","type":""},{"name":"dataEnd","nativeSrc":"6160:7:17","nodeType":"YulTypedName","src":"6160:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6172:6:17","nodeType":"YulTypedName","src":"6172:6:17","type":""},{"name":"value1","nativeSrc":"6180:6:17","nodeType":"YulTypedName","src":"6180:6:17","type":""},{"name":"value2","nativeSrc":"6188:6:17","nodeType":"YulTypedName","src":"6188:6:17","type":""}],"src":"6045:725:17"},{"body":{"nativeSrc":"6871:804:17","nodeType":"YulBlock","src":"6871:804:17","statements":[{"body":{"nativeSrc":"6917:16:17","nodeType":"YulBlock","src":"6917:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6926:1:17","nodeType":"YulLiteral","src":"6926:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"6929:1:17","nodeType":"YulLiteral","src":"6929:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"6919:6:17","nodeType":"YulIdentifier","src":"6919:6:17"},"nativeSrc":"6919:12:17","nodeType":"YulFunctionCall","src":"6919:12:17"},"nativeSrc":"6919:12:17","nodeType":"YulExpressionStatement","src":"6919:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"6892:7:17","nodeType":"YulIdentifier","src":"6892:7:17"},{"name":"headStart","nativeSrc":"6901:9:17","nodeType":"YulIdentifier","src":"6901:9:17"}],"functionName":{"name":"sub","nativeSrc":"6888:3:17","nodeType":"YulIdentifier","src":"6888:3:17"},"nativeSrc":"6888:23:17","nodeType":"YulFunctionCall","src":"6888:23:17"},{"kind":"number","nativeSrc":"6913:2:17","nodeType":"YulLiteral","src":"6913:2:17","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"6884:3:17","nodeType":"YulIdentifier","src":"6884:3:17"},"nativeSrc":"6884:32:17","nodeType":"YulFunctionCall","src":"6884:32:17"},"nativeSrc":"6881:52:17","nodeType":"YulIf","src":"6881:52:17"},{"nativeSrc":"6942:36:17","nodeType":"YulVariableDeclaration","src":"6942:36:17","value":{"arguments":[{"name":"headStart","nativeSrc":"6968:9:17","nodeType":"YulIdentifier","src":"6968:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"6955:12:17","nodeType":"YulIdentifier","src":"6955:12:17"},"nativeSrc":"6955:23:17","nodeType":"YulFunctionCall","src":"6955:23:17"},"variables":[{"name":"value","nativeSrc":"6946:5:17","nodeType":"YulTypedName","src":"6946:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"7012:5:17","nodeType":"YulIdentifier","src":"7012:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"6987:24:17","nodeType":"YulIdentifier","src":"6987:24:17"},"nativeSrc":"6987:31:17","nodeType":"YulFunctionCall","src":"6987:31:17"},"nativeSrc":"6987:31:17","nodeType":"YulExpressionStatement","src":"6987:31:17"},{"nativeSrc":"7027:15:17","nodeType":"YulAssignment","src":"7027:15:17","value":{"name":"value","nativeSrc":"7037:5:17","nodeType":"YulIdentifier","src":"7037:5:17"},"variableNames":[{"name":"value0","nativeSrc":"7027:6:17","nodeType":"YulIdentifier","src":"7027:6:17"}]},{"nativeSrc":"7051:46:17","nodeType":"YulVariableDeclaration","src":"7051:46:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"7082:9:17","nodeType":"YulIdentifier","src":"7082:9:17"},{"kind":"number","nativeSrc":"7093:2:17","nodeType":"YulLiteral","src":"7093:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7078:3:17","nodeType":"YulIdentifier","src":"7078:3:17"},"nativeSrc":"7078:18:17","nodeType":"YulFunctionCall","src":"7078:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"7065:12:17","nodeType":"YulIdentifier","src":"7065:12:17"},"nativeSrc":"7065:32:17","nodeType":"YulFunctionCall","src":"7065:32:17"},"variables":[{"name":"offset","nativeSrc":"7055:6:17","nodeType":"YulTypedName","src":"7055:6:17","type":""}]},{"body":{"nativeSrc":"7140:16:17","nodeType":"YulBlock","src":"7140:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"7149:1:17","nodeType":"YulLiteral","src":"7149:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"7152:1:17","nodeType":"YulLiteral","src":"7152:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"7142:6:17","nodeType":"YulIdentifier","src":"7142:6:17"},"nativeSrc":"7142:12:17","nodeType":"YulFunctionCall","src":"7142:12:17"},"nativeSrc":"7142:12:17","nodeType":"YulExpressionStatement","src":"7142:12:17"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"7112:6:17","nodeType":"YulIdentifier","src":"7112:6:17"},{"kind":"number","nativeSrc":"7120:18:17","nodeType":"YulLiteral","src":"7120:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"7109:2:17","nodeType":"YulIdentifier","src":"7109:2:17"},"nativeSrc":"7109:30:17","nodeType":"YulFunctionCall","src":"7109:30:17"},"nativeSrc":"7106:50:17","nodeType":"YulIf","src":"7106:50:17"},{"nativeSrc":"7165:32:17","nodeType":"YulVariableDeclaration","src":"7165:32:17","value":{"arguments":[{"name":"headStart","nativeSrc":"7179:9:17","nodeType":"YulIdentifier","src":"7179:9:17"},{"name":"offset","nativeSrc":"7190:6:17","nodeType":"YulIdentifier","src":"7190:6:17"}],"functionName":{"name":"add","nativeSrc":"7175:3:17","nodeType":"YulIdentifier","src":"7175:3:17"},"nativeSrc":"7175:22:17","nodeType":"YulFunctionCall","src":"7175:22:17"},"variables":[{"name":"_1","nativeSrc":"7169:2:17","nodeType":"YulTypedName","src":"7169:2:17","type":""}]},{"body":{"nativeSrc":"7245:16:17","nodeType":"YulBlock","src":"7245:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"7254:1:17","nodeType":"YulLiteral","src":"7254:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"7257:1:17","nodeType":"YulLiteral","src":"7257:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"7247:6:17","nodeType":"YulIdentifier","src":"7247:6:17"},"nativeSrc":"7247:12:17","nodeType":"YulFunctionCall","src":"7247:12:17"},"nativeSrc":"7247:12:17","nodeType":"YulExpressionStatement","src":"7247:12:17"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"7224:2:17","nodeType":"YulIdentifier","src":"7224:2:17"},{"kind":"number","nativeSrc":"7228:4:17","nodeType":"YulLiteral","src":"7228:4:17","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"7220:3:17","nodeType":"YulIdentifier","src":"7220:3:17"},"nativeSrc":"7220:13:17","nodeType":"YulFunctionCall","src":"7220:13:17"},{"name":"dataEnd","nativeSrc":"7235:7:17","nodeType":"YulIdentifier","src":"7235:7:17"}],"functionName":{"name":"slt","nativeSrc":"7216:3:17","nodeType":"YulIdentifier","src":"7216:3:17"},"nativeSrc":"7216:27:17","nodeType":"YulFunctionCall","src":"7216:27:17"}],"functionName":{"name":"iszero","nativeSrc":"7209:6:17","nodeType":"YulIdentifier","src":"7209:6:17"},"nativeSrc":"7209:35:17","nodeType":"YulFunctionCall","src":"7209:35:17"},"nativeSrc":"7206:55:17","nodeType":"YulIf","src":"7206:55:17"},{"nativeSrc":"7270:30:17","nodeType":"YulVariableDeclaration","src":"7270:30:17","value":{"arguments":[{"name":"_1","nativeSrc":"7297:2:17","nodeType":"YulIdentifier","src":"7297:2:17"}],"functionName":{"name":"calldataload","nativeSrc":"7284:12:17","nodeType":"YulIdentifier","src":"7284:12:17"},"nativeSrc":"7284:16:17","nodeType":"YulFunctionCall","src":"7284:16:17"},"variables":[{"name":"length","nativeSrc":"7274:6:17","nodeType":"YulTypedName","src":"7274:6:17","type":""}]},{"body":{"nativeSrc":"7343:22:17","nodeType":"YulBlock","src":"7343:22:17","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nativeSrc":"7345:16:17","nodeType":"YulIdentifier","src":"7345:16:17"},"nativeSrc":"7345:18:17","nodeType":"YulFunctionCall","src":"7345:18:17"},"nativeSrc":"7345:18:17","nodeType":"YulExpressionStatement","src":"7345:18:17"}]},"condition":{"arguments":[{"name":"length","nativeSrc":"7315:6:17","nodeType":"YulIdentifier","src":"7315:6:17"},{"kind":"number","nativeSrc":"7323:18:17","nodeType":"YulLiteral","src":"7323:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"7312:2:17","nodeType":"YulIdentifier","src":"7312:2:17"},"nativeSrc":"7312:30:17","nodeType":"YulFunctionCall","src":"7312:30:17"},"nativeSrc":"7309:56:17","nodeType":"YulIf","src":"7309:56:17"},{"nativeSrc":"7374:70:17","nodeType":"YulVariableDeclaration","src":"7374:70:17","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"length","nativeSrc":"7415:6:17","nodeType":"YulIdentifier","src":"7415:6:17"},{"kind":"number","nativeSrc":"7423:4:17","nodeType":"YulLiteral","src":"7423:4:17","type":"","value":"0x1f"}],"functionName":{"name":"add","nativeSrc":"7411:3:17","nodeType":"YulIdentifier","src":"7411:3:17"},"nativeSrc":"7411:17:17","nodeType":"YulFunctionCall","src":"7411:17:17"},{"arguments":[{"kind":"number","nativeSrc":"7434:2:17","nodeType":"YulLiteral","src":"7434:2:17","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"7430:3:17","nodeType":"YulIdentifier","src":"7430:3:17"},"nativeSrc":"7430:7:17","nodeType":"YulFunctionCall","src":"7430:7:17"}],"functionName":{"name":"and","nativeSrc":"7407:3:17","nodeType":"YulIdentifier","src":"7407:3:17"},"nativeSrc":"7407:31:17","nodeType":"YulFunctionCall","src":"7407:31:17"},{"kind":"number","nativeSrc":"7440:2:17","nodeType":"YulLiteral","src":"7440:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7403:3:17","nodeType":"YulIdentifier","src":"7403:3:17"},"nativeSrc":"7403:40:17","nodeType":"YulFunctionCall","src":"7403:40:17"}],"functionName":{"name":"allocate_memory","nativeSrc":"7387:15:17","nodeType":"YulIdentifier","src":"7387:15:17"},"nativeSrc":"7387:57:17","nodeType":"YulFunctionCall","src":"7387:57:17"},"variables":[{"name":"array","nativeSrc":"7378:5:17","nodeType":"YulTypedName","src":"7378:5:17","type":""}]},{"expression":{"arguments":[{"name":"array","nativeSrc":"7460:5:17","nodeType":"YulIdentifier","src":"7460:5:17"},{"name":"length","nativeSrc":"7467:6:17","nodeType":"YulIdentifier","src":"7467:6:17"}],"functionName":{"name":"mstore","nativeSrc":"7453:6:17","nodeType":"YulIdentifier","src":"7453:6:17"},"nativeSrc":"7453:21:17","nodeType":"YulFunctionCall","src":"7453:21:17"},"nativeSrc":"7453:21:17","nodeType":"YulExpressionStatement","src":"7453:21:17"},{"body":{"nativeSrc":"7524:16:17","nodeType":"YulBlock","src":"7524:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"7533:1:17","nodeType":"YulLiteral","src":"7533:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"7536:1:17","nodeType":"YulLiteral","src":"7536:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"7526:6:17","nodeType":"YulIdentifier","src":"7526:6:17"},"nativeSrc":"7526:12:17","nodeType":"YulFunctionCall","src":"7526:12:17"},"nativeSrc":"7526:12:17","nodeType":"YulExpressionStatement","src":"7526:12:17"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nativeSrc":"7497:2:17","nodeType":"YulIdentifier","src":"7497:2:17"},{"name":"length","nativeSrc":"7501:6:17","nodeType":"YulIdentifier","src":"7501:6:17"}],"functionName":{"name":"add","nativeSrc":"7493:3:17","nodeType":"YulIdentifier","src":"7493:3:17"},"nativeSrc":"7493:15:17","nodeType":"YulFunctionCall","src":"7493:15:17"},{"kind":"number","nativeSrc":"7510:2:17","nodeType":"YulLiteral","src":"7510:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7489:3:17","nodeType":"YulIdentifier","src":"7489:3:17"},"nativeSrc":"7489:24:17","nodeType":"YulFunctionCall","src":"7489:24:17"},{"name":"dataEnd","nativeSrc":"7515:7:17","nodeType":"YulIdentifier","src":"7515:7:17"}],"functionName":{"name":"gt","nativeSrc":"7486:2:17","nodeType":"YulIdentifier","src":"7486:2:17"},"nativeSrc":"7486:37:17","nodeType":"YulFunctionCall","src":"7486:37:17"},"nativeSrc":"7483:57:17","nodeType":"YulIf","src":"7483:57:17"},{"expression":{"arguments":[{"arguments":[{"name":"array","nativeSrc":"7566:5:17","nodeType":"YulIdentifier","src":"7566:5:17"},{"kind":"number","nativeSrc":"7573:2:17","nodeType":"YulLiteral","src":"7573:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7562:3:17","nodeType":"YulIdentifier","src":"7562:3:17"},"nativeSrc":"7562:14:17","nodeType":"YulFunctionCall","src":"7562:14:17"},{"arguments":[{"name":"_1","nativeSrc":"7582:2:17","nodeType":"YulIdentifier","src":"7582:2:17"},{"kind":"number","nativeSrc":"7586:2:17","nodeType":"YulLiteral","src":"7586:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7578:3:17","nodeType":"YulIdentifier","src":"7578:3:17"},"nativeSrc":"7578:11:17","nodeType":"YulFunctionCall","src":"7578:11:17"},{"name":"length","nativeSrc":"7591:6:17","nodeType":"YulIdentifier","src":"7591:6:17"}],"functionName":{"name":"calldatacopy","nativeSrc":"7549:12:17","nodeType":"YulIdentifier","src":"7549:12:17"},"nativeSrc":"7549:49:17","nodeType":"YulFunctionCall","src":"7549:49:17"},"nativeSrc":"7549:49:17","nodeType":"YulExpressionStatement","src":"7549:49:17"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nativeSrc":"7622:5:17","nodeType":"YulIdentifier","src":"7622:5:17"},{"name":"length","nativeSrc":"7629:6:17","nodeType":"YulIdentifier","src":"7629:6:17"}],"functionName":{"name":"add","nativeSrc":"7618:3:17","nodeType":"YulIdentifier","src":"7618:3:17"},"nativeSrc":"7618:18:17","nodeType":"YulFunctionCall","src":"7618:18:17"},{"kind":"number","nativeSrc":"7638:2:17","nodeType":"YulLiteral","src":"7638:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7614:3:17","nodeType":"YulIdentifier","src":"7614:3:17"},"nativeSrc":"7614:27:17","nodeType":"YulFunctionCall","src":"7614:27:17"},{"kind":"number","nativeSrc":"7643:1:17","nodeType":"YulLiteral","src":"7643:1:17","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"7607:6:17","nodeType":"YulIdentifier","src":"7607:6:17"},"nativeSrc":"7607:38:17","nodeType":"YulFunctionCall","src":"7607:38:17"},"nativeSrc":"7607:38:17","nodeType":"YulExpressionStatement","src":"7607:38:17"},{"nativeSrc":"7654:15:17","nodeType":"YulAssignment","src":"7654:15:17","value":{"name":"array","nativeSrc":"7664:5:17","nodeType":"YulIdentifier","src":"7664:5:17"},"variableNames":[{"name":"value1","nativeSrc":"7654:6:17","nodeType":"YulIdentifier","src":"7654:6:17"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr","nativeSrc":"6775:900:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6829:9:17","nodeType":"YulTypedName","src":"6829:9:17","type":""},{"name":"dataEnd","nativeSrc":"6840:7:17","nodeType":"YulTypedName","src":"6840:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"6852:6:17","nodeType":"YulTypedName","src":"6852:6:17","type":""},{"name":"value1","nativeSrc":"6860:6:17","nodeType":"YulTypedName","src":"6860:6:17","type":""}],"src":"6775:900:17"},{"body":{"nativeSrc":"7817:453:17","nodeType":"YulBlock","src":"7817:453:17","statements":[{"body":{"nativeSrc":"7863:16:17","nodeType":"YulBlock","src":"7863:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"7872:1:17","nodeType":"YulLiteral","src":"7872:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"7875:1:17","nodeType":"YulLiteral","src":"7875:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"7865:6:17","nodeType":"YulIdentifier","src":"7865:6:17"},"nativeSrc":"7865:12:17","nodeType":"YulFunctionCall","src":"7865:12:17"},"nativeSrc":"7865:12:17","nodeType":"YulExpressionStatement","src":"7865:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"7838:7:17","nodeType":"YulIdentifier","src":"7838:7:17"},{"name":"headStart","nativeSrc":"7847:9:17","nodeType":"YulIdentifier","src":"7847:9:17"}],"functionName":{"name":"sub","nativeSrc":"7834:3:17","nodeType":"YulIdentifier","src":"7834:3:17"},"nativeSrc":"7834:23:17","nodeType":"YulFunctionCall","src":"7834:23:17"},{"kind":"number","nativeSrc":"7859:2:17","nodeType":"YulLiteral","src":"7859:2:17","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"7830:3:17","nodeType":"YulIdentifier","src":"7830:3:17"},"nativeSrc":"7830:32:17","nodeType":"YulFunctionCall","src":"7830:32:17"},"nativeSrc":"7827:52:17","nodeType":"YulIf","src":"7827:52:17"},{"nativeSrc":"7888:37:17","nodeType":"YulVariableDeclaration","src":"7888:37:17","value":{"arguments":[{"name":"headStart","nativeSrc":"7915:9:17","nodeType":"YulIdentifier","src":"7915:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"7902:12:17","nodeType":"YulIdentifier","src":"7902:12:17"},"nativeSrc":"7902:23:17","nodeType":"YulFunctionCall","src":"7902:23:17"},"variables":[{"name":"offset","nativeSrc":"7892:6:17","nodeType":"YulTypedName","src":"7892:6:17","type":""}]},{"body":{"nativeSrc":"7968:16:17","nodeType":"YulBlock","src":"7968:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"7977:1:17","nodeType":"YulLiteral","src":"7977:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"7980:1:17","nodeType":"YulLiteral","src":"7980:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"7970:6:17","nodeType":"YulIdentifier","src":"7970:6:17"},"nativeSrc":"7970:12:17","nodeType":"YulFunctionCall","src":"7970:12:17"},"nativeSrc":"7970:12:17","nodeType":"YulExpressionStatement","src":"7970:12:17"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"7940:6:17","nodeType":"YulIdentifier","src":"7940:6:17"},{"kind":"number","nativeSrc":"7948:18:17","nodeType":"YulLiteral","src":"7948:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"7937:2:17","nodeType":"YulIdentifier","src":"7937:2:17"},"nativeSrc":"7937:30:17","nodeType":"YulFunctionCall","src":"7937:30:17"},"nativeSrc":"7934:50:17","nodeType":"YulIf","src":"7934:50:17"},{"nativeSrc":"7993:71:17","nodeType":"YulAssignment","src":"7993:71:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8036:9:17","nodeType":"YulIdentifier","src":"8036:9:17"},{"name":"offset","nativeSrc":"8047:6:17","nodeType":"YulIdentifier","src":"8047:6:17"}],"functionName":{"name":"add","nativeSrc":"8032:3:17","nodeType":"YulIdentifier","src":"8032:3:17"},"nativeSrc":"8032:22:17","nodeType":"YulFunctionCall","src":"8032:22:17"},{"name":"dataEnd","nativeSrc":"8056:7:17","nodeType":"YulIdentifier","src":"8056:7:17"}],"functionName":{"name":"abi_decode_array_address_dyn","nativeSrc":"8003:28:17","nodeType":"YulIdentifier","src":"8003:28:17"},"nativeSrc":"8003:61:17","nodeType":"YulFunctionCall","src":"8003:61:17"},"variableNames":[{"name":"value0","nativeSrc":"7993:6:17","nodeType":"YulIdentifier","src":"7993:6:17"}]},{"nativeSrc":"8073:48:17","nodeType":"YulVariableDeclaration","src":"8073:48:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8106:9:17","nodeType":"YulIdentifier","src":"8106:9:17"},{"kind":"number","nativeSrc":"8117:2:17","nodeType":"YulLiteral","src":"8117:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8102:3:17","nodeType":"YulIdentifier","src":"8102:3:17"},"nativeSrc":"8102:18:17","nodeType":"YulFunctionCall","src":"8102:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"8089:12:17","nodeType":"YulIdentifier","src":"8089:12:17"},"nativeSrc":"8089:32:17","nodeType":"YulFunctionCall","src":"8089:32:17"},"variables":[{"name":"offset_1","nativeSrc":"8077:8:17","nodeType":"YulTypedName","src":"8077:8:17","type":""}]},{"body":{"nativeSrc":"8166:16:17","nodeType":"YulBlock","src":"8166:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"8175:1:17","nodeType":"YulLiteral","src":"8175:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"8178:1:17","nodeType":"YulLiteral","src":"8178:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"8168:6:17","nodeType":"YulIdentifier","src":"8168:6:17"},"nativeSrc":"8168:12:17","nodeType":"YulFunctionCall","src":"8168:12:17"},"nativeSrc":"8168:12:17","nodeType":"YulExpressionStatement","src":"8168:12:17"}]},"condition":{"arguments":[{"name":"offset_1","nativeSrc":"8136:8:17","nodeType":"YulIdentifier","src":"8136:8:17"},{"kind":"number","nativeSrc":"8146:18:17","nodeType":"YulLiteral","src":"8146:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"8133:2:17","nodeType":"YulIdentifier","src":"8133:2:17"},"nativeSrc":"8133:32:17","nodeType":"YulFunctionCall","src":"8133:32:17"},"nativeSrc":"8130:52:17","nodeType":"YulIf","src":"8130:52:17"},{"nativeSrc":"8191:73:17","nodeType":"YulAssignment","src":"8191:73:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8234:9:17","nodeType":"YulIdentifier","src":"8234:9:17"},{"name":"offset_1","nativeSrc":"8245:8:17","nodeType":"YulIdentifier","src":"8245:8:17"}],"functionName":{"name":"add","nativeSrc":"8230:3:17","nodeType":"YulIdentifier","src":"8230:3:17"},"nativeSrc":"8230:24:17","nodeType":"YulFunctionCall","src":"8230:24:17"},{"name":"dataEnd","nativeSrc":"8256:7:17","nodeType":"YulIdentifier","src":"8256:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"8201:28:17","nodeType":"YulIdentifier","src":"8201:28:17"},"nativeSrc":"8201:63:17","nodeType":"YulFunctionCall","src":"8201:63:17"},"variableNames":[{"name":"value1","nativeSrc":"8191:6:17","nodeType":"YulIdentifier","src":"8191:6:17"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"7680:590:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"7775:9:17","nodeType":"YulTypedName","src":"7775:9:17","type":""},{"name":"dataEnd","nativeSrc":"7786:7:17","nodeType":"YulTypedName","src":"7786:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"7798:6:17","nodeType":"YulTypedName","src":"7798:6:17","type":""},{"name":"value1","nativeSrc":"7806:6:17","nodeType":"YulTypedName","src":"7806:6:17","type":""}],"src":"7680:590:17"},{"body":{"nativeSrc":"8420:476:17","nodeType":"YulBlock","src":"8420:476:17","statements":[{"nativeSrc":"8430:32:17","nodeType":"YulVariableDeclaration","src":"8430:32:17","value":{"arguments":[{"name":"headStart","nativeSrc":"8448:9:17","nodeType":"YulIdentifier","src":"8448:9:17"},{"kind":"number","nativeSrc":"8459:2:17","nodeType":"YulLiteral","src":"8459:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8444:3:17","nodeType":"YulIdentifier","src":"8444:3:17"},"nativeSrc":"8444:18:17","nodeType":"YulFunctionCall","src":"8444:18:17"},"variables":[{"name":"tail_1","nativeSrc":"8434:6:17","nodeType":"YulTypedName","src":"8434:6:17","type":""}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"8478:9:17","nodeType":"YulIdentifier","src":"8478:9:17"},{"kind":"number","nativeSrc":"8489:2:17","nodeType":"YulLiteral","src":"8489:2:17","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"8471:6:17","nodeType":"YulIdentifier","src":"8471:6:17"},"nativeSrc":"8471:21:17","nodeType":"YulFunctionCall","src":"8471:21:17"},"nativeSrc":"8471:21:17","nodeType":"YulExpressionStatement","src":"8471:21:17"},{"nativeSrc":"8501:17:17","nodeType":"YulVariableDeclaration","src":"8501:17:17","value":{"name":"tail_1","nativeSrc":"8512:6:17","nodeType":"YulIdentifier","src":"8512:6:17"},"variables":[{"name":"pos","nativeSrc":"8505:3:17","nodeType":"YulTypedName","src":"8505:3:17","type":""}]},{"nativeSrc":"8527:27:17","nodeType":"YulVariableDeclaration","src":"8527:27:17","value":{"arguments":[{"name":"value0","nativeSrc":"8547:6:17","nodeType":"YulIdentifier","src":"8547:6:17"}],"functionName":{"name":"mload","nativeSrc":"8541:5:17","nodeType":"YulIdentifier","src":"8541:5:17"},"nativeSrc":"8541:13:17","nodeType":"YulFunctionCall","src":"8541:13:17"},"variables":[{"name":"length","nativeSrc":"8531:6:17","nodeType":"YulTypedName","src":"8531:6:17","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nativeSrc":"8570:6:17","nodeType":"YulIdentifier","src":"8570:6:17"},{"name":"length","nativeSrc":"8578:6:17","nodeType":"YulIdentifier","src":"8578:6:17"}],"functionName":{"name":"mstore","nativeSrc":"8563:6:17","nodeType":"YulIdentifier","src":"8563:6:17"},"nativeSrc":"8563:22:17","nodeType":"YulFunctionCall","src":"8563:22:17"},"nativeSrc":"8563:22:17","nodeType":"YulExpressionStatement","src":"8563:22:17"},{"nativeSrc":"8594:25:17","nodeType":"YulAssignment","src":"8594:25:17","value":{"arguments":[{"name":"headStart","nativeSrc":"8605:9:17","nodeType":"YulIdentifier","src":"8605:9:17"},{"kind":"number","nativeSrc":"8616:2:17","nodeType":"YulLiteral","src":"8616:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"8601:3:17","nodeType":"YulIdentifier","src":"8601:3:17"},"nativeSrc":"8601:18:17","nodeType":"YulFunctionCall","src":"8601:18:17"},"variableNames":[{"name":"pos","nativeSrc":"8594:3:17","nodeType":"YulIdentifier","src":"8594:3:17"}]},{"nativeSrc":"8628:29:17","nodeType":"YulVariableDeclaration","src":"8628:29:17","value":{"arguments":[{"name":"value0","nativeSrc":"8646:6:17","nodeType":"YulIdentifier","src":"8646:6:17"},{"kind":"number","nativeSrc":"8654:2:17","nodeType":"YulLiteral","src":"8654:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8642:3:17","nodeType":"YulIdentifier","src":"8642:3:17"},"nativeSrc":"8642:15:17","nodeType":"YulFunctionCall","src":"8642:15:17"},"variables":[{"name":"srcPtr","nativeSrc":"8632:6:17","nodeType":"YulTypedName","src":"8632:6:17","type":""}]},{"nativeSrc":"8666:10:17","nodeType":"YulVariableDeclaration","src":"8666:10:17","value":{"kind":"number","nativeSrc":"8675:1:17","nodeType":"YulLiteral","src":"8675:1:17","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"8670:1:17","nodeType":"YulTypedName","src":"8670:1:17","type":""}]},{"body":{"nativeSrc":"8734:136:17","nodeType":"YulBlock","src":"8734:136:17","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"8755:3:17","nodeType":"YulIdentifier","src":"8755:3:17"},{"arguments":[{"arguments":[{"arguments":[{"name":"srcPtr","nativeSrc":"8780:6:17","nodeType":"YulIdentifier","src":"8780:6:17"}],"functionName":{"name":"mload","nativeSrc":"8774:5:17","nodeType":"YulIdentifier","src":"8774:5:17"},"nativeSrc":"8774:13:17","nodeType":"YulFunctionCall","src":"8774:13:17"}],"functionName":{"name":"iszero","nativeSrc":"8767:6:17","nodeType":"YulIdentifier","src":"8767:6:17"},"nativeSrc":"8767:21:17","nodeType":"YulFunctionCall","src":"8767:21:17"}],"functionName":{"name":"iszero","nativeSrc":"8760:6:17","nodeType":"YulIdentifier","src":"8760:6:17"},"nativeSrc":"8760:29:17","nodeType":"YulFunctionCall","src":"8760:29:17"}],"functionName":{"name":"mstore","nativeSrc":"8748:6:17","nodeType":"YulIdentifier","src":"8748:6:17"},"nativeSrc":"8748:42:17","nodeType":"YulFunctionCall","src":"8748:42:17"},"nativeSrc":"8748:42:17","nodeType":"YulExpressionStatement","src":"8748:42:17"},{"nativeSrc":"8803:19:17","nodeType":"YulAssignment","src":"8803:19:17","value":{"arguments":[{"name":"pos","nativeSrc":"8814:3:17","nodeType":"YulIdentifier","src":"8814:3:17"},{"kind":"number","nativeSrc":"8819:2:17","nodeType":"YulLiteral","src":"8819:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8810:3:17","nodeType":"YulIdentifier","src":"8810:3:17"},"nativeSrc":"8810:12:17","nodeType":"YulFunctionCall","src":"8810:12:17"},"variableNames":[{"name":"pos","nativeSrc":"8803:3:17","nodeType":"YulIdentifier","src":"8803:3:17"}]},{"nativeSrc":"8835:25:17","nodeType":"YulAssignment","src":"8835:25:17","value":{"arguments":[{"name":"srcPtr","nativeSrc":"8849:6:17","nodeType":"YulIdentifier","src":"8849:6:17"},{"kind":"number","nativeSrc":"8857:2:17","nodeType":"YulLiteral","src":"8857:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8845:3:17","nodeType":"YulIdentifier","src":"8845:3:17"},"nativeSrc":"8845:15:17","nodeType":"YulFunctionCall","src":"8845:15:17"},"variableNames":[{"name":"srcPtr","nativeSrc":"8835:6:17","nodeType":"YulIdentifier","src":"8835:6:17"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"8696:1:17","nodeType":"YulIdentifier","src":"8696:1:17"},{"name":"length","nativeSrc":"8699:6:17","nodeType":"YulIdentifier","src":"8699:6:17"}],"functionName":{"name":"lt","nativeSrc":"8693:2:17","nodeType":"YulIdentifier","src":"8693:2:17"},"nativeSrc":"8693:13:17","nodeType":"YulFunctionCall","src":"8693:13:17"},"nativeSrc":"8685:185:17","nodeType":"YulForLoop","post":{"nativeSrc":"8707:18:17","nodeType":"YulBlock","src":"8707:18:17","statements":[{"nativeSrc":"8709:14:17","nodeType":"YulAssignment","src":"8709:14:17","value":{"arguments":[{"name":"i","nativeSrc":"8718:1:17","nodeType":"YulIdentifier","src":"8718:1:17"},{"kind":"number","nativeSrc":"8721:1:17","nodeType":"YulLiteral","src":"8721:1:17","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"8714:3:17","nodeType":"YulIdentifier","src":"8714:3:17"},"nativeSrc":"8714:9:17","nodeType":"YulFunctionCall","src":"8714:9:17"},"variableNames":[{"name":"i","nativeSrc":"8709:1:17","nodeType":"YulIdentifier","src":"8709:1:17"}]}]},"pre":{"nativeSrc":"8689:3:17","nodeType":"YulBlock","src":"8689:3:17","statements":[]},"src":"8685:185:17"},{"nativeSrc":"8879:11:17","nodeType":"YulAssignment","src":"8879:11:17","value":{"name":"pos","nativeSrc":"8887:3:17","nodeType":"YulIdentifier","src":"8887:3:17"},"variableNames":[{"name":"tail","nativeSrc":"8879:4:17","nodeType":"YulIdentifier","src":"8879:4:17"}]}]},"name":"abi_encode_tuple_t_array$_t_bool_$dyn_memory_ptr__to_t_array$_t_bool_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"8275:621:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8389:9:17","nodeType":"YulTypedName","src":"8389:9:17","type":""},{"name":"value0","nativeSrc":"8400:6:17","nodeType":"YulTypedName","src":"8400:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8411:4:17","nodeType":"YulTypedName","src":"8411:4:17","type":""}],"src":"8275:621:17"},{"body":{"nativeSrc":"9002:76:17","nodeType":"YulBlock","src":"9002:76:17","statements":[{"nativeSrc":"9012:26:17","nodeType":"YulAssignment","src":"9012:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"9024:9:17","nodeType":"YulIdentifier","src":"9024:9:17"},{"kind":"number","nativeSrc":"9035:2:17","nodeType":"YulLiteral","src":"9035:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9020:3:17","nodeType":"YulIdentifier","src":"9020:3:17"},"nativeSrc":"9020:18:17","nodeType":"YulFunctionCall","src":"9020:18:17"},"variableNames":[{"name":"tail","nativeSrc":"9012:4:17","nodeType":"YulIdentifier","src":"9012:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"9054:9:17","nodeType":"YulIdentifier","src":"9054:9:17"},{"name":"value0","nativeSrc":"9065:6:17","nodeType":"YulIdentifier","src":"9065:6:17"}],"functionName":{"name":"mstore","nativeSrc":"9047:6:17","nodeType":"YulIdentifier","src":"9047:6:17"},"nativeSrc":"9047:25:17","nodeType":"YulFunctionCall","src":"9047:25:17"},"nativeSrc":"9047:25:17","nodeType":"YulExpressionStatement","src":"9047:25:17"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nativeSrc":"8901:177:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8971:9:17","nodeType":"YulTypedName","src":"8971:9:17","type":""},{"name":"value0","nativeSrc":"8982:6:17","nodeType":"YulTypedName","src":"8982:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8993:4:17","nodeType":"YulTypedName","src":"8993:4:17","type":""}],"src":"8901:177:17"},{"body":{"nativeSrc":"9184:76:17","nodeType":"YulBlock","src":"9184:76:17","statements":[{"nativeSrc":"9194:26:17","nodeType":"YulAssignment","src":"9194:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"9206:9:17","nodeType":"YulIdentifier","src":"9206:9:17"},{"kind":"number","nativeSrc":"9217:2:17","nodeType":"YulLiteral","src":"9217:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9202:3:17","nodeType":"YulIdentifier","src":"9202:3:17"},"nativeSrc":"9202:18:17","nodeType":"YulFunctionCall","src":"9202:18:17"},"variableNames":[{"name":"tail","nativeSrc":"9194:4:17","nodeType":"YulIdentifier","src":"9194:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"9236:9:17","nodeType":"YulIdentifier","src":"9236:9:17"},{"name":"value0","nativeSrc":"9247:6:17","nodeType":"YulIdentifier","src":"9247:6:17"}],"functionName":{"name":"mstore","nativeSrc":"9229:6:17","nodeType":"YulIdentifier","src":"9229:6:17"},"nativeSrc":"9229:25:17","nodeType":"YulFunctionCall","src":"9229:25:17"},"nativeSrc":"9229:25:17","nodeType":"YulExpressionStatement","src":"9229:25:17"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"9083:177:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9153:9:17","nodeType":"YulTypedName","src":"9153:9:17","type":""},{"name":"value0","nativeSrc":"9164:6:17","nodeType":"YulTypedName","src":"9164:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9175:4:17","nodeType":"YulTypedName","src":"9175:4:17","type":""}],"src":"9083:177:17"},{"body":{"nativeSrc":"9323:169:17","nodeType":"YulBlock","src":"9323:169:17","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"9340:3:17","nodeType":"YulIdentifier","src":"9340:3:17"},{"arguments":[{"name":"value","nativeSrc":"9351:5:17","nodeType":"YulIdentifier","src":"9351:5:17"}],"functionName":{"name":"mload","nativeSrc":"9345:5:17","nodeType":"YulIdentifier","src":"9345:5:17"},"nativeSrc":"9345:12:17","nodeType":"YulFunctionCall","src":"9345:12:17"}],"functionName":{"name":"mstore","nativeSrc":"9333:6:17","nodeType":"YulIdentifier","src":"9333:6:17"},"nativeSrc":"9333:25:17","nodeType":"YulFunctionCall","src":"9333:25:17"},"nativeSrc":"9333:25:17","nodeType":"YulExpressionStatement","src":"9333:25:17"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nativeSrc":"9378:3:17","nodeType":"YulIdentifier","src":"9378:3:17"},{"kind":"number","nativeSrc":"9383:4:17","nodeType":"YulLiteral","src":"9383:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9374:3:17","nodeType":"YulIdentifier","src":"9374:3:17"},"nativeSrc":"9374:14:17","nodeType":"YulFunctionCall","src":"9374:14:17"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"9400:5:17","nodeType":"YulIdentifier","src":"9400:5:17"},{"kind":"number","nativeSrc":"9407:4:17","nodeType":"YulLiteral","src":"9407:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9396:3:17","nodeType":"YulIdentifier","src":"9396:3:17"},"nativeSrc":"9396:16:17","nodeType":"YulFunctionCall","src":"9396:16:17"}],"functionName":{"name":"mload","nativeSrc":"9390:5:17","nodeType":"YulIdentifier","src":"9390:5:17"},"nativeSrc":"9390:23:17","nodeType":"YulFunctionCall","src":"9390:23:17"}],"functionName":{"name":"mstore","nativeSrc":"9367:6:17","nodeType":"YulIdentifier","src":"9367:6:17"},"nativeSrc":"9367:47:17","nodeType":"YulFunctionCall","src":"9367:47:17"},"nativeSrc":"9367:47:17","nodeType":"YulExpressionStatement","src":"9367:47:17"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nativeSrc":"9434:3:17","nodeType":"YulIdentifier","src":"9434:3:17"},{"kind":"number","nativeSrc":"9439:4:17","nodeType":"YulLiteral","src":"9439:4:17","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"9430:3:17","nodeType":"YulIdentifier","src":"9430:3:17"},"nativeSrc":"9430:14:17","nodeType":"YulFunctionCall","src":"9430:14:17"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"9470:5:17","nodeType":"YulIdentifier","src":"9470:5:17"},{"kind":"number","nativeSrc":"9477:4:17","nodeType":"YulLiteral","src":"9477:4:17","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"9466:3:17","nodeType":"YulIdentifier","src":"9466:3:17"},"nativeSrc":"9466:16:17","nodeType":"YulFunctionCall","src":"9466:16:17"}],"functionName":{"name":"mload","nativeSrc":"9460:5:17","nodeType":"YulIdentifier","src":"9460:5:17"},"nativeSrc":"9460:23:17","nodeType":"YulFunctionCall","src":"9460:23:17"}],"functionName":{"name":"iszero","nativeSrc":"9453:6:17","nodeType":"YulIdentifier","src":"9453:6:17"},"nativeSrc":"9453:31:17","nodeType":"YulFunctionCall","src":"9453:31:17"}],"functionName":{"name":"iszero","nativeSrc":"9446:6:17","nodeType":"YulIdentifier","src":"9446:6:17"},"nativeSrc":"9446:39:17","nodeType":"YulFunctionCall","src":"9446:39:17"}],"functionName":{"name":"mstore","nativeSrc":"9423:6:17","nodeType":"YulIdentifier","src":"9423:6:17"},"nativeSrc":"9423:63:17","nodeType":"YulFunctionCall","src":"9423:63:17"},"nativeSrc":"9423:63:17","nodeType":"YulExpressionStatement","src":"9423:63:17"}]},"name":"abi_encode_struct_ViewPermission","nativeSrc":"9265:227:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"9307:5:17","nodeType":"YulTypedName","src":"9307:5:17","type":""},{"name":"pos","nativeSrc":"9314:3:17","nodeType":"YulTypedName","src":"9314:3:17","type":""}],"src":"9265:227:17"},{"body":{"nativeSrc":"9662:102:17","nodeType":"YulBlock","src":"9662:102:17","statements":[{"nativeSrc":"9672:26:17","nodeType":"YulAssignment","src":"9672:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"9684:9:17","nodeType":"YulIdentifier","src":"9684:9:17"},{"kind":"number","nativeSrc":"9695:2:17","nodeType":"YulLiteral","src":"9695:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"9680:3:17","nodeType":"YulIdentifier","src":"9680:3:17"},"nativeSrc":"9680:18:17","nodeType":"YulFunctionCall","src":"9680:18:17"},"variableNames":[{"name":"tail","nativeSrc":"9672:4:17","nodeType":"YulIdentifier","src":"9672:4:17"}]},{"expression":{"arguments":[{"name":"value0","nativeSrc":"9740:6:17","nodeType":"YulIdentifier","src":"9740:6:17"},{"name":"headStart","nativeSrc":"9748:9:17","nodeType":"YulIdentifier","src":"9748:9:17"}],"functionName":{"name":"abi_encode_struct_ViewPermission","nativeSrc":"9707:32:17","nodeType":"YulIdentifier","src":"9707:32:17"},"nativeSrc":"9707:51:17","nodeType":"YulFunctionCall","src":"9707:51:17"},"nativeSrc":"9707:51:17","nodeType":"YulExpressionStatement","src":"9707:51:17"}]},"name":"abi_encode_tuple_t_struct$_ViewPermission_$3767_memory_ptr__to_t_struct$_ViewPermission_$3767_memory_ptr__fromStack_reversed","nativeSrc":"9497:267:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9631:9:17","nodeType":"YulTypedName","src":"9631:9:17","type":""},{"name":"value0","nativeSrc":"9642:6:17","nodeType":"YulTypedName","src":"9642:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9653:4:17","nodeType":"YulTypedName","src":"9653:4:17","type":""}],"src":"9497:267:17"},{"body":{"nativeSrc":"9923:571:17","nodeType":"YulBlock","src":"9923:571:17","statements":[{"body":{"nativeSrc":"9969:16:17","nodeType":"YulBlock","src":"9969:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"9978:1:17","nodeType":"YulLiteral","src":"9978:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"9981:1:17","nodeType":"YulLiteral","src":"9981:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"9971:6:17","nodeType":"YulIdentifier","src":"9971:6:17"},"nativeSrc":"9971:12:17","nodeType":"YulFunctionCall","src":"9971:12:17"},"nativeSrc":"9971:12:17","nodeType":"YulExpressionStatement","src":"9971:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"9944:7:17","nodeType":"YulIdentifier","src":"9944:7:17"},{"name":"headStart","nativeSrc":"9953:9:17","nodeType":"YulIdentifier","src":"9953:9:17"}],"functionName":{"name":"sub","nativeSrc":"9940:3:17","nodeType":"YulIdentifier","src":"9940:3:17"},"nativeSrc":"9940:23:17","nodeType":"YulFunctionCall","src":"9940:23:17"},{"kind":"number","nativeSrc":"9965:2:17","nodeType":"YulLiteral","src":"9965:2:17","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"9936:3:17","nodeType":"YulIdentifier","src":"9936:3:17"},"nativeSrc":"9936:32:17","nodeType":"YulFunctionCall","src":"9936:32:17"},"nativeSrc":"9933:52:17","nodeType":"YulIf","src":"9933:52:17"},{"nativeSrc":"9994:37:17","nodeType":"YulVariableDeclaration","src":"9994:37:17","value":{"arguments":[{"name":"headStart","nativeSrc":"10021:9:17","nodeType":"YulIdentifier","src":"10021:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"10008:12:17","nodeType":"YulIdentifier","src":"10008:12:17"},"nativeSrc":"10008:23:17","nodeType":"YulFunctionCall","src":"10008:23:17"},"variables":[{"name":"offset","nativeSrc":"9998:6:17","nodeType":"YulTypedName","src":"9998:6:17","type":""}]},{"body":{"nativeSrc":"10074:16:17","nodeType":"YulBlock","src":"10074:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"10083:1:17","nodeType":"YulLiteral","src":"10083:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"10086:1:17","nodeType":"YulLiteral","src":"10086:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"10076:6:17","nodeType":"YulIdentifier","src":"10076:6:17"},"nativeSrc":"10076:12:17","nodeType":"YulFunctionCall","src":"10076:12:17"},"nativeSrc":"10076:12:17","nodeType":"YulExpressionStatement","src":"10076:12:17"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"10046:6:17","nodeType":"YulIdentifier","src":"10046:6:17"},{"kind":"number","nativeSrc":"10054:18:17","nodeType":"YulLiteral","src":"10054:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10043:2:17","nodeType":"YulIdentifier","src":"10043:2:17"},"nativeSrc":"10043:30:17","nodeType":"YulFunctionCall","src":"10043:30:17"},"nativeSrc":"10040:50:17","nodeType":"YulIf","src":"10040:50:17"},{"nativeSrc":"10099:71:17","nodeType":"YulAssignment","src":"10099:71:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10142:9:17","nodeType":"YulIdentifier","src":"10142:9:17"},{"name":"offset","nativeSrc":"10153:6:17","nodeType":"YulIdentifier","src":"10153:6:17"}],"functionName":{"name":"add","nativeSrc":"10138:3:17","nodeType":"YulIdentifier","src":"10138:3:17"},"nativeSrc":"10138:22:17","nodeType":"YulFunctionCall","src":"10138:22:17"},{"name":"dataEnd","nativeSrc":"10162:7:17","nodeType":"YulIdentifier","src":"10162:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"10109:28:17","nodeType":"YulIdentifier","src":"10109:28:17"},"nativeSrc":"10109:61:17","nodeType":"YulFunctionCall","src":"10109:61:17"},"variableNames":[{"name":"value0","nativeSrc":"10099:6:17","nodeType":"YulIdentifier","src":"10099:6:17"}]},{"nativeSrc":"10179:45:17","nodeType":"YulVariableDeclaration","src":"10179:45:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10209:9:17","nodeType":"YulIdentifier","src":"10209:9:17"},{"kind":"number","nativeSrc":"10220:2:17","nodeType":"YulLiteral","src":"10220:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10205:3:17","nodeType":"YulIdentifier","src":"10205:3:17"},"nativeSrc":"10205:18:17","nodeType":"YulFunctionCall","src":"10205:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"10192:12:17","nodeType":"YulIdentifier","src":"10192:12:17"},"nativeSrc":"10192:32:17","nodeType":"YulFunctionCall","src":"10192:32:17"},"variables":[{"name":"value","nativeSrc":"10183:5:17","nodeType":"YulTypedName","src":"10183:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"10258:5:17","nodeType":"YulIdentifier","src":"10258:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"10233:24:17","nodeType":"YulIdentifier","src":"10233:24:17"},"nativeSrc":"10233:31:17","nodeType":"YulFunctionCall","src":"10233:31:17"},"nativeSrc":"10233:31:17","nodeType":"YulExpressionStatement","src":"10233:31:17"},{"nativeSrc":"10273:15:17","nodeType":"YulAssignment","src":"10273:15:17","value":{"name":"value","nativeSrc":"10283:5:17","nodeType":"YulIdentifier","src":"10283:5:17"},"variableNames":[{"name":"value1","nativeSrc":"10273:6:17","nodeType":"YulIdentifier","src":"10273:6:17"}]},{"nativeSrc":"10297:48:17","nodeType":"YulVariableDeclaration","src":"10297:48:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10330:9:17","nodeType":"YulIdentifier","src":"10330:9:17"},{"kind":"number","nativeSrc":"10341:2:17","nodeType":"YulLiteral","src":"10341:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"10326:3:17","nodeType":"YulIdentifier","src":"10326:3:17"},"nativeSrc":"10326:18:17","nodeType":"YulFunctionCall","src":"10326:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"10313:12:17","nodeType":"YulIdentifier","src":"10313:12:17"},"nativeSrc":"10313:32:17","nodeType":"YulFunctionCall","src":"10313:32:17"},"variables":[{"name":"offset_1","nativeSrc":"10301:8:17","nodeType":"YulTypedName","src":"10301:8:17","type":""}]},{"body":{"nativeSrc":"10390:16:17","nodeType":"YulBlock","src":"10390:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"10399:1:17","nodeType":"YulLiteral","src":"10399:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"10402:1:17","nodeType":"YulLiteral","src":"10402:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"10392:6:17","nodeType":"YulIdentifier","src":"10392:6:17"},"nativeSrc":"10392:12:17","nodeType":"YulFunctionCall","src":"10392:12:17"},"nativeSrc":"10392:12:17","nodeType":"YulExpressionStatement","src":"10392:12:17"}]},"condition":{"arguments":[{"name":"offset_1","nativeSrc":"10360:8:17","nodeType":"YulIdentifier","src":"10360:8:17"},{"kind":"number","nativeSrc":"10370:18:17","nodeType":"YulLiteral","src":"10370:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10357:2:17","nodeType":"YulIdentifier","src":"10357:2:17"},"nativeSrc":"10357:32:17","nodeType":"YulFunctionCall","src":"10357:32:17"},"nativeSrc":"10354:52:17","nodeType":"YulIf","src":"10354:52:17"},{"nativeSrc":"10415:73:17","nodeType":"YulAssignment","src":"10415:73:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10458:9:17","nodeType":"YulIdentifier","src":"10458:9:17"},{"name":"offset_1","nativeSrc":"10469:8:17","nodeType":"YulIdentifier","src":"10469:8:17"}],"functionName":{"name":"add","nativeSrc":"10454:3:17","nodeType":"YulIdentifier","src":"10454:3:17"},"nativeSrc":"10454:24:17","nodeType":"YulFunctionCall","src":"10454:24:17"},{"name":"dataEnd","nativeSrc":"10480:7:17","nodeType":"YulIdentifier","src":"10480:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"10425:28:17","nodeType":"YulIdentifier","src":"10425:28:17"},"nativeSrc":"10425:63:17","nodeType":"YulFunctionCall","src":"10425:63:17"},"variableNames":[{"name":"value2","nativeSrc":"10415:6:17","nodeType":"YulIdentifier","src":"10415:6:17"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_addresst_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"9769:725:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9873:9:17","nodeType":"YulTypedName","src":"9873:9:17","type":""},{"name":"dataEnd","nativeSrc":"9884:7:17","nodeType":"YulTypedName","src":"9884:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"9896:6:17","nodeType":"YulTypedName","src":"9896:6:17","type":""},{"name":"value1","nativeSrc":"9904:6:17","nodeType":"YulTypedName","src":"9904:6:17","type":""},{"name":"value2","nativeSrc":"9912:6:17","nodeType":"YulTypedName","src":"9912:6:17","type":""}],"src":"9769:725:17"},{"body":{"nativeSrc":"10628:474:17","nodeType":"YulBlock","src":"10628:474:17","statements":[{"body":{"nativeSrc":"10674:16:17","nodeType":"YulBlock","src":"10674:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"10683:1:17","nodeType":"YulLiteral","src":"10683:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"10686:1:17","nodeType":"YulLiteral","src":"10686:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"10676:6:17","nodeType":"YulIdentifier","src":"10676:6:17"},"nativeSrc":"10676:12:17","nodeType":"YulFunctionCall","src":"10676:12:17"},"nativeSrc":"10676:12:17","nodeType":"YulExpressionStatement","src":"10676:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"10649:7:17","nodeType":"YulIdentifier","src":"10649:7:17"},{"name":"headStart","nativeSrc":"10658:9:17","nodeType":"YulIdentifier","src":"10658:9:17"}],"functionName":{"name":"sub","nativeSrc":"10645:3:17","nodeType":"YulIdentifier","src":"10645:3:17"},"nativeSrc":"10645:23:17","nodeType":"YulFunctionCall","src":"10645:23:17"},{"kind":"number","nativeSrc":"10670:2:17","nodeType":"YulLiteral","src":"10670:2:17","type":"","value":"96"}],"functionName":{"name":"slt","nativeSrc":"10641:3:17","nodeType":"YulIdentifier","src":"10641:3:17"},"nativeSrc":"10641:32:17","nodeType":"YulFunctionCall","src":"10641:32:17"},"nativeSrc":"10638:52:17","nodeType":"YulIf","src":"10638:52:17"},{"nativeSrc":"10699:37:17","nodeType":"YulVariableDeclaration","src":"10699:37:17","value":{"arguments":[{"name":"headStart","nativeSrc":"10726:9:17","nodeType":"YulIdentifier","src":"10726:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"10713:12:17","nodeType":"YulIdentifier","src":"10713:12:17"},"nativeSrc":"10713:23:17","nodeType":"YulFunctionCall","src":"10713:23:17"},"variables":[{"name":"offset","nativeSrc":"10703:6:17","nodeType":"YulTypedName","src":"10703:6:17","type":""}]},{"body":{"nativeSrc":"10779:16:17","nodeType":"YulBlock","src":"10779:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"10788:1:17","nodeType":"YulLiteral","src":"10788:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"10791:1:17","nodeType":"YulLiteral","src":"10791:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"10781:6:17","nodeType":"YulIdentifier","src":"10781:6:17"},"nativeSrc":"10781:12:17","nodeType":"YulFunctionCall","src":"10781:12:17"},"nativeSrc":"10781:12:17","nodeType":"YulExpressionStatement","src":"10781:12:17"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"10751:6:17","nodeType":"YulIdentifier","src":"10751:6:17"},{"kind":"number","nativeSrc":"10759:18:17","nodeType":"YulLiteral","src":"10759:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"10748:2:17","nodeType":"YulIdentifier","src":"10748:2:17"},"nativeSrc":"10748:30:17","nodeType":"YulFunctionCall","src":"10748:30:17"},"nativeSrc":"10745:50:17","nodeType":"YulIf","src":"10745:50:17"},{"nativeSrc":"10804:71:17","nodeType":"YulAssignment","src":"10804:71:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10847:9:17","nodeType":"YulIdentifier","src":"10847:9:17"},{"name":"offset","nativeSrc":"10858:6:17","nodeType":"YulIdentifier","src":"10858:6:17"}],"functionName":{"name":"add","nativeSrc":"10843:3:17","nodeType":"YulIdentifier","src":"10843:3:17"},"nativeSrc":"10843:22:17","nodeType":"YulFunctionCall","src":"10843:22:17"},{"name":"dataEnd","nativeSrc":"10867:7:17","nodeType":"YulIdentifier","src":"10867:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"10814:28:17","nodeType":"YulIdentifier","src":"10814:28:17"},"nativeSrc":"10814:61:17","nodeType":"YulFunctionCall","src":"10814:61:17"},"variableNames":[{"name":"value0","nativeSrc":"10804:6:17","nodeType":"YulIdentifier","src":"10804:6:17"}]},{"nativeSrc":"10884:45:17","nodeType":"YulVariableDeclaration","src":"10884:45:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10914:9:17","nodeType":"YulIdentifier","src":"10914:9:17"},{"kind":"number","nativeSrc":"10925:2:17","nodeType":"YulLiteral","src":"10925:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10910:3:17","nodeType":"YulIdentifier","src":"10910:3:17"},"nativeSrc":"10910:18:17","nodeType":"YulFunctionCall","src":"10910:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"10897:12:17","nodeType":"YulIdentifier","src":"10897:12:17"},"nativeSrc":"10897:32:17","nodeType":"YulFunctionCall","src":"10897:32:17"},"variables":[{"name":"value","nativeSrc":"10888:5:17","nodeType":"YulTypedName","src":"10888:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"10963:5:17","nodeType":"YulIdentifier","src":"10963:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"10938:24:17","nodeType":"YulIdentifier","src":"10938:24:17"},"nativeSrc":"10938:31:17","nodeType":"YulFunctionCall","src":"10938:31:17"},"nativeSrc":"10938:31:17","nodeType":"YulExpressionStatement","src":"10938:31:17"},{"nativeSrc":"10978:15:17","nodeType":"YulAssignment","src":"10978:15:17","value":{"name":"value","nativeSrc":"10988:5:17","nodeType":"YulIdentifier","src":"10988:5:17"},"variableNames":[{"name":"value1","nativeSrc":"10978:6:17","nodeType":"YulIdentifier","src":"10978:6:17"}]},{"nativeSrc":"11002:16:17","nodeType":"YulVariableDeclaration","src":"11002:16:17","value":{"kind":"number","nativeSrc":"11017:1:17","nodeType":"YulLiteral","src":"11017:1:17","type":"","value":"0"},"variables":[{"name":"value_1","nativeSrc":"11006:7:17","nodeType":"YulTypedName","src":"11006:7:17","type":""}]},{"nativeSrc":"11027:43:17","nodeType":"YulAssignment","src":"11027:43:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11055:9:17","nodeType":"YulIdentifier","src":"11055:9:17"},{"kind":"number","nativeSrc":"11066:2:17","nodeType":"YulLiteral","src":"11066:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"11051:3:17","nodeType":"YulIdentifier","src":"11051:3:17"},"nativeSrc":"11051:18:17","nodeType":"YulFunctionCall","src":"11051:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"11038:12:17","nodeType":"YulIdentifier","src":"11038:12:17"},"nativeSrc":"11038:32:17","nodeType":"YulFunctionCall","src":"11038:32:17"},"variableNames":[{"name":"value_1","nativeSrc":"11027:7:17","nodeType":"YulIdentifier","src":"11027:7:17"}]},{"nativeSrc":"11079:17:17","nodeType":"YulAssignment","src":"11079:17:17","value":{"name":"value_1","nativeSrc":"11089:7:17","nodeType":"YulIdentifier","src":"11089:7:17"},"variableNames":[{"name":"value2","nativeSrc":"11079:6:17","nodeType":"YulIdentifier","src":"11079:6:17"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_addresst_uint256","nativeSrc":"10499:603:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10578:9:17","nodeType":"YulTypedName","src":"10578:9:17","type":""},{"name":"dataEnd","nativeSrc":"10589:7:17","nodeType":"YulTypedName","src":"10589:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"10601:6:17","nodeType":"YulTypedName","src":"10601:6:17","type":""},{"name":"value1","nativeSrc":"10609:6:17","nodeType":"YulTypedName","src":"10609:6:17","type":""},{"name":"value2","nativeSrc":"10617:6:17","nodeType":"YulTypedName","src":"10617:6:17","type":""}],"src":"10499:603:17"},{"body":{"nativeSrc":"11173:184:17","nodeType":"YulBlock","src":"11173:184:17","statements":[{"nativeSrc":"11183:10:17","nodeType":"YulVariableDeclaration","src":"11183:10:17","value":{"kind":"number","nativeSrc":"11192:1:17","nodeType":"YulLiteral","src":"11192:1:17","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"11187:1:17","nodeType":"YulTypedName","src":"11187:1:17","type":""}]},{"body":{"nativeSrc":"11252:63:17","nodeType":"YulBlock","src":"11252:63:17","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"11277:3:17","nodeType":"YulIdentifier","src":"11277:3:17"},{"name":"i","nativeSrc":"11282:1:17","nodeType":"YulIdentifier","src":"11282:1:17"}],"functionName":{"name":"add","nativeSrc":"11273:3:17","nodeType":"YulIdentifier","src":"11273:3:17"},"nativeSrc":"11273:11:17","nodeType":"YulFunctionCall","src":"11273:11:17"},{"arguments":[{"arguments":[{"name":"src","nativeSrc":"11296:3:17","nodeType":"YulIdentifier","src":"11296:3:17"},{"name":"i","nativeSrc":"11301:1:17","nodeType":"YulIdentifier","src":"11301:1:17"}],"functionName":{"name":"add","nativeSrc":"11292:3:17","nodeType":"YulIdentifier","src":"11292:3:17"},"nativeSrc":"11292:11:17","nodeType":"YulFunctionCall","src":"11292:11:17"}],"functionName":{"name":"mload","nativeSrc":"11286:5:17","nodeType":"YulIdentifier","src":"11286:5:17"},"nativeSrc":"11286:18:17","nodeType":"YulFunctionCall","src":"11286:18:17"}],"functionName":{"name":"mstore","nativeSrc":"11266:6:17","nodeType":"YulIdentifier","src":"11266:6:17"},"nativeSrc":"11266:39:17","nodeType":"YulFunctionCall","src":"11266:39:17"},"nativeSrc":"11266:39:17","nodeType":"YulExpressionStatement","src":"11266:39:17"}]},"condition":{"arguments":[{"name":"i","nativeSrc":"11213:1:17","nodeType":"YulIdentifier","src":"11213:1:17"},{"name":"length","nativeSrc":"11216:6:17","nodeType":"YulIdentifier","src":"11216:6:17"}],"functionName":{"name":"lt","nativeSrc":"11210:2:17","nodeType":"YulIdentifier","src":"11210:2:17"},"nativeSrc":"11210:13:17","nodeType":"YulFunctionCall","src":"11210:13:17"},"nativeSrc":"11202:113:17","nodeType":"YulForLoop","post":{"nativeSrc":"11224:19:17","nodeType":"YulBlock","src":"11224:19:17","statements":[{"nativeSrc":"11226:15:17","nodeType":"YulAssignment","src":"11226:15:17","value":{"arguments":[{"name":"i","nativeSrc":"11235:1:17","nodeType":"YulIdentifier","src":"11235:1:17"},{"kind":"number","nativeSrc":"11238:2:17","nodeType":"YulLiteral","src":"11238:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"11231:3:17","nodeType":"YulIdentifier","src":"11231:3:17"},"nativeSrc":"11231:10:17","nodeType":"YulFunctionCall","src":"11231:10:17"},"variableNames":[{"name":"i","nativeSrc":"11226:1:17","nodeType":"YulIdentifier","src":"11226:1:17"}]}]},"pre":{"nativeSrc":"11206:3:17","nodeType":"YulBlock","src":"11206:3:17","statements":[]},"src":"11202:113:17"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nativeSrc":"11335:3:17","nodeType":"YulIdentifier","src":"11335:3:17"},{"name":"length","nativeSrc":"11340:6:17","nodeType":"YulIdentifier","src":"11340:6:17"}],"functionName":{"name":"add","nativeSrc":"11331:3:17","nodeType":"YulIdentifier","src":"11331:3:17"},"nativeSrc":"11331:16:17","nodeType":"YulFunctionCall","src":"11331:16:17"},{"kind":"number","nativeSrc":"11349:1:17","nodeType":"YulLiteral","src":"11349:1:17","type":"","value":"0"}],"functionName":{"name":"mstore","nativeSrc":"11324:6:17","nodeType":"YulIdentifier","src":"11324:6:17"},"nativeSrc":"11324:27:17","nodeType":"YulFunctionCall","src":"11324:27:17"},"nativeSrc":"11324:27:17","nodeType":"YulExpressionStatement","src":"11324:27:17"}]},"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"11107:250:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nativeSrc":"11151:3:17","nodeType":"YulTypedName","src":"11151:3:17","type":""},{"name":"dst","nativeSrc":"11156:3:17","nodeType":"YulTypedName","src":"11156:3:17","type":""},{"name":"length","nativeSrc":"11161:6:17","nodeType":"YulTypedName","src":"11161:6:17","type":""}],"src":"11107:250:17"},{"body":{"nativeSrc":"11483:275:17","nodeType":"YulBlock","src":"11483:275:17","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"11500:9:17","nodeType":"YulIdentifier","src":"11500:9:17"},{"kind":"number","nativeSrc":"11511:2:17","nodeType":"YulLiteral","src":"11511:2:17","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"11493:6:17","nodeType":"YulIdentifier","src":"11493:6:17"},"nativeSrc":"11493:21:17","nodeType":"YulFunctionCall","src":"11493:21:17"},"nativeSrc":"11493:21:17","nodeType":"YulExpressionStatement","src":"11493:21:17"},{"nativeSrc":"11523:27:17","nodeType":"YulVariableDeclaration","src":"11523:27:17","value":{"arguments":[{"name":"value0","nativeSrc":"11543:6:17","nodeType":"YulIdentifier","src":"11543:6:17"}],"functionName":{"name":"mload","nativeSrc":"11537:5:17","nodeType":"YulIdentifier","src":"11537:5:17"},"nativeSrc":"11537:13:17","nodeType":"YulFunctionCall","src":"11537:13:17"},"variables":[{"name":"length","nativeSrc":"11527:6:17","nodeType":"YulTypedName","src":"11527:6:17","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11570:9:17","nodeType":"YulIdentifier","src":"11570:9:17"},{"kind":"number","nativeSrc":"11581:2:17","nodeType":"YulLiteral","src":"11581:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"11566:3:17","nodeType":"YulIdentifier","src":"11566:3:17"},"nativeSrc":"11566:18:17","nodeType":"YulFunctionCall","src":"11566:18:17"},{"name":"length","nativeSrc":"11586:6:17","nodeType":"YulIdentifier","src":"11586:6:17"}],"functionName":{"name":"mstore","nativeSrc":"11559:6:17","nodeType":"YulIdentifier","src":"11559:6:17"},"nativeSrc":"11559:34:17","nodeType":"YulFunctionCall","src":"11559:34:17"},"nativeSrc":"11559:34:17","nodeType":"YulExpressionStatement","src":"11559:34:17"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"11641:6:17","nodeType":"YulIdentifier","src":"11641:6:17"},{"kind":"number","nativeSrc":"11649:2:17","nodeType":"YulLiteral","src":"11649:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"11637:3:17","nodeType":"YulIdentifier","src":"11637:3:17"},"nativeSrc":"11637:15:17","nodeType":"YulFunctionCall","src":"11637:15:17"},{"arguments":[{"name":"headStart","nativeSrc":"11658:9:17","nodeType":"YulIdentifier","src":"11658:9:17"},{"kind":"number","nativeSrc":"11669:2:17","nodeType":"YulLiteral","src":"11669:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"11654:3:17","nodeType":"YulIdentifier","src":"11654:3:17"},"nativeSrc":"11654:18:17","nodeType":"YulFunctionCall","src":"11654:18:17"},{"name":"length","nativeSrc":"11674:6:17","nodeType":"YulIdentifier","src":"11674:6:17"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"11602:34:17","nodeType":"YulIdentifier","src":"11602:34:17"},"nativeSrc":"11602:79:17","nodeType":"YulFunctionCall","src":"11602:79:17"},"nativeSrc":"11602:79:17","nodeType":"YulExpressionStatement","src":"11602:79:17"},{"nativeSrc":"11690:62:17","nodeType":"YulAssignment","src":"11690:62:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"11706:9:17","nodeType":"YulIdentifier","src":"11706:9:17"},{"arguments":[{"arguments":[{"name":"length","nativeSrc":"11725:6:17","nodeType":"YulIdentifier","src":"11725:6:17"},{"kind":"number","nativeSrc":"11733:2:17","nodeType":"YulLiteral","src":"11733:2:17","type":"","value":"31"}],"functionName":{"name":"add","nativeSrc":"11721:3:17","nodeType":"YulIdentifier","src":"11721:3:17"},"nativeSrc":"11721:15:17","nodeType":"YulFunctionCall","src":"11721:15:17"},{"arguments":[{"kind":"number","nativeSrc":"11742:2:17","nodeType":"YulLiteral","src":"11742:2:17","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"11738:3:17","nodeType":"YulIdentifier","src":"11738:3:17"},"nativeSrc":"11738:7:17","nodeType":"YulFunctionCall","src":"11738:7:17"}],"functionName":{"name":"and","nativeSrc":"11717:3:17","nodeType":"YulIdentifier","src":"11717:3:17"},"nativeSrc":"11717:29:17","nodeType":"YulFunctionCall","src":"11717:29:17"}],"functionName":{"name":"add","nativeSrc":"11702:3:17","nodeType":"YulIdentifier","src":"11702:3:17"},"nativeSrc":"11702:45:17","nodeType":"YulFunctionCall","src":"11702:45:17"},{"kind":"number","nativeSrc":"11749:2:17","nodeType":"YulLiteral","src":"11749:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"11698:3:17","nodeType":"YulIdentifier","src":"11698:3:17"},"nativeSrc":"11698:54:17","nodeType":"YulFunctionCall","src":"11698:54:17"},"variableNames":[{"name":"tail","nativeSrc":"11690:4:17","nodeType":"YulIdentifier","src":"11690:4:17"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"11362:396:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11452:9:17","nodeType":"YulTypedName","src":"11452:9:17","type":""},{"name":"value0","nativeSrc":"11463:6:17","nodeType":"YulTypedName","src":"11463:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"11474:4:17","nodeType":"YulTypedName","src":"11474:4:17","type":""}],"src":"11362:396:17"},{"body":{"nativeSrc":"11898:588:17","nodeType":"YulBlock","src":"11898:588:17","statements":[{"body":{"nativeSrc":"11945:16:17","nodeType":"YulBlock","src":"11945:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"11954:1:17","nodeType":"YulLiteral","src":"11954:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"11957:1:17","nodeType":"YulLiteral","src":"11957:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"11947:6:17","nodeType":"YulIdentifier","src":"11947:6:17"},"nativeSrc":"11947:12:17","nodeType":"YulFunctionCall","src":"11947:12:17"},"nativeSrc":"11947:12:17","nodeType":"YulExpressionStatement","src":"11947:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"11919:7:17","nodeType":"YulIdentifier","src":"11919:7:17"},{"name":"headStart","nativeSrc":"11928:9:17","nodeType":"YulIdentifier","src":"11928:9:17"}],"functionName":{"name":"sub","nativeSrc":"11915:3:17","nodeType":"YulIdentifier","src":"11915:3:17"},"nativeSrc":"11915:23:17","nodeType":"YulFunctionCall","src":"11915:23:17"},{"kind":"number","nativeSrc":"11940:3:17","nodeType":"YulLiteral","src":"11940:3:17","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"11911:3:17","nodeType":"YulIdentifier","src":"11911:3:17"},"nativeSrc":"11911:33:17","nodeType":"YulFunctionCall","src":"11911:33:17"},"nativeSrc":"11908:53:17","nodeType":"YulIf","src":"11908:53:17"},{"nativeSrc":"11970:14:17","nodeType":"YulVariableDeclaration","src":"11970:14:17","value":{"kind":"number","nativeSrc":"11983:1:17","nodeType":"YulLiteral","src":"11983:1:17","type":"","value":"0"},"variables":[{"name":"value","nativeSrc":"11974:5:17","nodeType":"YulTypedName","src":"11974:5:17","type":""}]},{"nativeSrc":"11993:32:17","nodeType":"YulAssignment","src":"11993:32:17","value":{"arguments":[{"name":"headStart","nativeSrc":"12015:9:17","nodeType":"YulIdentifier","src":"12015:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"12002:12:17","nodeType":"YulIdentifier","src":"12002:12:17"},"nativeSrc":"12002:23:17","nodeType":"YulFunctionCall","src":"12002:23:17"},"variableNames":[{"name":"value","nativeSrc":"11993:5:17","nodeType":"YulIdentifier","src":"11993:5:17"}]},{"nativeSrc":"12034:15:17","nodeType":"YulAssignment","src":"12034:15:17","value":{"name":"value","nativeSrc":"12044:5:17","nodeType":"YulIdentifier","src":"12044:5:17"},"variableNames":[{"name":"value0","nativeSrc":"12034:6:17","nodeType":"YulIdentifier","src":"12034:6:17"}]},{"nativeSrc":"12058:16:17","nodeType":"YulVariableDeclaration","src":"12058:16:17","value":{"kind":"number","nativeSrc":"12073:1:17","nodeType":"YulLiteral","src":"12073:1:17","type":"","value":"0"},"variables":[{"name":"value_1","nativeSrc":"12062:7:17","nodeType":"YulTypedName","src":"12062:7:17","type":""}]},{"nativeSrc":"12083:43:17","nodeType":"YulAssignment","src":"12083:43:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12111:9:17","nodeType":"YulIdentifier","src":"12111:9:17"},{"kind":"number","nativeSrc":"12122:2:17","nodeType":"YulLiteral","src":"12122:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12107:3:17","nodeType":"YulIdentifier","src":"12107:3:17"},"nativeSrc":"12107:18:17","nodeType":"YulFunctionCall","src":"12107:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"12094:12:17","nodeType":"YulIdentifier","src":"12094:12:17"},"nativeSrc":"12094:32:17","nodeType":"YulFunctionCall","src":"12094:32:17"},"variableNames":[{"name":"value_1","nativeSrc":"12083:7:17","nodeType":"YulIdentifier","src":"12083:7:17"}]},{"nativeSrc":"12135:17:17","nodeType":"YulAssignment","src":"12135:17:17","value":{"name":"value_1","nativeSrc":"12145:7:17","nodeType":"YulIdentifier","src":"12145:7:17"},"variableNames":[{"name":"value1","nativeSrc":"12135:6:17","nodeType":"YulIdentifier","src":"12135:6:17"}]},{"nativeSrc":"12161:16:17","nodeType":"YulVariableDeclaration","src":"12161:16:17","value":{"kind":"number","nativeSrc":"12176:1:17","nodeType":"YulLiteral","src":"12176:1:17","type":"","value":"0"},"variables":[{"name":"value_2","nativeSrc":"12165:7:17","nodeType":"YulTypedName","src":"12165:7:17","type":""}]},{"nativeSrc":"12186:43:17","nodeType":"YulAssignment","src":"12186:43:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12214:9:17","nodeType":"YulIdentifier","src":"12214:9:17"},{"kind":"number","nativeSrc":"12225:2:17","nodeType":"YulLiteral","src":"12225:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"12210:3:17","nodeType":"YulIdentifier","src":"12210:3:17"},"nativeSrc":"12210:18:17","nodeType":"YulFunctionCall","src":"12210:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"12197:12:17","nodeType":"YulIdentifier","src":"12197:12:17"},"nativeSrc":"12197:32:17","nodeType":"YulFunctionCall","src":"12197:32:17"},"variableNames":[{"name":"value_2","nativeSrc":"12186:7:17","nodeType":"YulIdentifier","src":"12186:7:17"}]},{"nativeSrc":"12238:17:17","nodeType":"YulAssignment","src":"12238:17:17","value":{"name":"value_2","nativeSrc":"12248:7:17","nodeType":"YulIdentifier","src":"12248:7:17"},"variableNames":[{"name":"value2","nativeSrc":"12238:6:17","nodeType":"YulIdentifier","src":"12238:6:17"}]},{"nativeSrc":"12264:16:17","nodeType":"YulVariableDeclaration","src":"12264:16:17","value":{"kind":"number","nativeSrc":"12279:1:17","nodeType":"YulLiteral","src":"12279:1:17","type":"","value":"0"},"variables":[{"name":"value_3","nativeSrc":"12268:7:17","nodeType":"YulTypedName","src":"12268:7:17","type":""}]},{"nativeSrc":"12289:43:17","nodeType":"YulAssignment","src":"12289:43:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12317:9:17","nodeType":"YulIdentifier","src":"12317:9:17"},{"kind":"number","nativeSrc":"12328:2:17","nodeType":"YulLiteral","src":"12328:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"12313:3:17","nodeType":"YulIdentifier","src":"12313:3:17"},"nativeSrc":"12313:18:17","nodeType":"YulFunctionCall","src":"12313:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"12300:12:17","nodeType":"YulIdentifier","src":"12300:12:17"},"nativeSrc":"12300:32:17","nodeType":"YulFunctionCall","src":"12300:32:17"},"variableNames":[{"name":"value_3","nativeSrc":"12289:7:17","nodeType":"YulIdentifier","src":"12289:7:17"}]},{"nativeSrc":"12341:17:17","nodeType":"YulAssignment","src":"12341:17:17","value":{"name":"value_3","nativeSrc":"12351:7:17","nodeType":"YulIdentifier","src":"12351:7:17"},"variableNames":[{"name":"value3","nativeSrc":"12341:6:17","nodeType":"YulIdentifier","src":"12341:6:17"}]},{"nativeSrc":"12367:48:17","nodeType":"YulVariableDeclaration","src":"12367:48:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12399:9:17","nodeType":"YulIdentifier","src":"12399:9:17"},{"kind":"number","nativeSrc":"12410:3:17","nodeType":"YulLiteral","src":"12410:3:17","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"12395:3:17","nodeType":"YulIdentifier","src":"12395:3:17"},"nativeSrc":"12395:19:17","nodeType":"YulFunctionCall","src":"12395:19:17"}],"functionName":{"name":"calldataload","nativeSrc":"12382:12:17","nodeType":"YulIdentifier","src":"12382:12:17"},"nativeSrc":"12382:33:17","nodeType":"YulFunctionCall","src":"12382:33:17"},"variables":[{"name":"value_4","nativeSrc":"12371:7:17","nodeType":"YulTypedName","src":"12371:7:17","type":""}]},{"expression":{"arguments":[{"name":"value_4","nativeSrc":"12446:7:17","nodeType":"YulIdentifier","src":"12446:7:17"}],"functionName":{"name":"validator_revert_bool","nativeSrc":"12424:21:17","nodeType":"YulIdentifier","src":"12424:21:17"},"nativeSrc":"12424:30:17","nodeType":"YulFunctionCall","src":"12424:30:17"},"nativeSrc":"12424:30:17","nodeType":"YulExpressionStatement","src":"12424:30:17"},{"nativeSrc":"12463:17:17","nodeType":"YulAssignment","src":"12463:17:17","value":{"name":"value_4","nativeSrc":"12473:7:17","nodeType":"YulIdentifier","src":"12473:7:17"},"variableNames":[{"name":"value4","nativeSrc":"12463:6:17","nodeType":"YulIdentifier","src":"12463:6:17"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_bool","nativeSrc":"11763:723:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"11832:9:17","nodeType":"YulTypedName","src":"11832:9:17","type":""},{"name":"dataEnd","nativeSrc":"11843:7:17","nodeType":"YulTypedName","src":"11843:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"11855:6:17","nodeType":"YulTypedName","src":"11855:6:17","type":""},{"name":"value1","nativeSrc":"11863:6:17","nodeType":"YulTypedName","src":"11863:6:17","type":""},{"name":"value2","nativeSrc":"11871:6:17","nodeType":"YulTypedName","src":"11871:6:17","type":""},{"name":"value3","nativeSrc":"11879:6:17","nodeType":"YulTypedName","src":"11879:6:17","type":""},{"name":"value4","nativeSrc":"11887:6:17","nodeType":"YulTypedName","src":"11887:6:17","type":""}],"src":"11763:723:17"},{"body":{"nativeSrc":"12603:371:17","nodeType":"YulBlock","src":"12603:371:17","statements":[{"body":{"nativeSrc":"12649:16:17","nodeType":"YulBlock","src":"12649:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12658:1:17","nodeType":"YulLiteral","src":"12658:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"12661:1:17","nodeType":"YulLiteral","src":"12661:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"12651:6:17","nodeType":"YulIdentifier","src":"12651:6:17"},"nativeSrc":"12651:12:17","nodeType":"YulFunctionCall","src":"12651:12:17"},"nativeSrc":"12651:12:17","nodeType":"YulExpressionStatement","src":"12651:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"12624:7:17","nodeType":"YulIdentifier","src":"12624:7:17"},{"name":"headStart","nativeSrc":"12633:9:17","nodeType":"YulIdentifier","src":"12633:9:17"}],"functionName":{"name":"sub","nativeSrc":"12620:3:17","nodeType":"YulIdentifier","src":"12620:3:17"},"nativeSrc":"12620:23:17","nodeType":"YulFunctionCall","src":"12620:23:17"},{"kind":"number","nativeSrc":"12645:2:17","nodeType":"YulLiteral","src":"12645:2:17","type":"","value":"64"}],"functionName":{"name":"slt","nativeSrc":"12616:3:17","nodeType":"YulIdentifier","src":"12616:3:17"},"nativeSrc":"12616:32:17","nodeType":"YulFunctionCall","src":"12616:32:17"},"nativeSrc":"12613:52:17","nodeType":"YulIf","src":"12613:52:17"},{"nativeSrc":"12674:36:17","nodeType":"YulVariableDeclaration","src":"12674:36:17","value":{"arguments":[{"name":"headStart","nativeSrc":"12700:9:17","nodeType":"YulIdentifier","src":"12700:9:17"}],"functionName":{"name":"calldataload","nativeSrc":"12687:12:17","nodeType":"YulIdentifier","src":"12687:12:17"},"nativeSrc":"12687:23:17","nodeType":"YulFunctionCall","src":"12687:23:17"},"variables":[{"name":"value","nativeSrc":"12678:5:17","nodeType":"YulTypedName","src":"12678:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"12744:5:17","nodeType":"YulIdentifier","src":"12744:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"12719:24:17","nodeType":"YulIdentifier","src":"12719:24:17"},"nativeSrc":"12719:31:17","nodeType":"YulFunctionCall","src":"12719:31:17"},"nativeSrc":"12719:31:17","nodeType":"YulExpressionStatement","src":"12719:31:17"},{"nativeSrc":"12759:15:17","nodeType":"YulAssignment","src":"12759:15:17","value":{"name":"value","nativeSrc":"12769:5:17","nodeType":"YulIdentifier","src":"12769:5:17"},"variableNames":[{"name":"value0","nativeSrc":"12759:6:17","nodeType":"YulIdentifier","src":"12759:6:17"}]},{"nativeSrc":"12783:46:17","nodeType":"YulVariableDeclaration","src":"12783:46:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12814:9:17","nodeType":"YulIdentifier","src":"12814:9:17"},{"kind":"number","nativeSrc":"12825:2:17","nodeType":"YulLiteral","src":"12825:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"12810:3:17","nodeType":"YulIdentifier","src":"12810:3:17"},"nativeSrc":"12810:18:17","nodeType":"YulFunctionCall","src":"12810:18:17"}],"functionName":{"name":"calldataload","nativeSrc":"12797:12:17","nodeType":"YulIdentifier","src":"12797:12:17"},"nativeSrc":"12797:32:17","nodeType":"YulFunctionCall","src":"12797:32:17"},"variables":[{"name":"offset","nativeSrc":"12787:6:17","nodeType":"YulTypedName","src":"12787:6:17","type":""}]},{"body":{"nativeSrc":"12872:16:17","nodeType":"YulBlock","src":"12872:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"12881:1:17","nodeType":"YulLiteral","src":"12881:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"12884:1:17","nodeType":"YulLiteral","src":"12884:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"12874:6:17","nodeType":"YulIdentifier","src":"12874:6:17"},"nativeSrc":"12874:12:17","nodeType":"YulFunctionCall","src":"12874:12:17"},"nativeSrc":"12874:12:17","nodeType":"YulExpressionStatement","src":"12874:12:17"}]},"condition":{"arguments":[{"name":"offset","nativeSrc":"12844:6:17","nodeType":"YulIdentifier","src":"12844:6:17"},{"kind":"number","nativeSrc":"12852:18:17","nodeType":"YulLiteral","src":"12852:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nativeSrc":"12841:2:17","nodeType":"YulIdentifier","src":"12841:2:17"},"nativeSrc":"12841:30:17","nodeType":"YulFunctionCall","src":"12841:30:17"},"nativeSrc":"12838:50:17","nodeType":"YulIf","src":"12838:50:17"},{"nativeSrc":"12897:71:17","nodeType":"YulAssignment","src":"12897:71:17","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"12940:9:17","nodeType":"YulIdentifier","src":"12940:9:17"},{"name":"offset","nativeSrc":"12951:6:17","nodeType":"YulIdentifier","src":"12951:6:17"}],"functionName":{"name":"add","nativeSrc":"12936:3:17","nodeType":"YulIdentifier","src":"12936:3:17"},"nativeSrc":"12936:22:17","nodeType":"YulFunctionCall","src":"12936:22:17"},{"name":"dataEnd","nativeSrc":"12960:7:17","nodeType":"YulIdentifier","src":"12960:7:17"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nativeSrc":"12907:28:17","nodeType":"YulIdentifier","src":"12907:28:17"},"nativeSrc":"12907:61:17","nodeType":"YulFunctionCall","src":"12907:61:17"},"variableNames":[{"name":"value1","nativeSrc":"12897:6:17","nodeType":"YulIdentifier","src":"12897:6:17"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_uint256_$dyn_memory_ptr","nativeSrc":"12491:483:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"12561:9:17","nodeType":"YulTypedName","src":"12561:9:17","type":""},{"name":"dataEnd","nativeSrc":"12572:7:17","nodeType":"YulTypedName","src":"12572:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"12584:6:17","nodeType":"YulTypedName","src":"12584:6:17","type":""},{"name":"value1","nativeSrc":"12592:6:17","nodeType":"YulTypedName","src":"12592:6:17","type":""}],"src":"12491:483:17"},{"body":{"nativeSrc":"13194:488:17","nodeType":"YulBlock","src":"13194:488:17","statements":[{"nativeSrc":"13204:32:17","nodeType":"YulVariableDeclaration","src":"13204:32:17","value":{"arguments":[{"name":"headStart","nativeSrc":"13222:9:17","nodeType":"YulIdentifier","src":"13222:9:17"},{"kind":"number","nativeSrc":"13233:2:17","nodeType":"YulLiteral","src":"13233:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"13218:3:17","nodeType":"YulIdentifier","src":"13218:3:17"},"nativeSrc":"13218:18:17","nodeType":"YulFunctionCall","src":"13218:18:17"},"variables":[{"name":"tail_1","nativeSrc":"13208:6:17","nodeType":"YulTypedName","src":"13208:6:17","type":""}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"13252:9:17","nodeType":"YulIdentifier","src":"13252:9:17"},{"kind":"number","nativeSrc":"13263:2:17","nodeType":"YulLiteral","src":"13263:2:17","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"13245:6:17","nodeType":"YulIdentifier","src":"13245:6:17"},"nativeSrc":"13245:21:17","nodeType":"YulFunctionCall","src":"13245:21:17"},"nativeSrc":"13245:21:17","nodeType":"YulExpressionStatement","src":"13245:21:17"},{"nativeSrc":"13275:17:17","nodeType":"YulVariableDeclaration","src":"13275:17:17","value":{"name":"tail_1","nativeSrc":"13286:6:17","nodeType":"YulIdentifier","src":"13286:6:17"},"variables":[{"name":"pos","nativeSrc":"13279:3:17","nodeType":"YulTypedName","src":"13279:3:17","type":""}]},{"nativeSrc":"13301:27:17","nodeType":"YulVariableDeclaration","src":"13301:27:17","value":{"arguments":[{"name":"value0","nativeSrc":"13321:6:17","nodeType":"YulIdentifier","src":"13321:6:17"}],"functionName":{"name":"mload","nativeSrc":"13315:5:17","nodeType":"YulIdentifier","src":"13315:5:17"},"nativeSrc":"13315:13:17","nodeType":"YulFunctionCall","src":"13315:13:17"},"variables":[{"name":"length","nativeSrc":"13305:6:17","nodeType":"YulTypedName","src":"13305:6:17","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nativeSrc":"13344:6:17","nodeType":"YulIdentifier","src":"13344:6:17"},{"name":"length","nativeSrc":"13352:6:17","nodeType":"YulIdentifier","src":"13352:6:17"}],"functionName":{"name":"mstore","nativeSrc":"13337:6:17","nodeType":"YulIdentifier","src":"13337:6:17"},"nativeSrc":"13337:22:17","nodeType":"YulFunctionCall","src":"13337:22:17"},"nativeSrc":"13337:22:17","nodeType":"YulExpressionStatement","src":"13337:22:17"},{"nativeSrc":"13368:25:17","nodeType":"YulAssignment","src":"13368:25:17","value":{"arguments":[{"name":"headStart","nativeSrc":"13379:9:17","nodeType":"YulIdentifier","src":"13379:9:17"},{"kind":"number","nativeSrc":"13390:2:17","nodeType":"YulLiteral","src":"13390:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"13375:3:17","nodeType":"YulIdentifier","src":"13375:3:17"},"nativeSrc":"13375:18:17","nodeType":"YulFunctionCall","src":"13375:18:17"},"variableNames":[{"name":"pos","nativeSrc":"13368:3:17","nodeType":"YulIdentifier","src":"13368:3:17"}]},{"nativeSrc":"13402:29:17","nodeType":"YulVariableDeclaration","src":"13402:29:17","value":{"arguments":[{"name":"value0","nativeSrc":"13420:6:17","nodeType":"YulIdentifier","src":"13420:6:17"},{"kind":"number","nativeSrc":"13428:2:17","nodeType":"YulLiteral","src":"13428:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"13416:3:17","nodeType":"YulIdentifier","src":"13416:3:17"},"nativeSrc":"13416:15:17","nodeType":"YulFunctionCall","src":"13416:15:17"},"variables":[{"name":"srcPtr","nativeSrc":"13406:6:17","nodeType":"YulTypedName","src":"13406:6:17","type":""}]},{"nativeSrc":"13440:10:17","nodeType":"YulVariableDeclaration","src":"13440:10:17","value":{"kind":"number","nativeSrc":"13449:1:17","nodeType":"YulLiteral","src":"13449:1:17","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"13444:1:17","nodeType":"YulTypedName","src":"13444:1:17","type":""}]},{"body":{"nativeSrc":"13508:148:17","nodeType":"YulBlock","src":"13508:148:17","statements":[{"expression":{"arguments":[{"arguments":[{"name":"srcPtr","nativeSrc":"13561:6:17","nodeType":"YulIdentifier","src":"13561:6:17"}],"functionName":{"name":"mload","nativeSrc":"13555:5:17","nodeType":"YulIdentifier","src":"13555:5:17"},"nativeSrc":"13555:13:17","nodeType":"YulFunctionCall","src":"13555:13:17"},{"name":"pos","nativeSrc":"13570:3:17","nodeType":"YulIdentifier","src":"13570:3:17"}],"functionName":{"name":"abi_encode_struct_ViewPermission","nativeSrc":"13522:32:17","nodeType":"YulIdentifier","src":"13522:32:17"},"nativeSrc":"13522:52:17","nodeType":"YulFunctionCall","src":"13522:52:17"},"nativeSrc":"13522:52:17","nodeType":"YulExpressionStatement","src":"13522:52:17"},{"nativeSrc":"13587:21:17","nodeType":"YulAssignment","src":"13587:21:17","value":{"arguments":[{"name":"pos","nativeSrc":"13598:3:17","nodeType":"YulIdentifier","src":"13598:3:17"},{"kind":"number","nativeSrc":"13603:4:17","nodeType":"YulLiteral","src":"13603:4:17","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"13594:3:17","nodeType":"YulIdentifier","src":"13594:3:17"},"nativeSrc":"13594:14:17","nodeType":"YulFunctionCall","src":"13594:14:17"},"variableNames":[{"name":"pos","nativeSrc":"13587:3:17","nodeType":"YulIdentifier","src":"13587:3:17"}]},{"nativeSrc":"13621:25:17","nodeType":"YulAssignment","src":"13621:25:17","value":{"arguments":[{"name":"srcPtr","nativeSrc":"13635:6:17","nodeType":"YulIdentifier","src":"13635:6:17"},{"kind":"number","nativeSrc":"13643:2:17","nodeType":"YulLiteral","src":"13643:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"13631:3:17","nodeType":"YulIdentifier","src":"13631:3:17"},"nativeSrc":"13631:15:17","nodeType":"YulFunctionCall","src":"13631:15:17"},"variableNames":[{"name":"srcPtr","nativeSrc":"13621:6:17","nodeType":"YulIdentifier","src":"13621:6:17"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"13470:1:17","nodeType":"YulIdentifier","src":"13470:1:17"},{"name":"length","nativeSrc":"13473:6:17","nodeType":"YulIdentifier","src":"13473:6:17"}],"functionName":{"name":"lt","nativeSrc":"13467:2:17","nodeType":"YulIdentifier","src":"13467:2:17"},"nativeSrc":"13467:13:17","nodeType":"YulFunctionCall","src":"13467:13:17"},"nativeSrc":"13459:197:17","nodeType":"YulForLoop","post":{"nativeSrc":"13481:18:17","nodeType":"YulBlock","src":"13481:18:17","statements":[{"nativeSrc":"13483:14:17","nodeType":"YulAssignment","src":"13483:14:17","value":{"arguments":[{"name":"i","nativeSrc":"13492:1:17","nodeType":"YulIdentifier","src":"13492:1:17"},{"kind":"number","nativeSrc":"13495:1:17","nodeType":"YulLiteral","src":"13495:1:17","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"13488:3:17","nodeType":"YulIdentifier","src":"13488:3:17"},"nativeSrc":"13488:9:17","nodeType":"YulFunctionCall","src":"13488:9:17"},"variableNames":[{"name":"i","nativeSrc":"13483:1:17","nodeType":"YulIdentifier","src":"13483:1:17"}]}]},"pre":{"nativeSrc":"13463:3:17","nodeType":"YulBlock","src":"13463:3:17","statements":[]},"src":"13459:197:17"},{"nativeSrc":"13665:11:17","nodeType":"YulAssignment","src":"13665:11:17","value":{"name":"pos","nativeSrc":"13673:3:17","nodeType":"YulIdentifier","src":"13673:3:17"},"variableNames":[{"name":"tail","nativeSrc":"13665:4:17","nodeType":"YulIdentifier","src":"13665:4:17"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nativeSrc":"12979:703:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"13163:9:17","nodeType":"YulTypedName","src":"13163:9:17","type":""},{"name":"value0","nativeSrc":"13174:6:17","nodeType":"YulTypedName","src":"13174:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"13185:4:17","nodeType":"YulTypedName","src":"13185:4:17","type":""}],"src":"12979:703:17"},{"body":{"nativeSrc":"13748:359:17","nodeType":"YulBlock","src":"13748:359:17","statements":[{"nativeSrc":"13758:26:17","nodeType":"YulVariableDeclaration","src":"13758:26:17","value":{"arguments":[{"name":"value","nativeSrc":"13778:5:17","nodeType":"YulIdentifier","src":"13778:5:17"}],"functionName":{"name":"mload","nativeSrc":"13772:5:17","nodeType":"YulIdentifier","src":"13772:5:17"},"nativeSrc":"13772:12:17","nodeType":"YulFunctionCall","src":"13772:12:17"},"variables":[{"name":"length","nativeSrc":"13762:6:17","nodeType":"YulTypedName","src":"13762:6:17","type":""}]},{"expression":{"arguments":[{"name":"pos","nativeSrc":"13800:3:17","nodeType":"YulIdentifier","src":"13800:3:17"},{"name":"length","nativeSrc":"13805:6:17","nodeType":"YulIdentifier","src":"13805:6:17"}],"functionName":{"name":"mstore","nativeSrc":"13793:6:17","nodeType":"YulIdentifier","src":"13793:6:17"},"nativeSrc":"13793:19:17","nodeType":"YulFunctionCall","src":"13793:19:17"},"nativeSrc":"13793:19:17","nodeType":"YulExpressionStatement","src":"13793:19:17"},{"nativeSrc":"13821:21:17","nodeType":"YulAssignment","src":"13821:21:17","value":{"arguments":[{"name":"pos","nativeSrc":"13832:3:17","nodeType":"YulIdentifier","src":"13832:3:17"},{"kind":"number","nativeSrc":"13837:4:17","nodeType":"YulLiteral","src":"13837:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"13828:3:17","nodeType":"YulIdentifier","src":"13828:3:17"},"nativeSrc":"13828:14:17","nodeType":"YulFunctionCall","src":"13828:14:17"},"variableNames":[{"name":"pos","nativeSrc":"13821:3:17","nodeType":"YulIdentifier","src":"13821:3:17"}]},{"nativeSrc":"13851:30:17","nodeType":"YulVariableDeclaration","src":"13851:30:17","value":{"arguments":[{"name":"value","nativeSrc":"13869:5:17","nodeType":"YulIdentifier","src":"13869:5:17"},{"kind":"number","nativeSrc":"13876:4:17","nodeType":"YulLiteral","src":"13876:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"13865:3:17","nodeType":"YulIdentifier","src":"13865:3:17"},"nativeSrc":"13865:16:17","nodeType":"YulFunctionCall","src":"13865:16:17"},"variables":[{"name":"srcPtr","nativeSrc":"13855:6:17","nodeType":"YulTypedName","src":"13855:6:17","type":""}]},{"nativeSrc":"13890:10:17","nodeType":"YulVariableDeclaration","src":"13890:10:17","value":{"kind":"number","nativeSrc":"13899:1:17","nodeType":"YulLiteral","src":"13899:1:17","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"13894:1:17","nodeType":"YulTypedName","src":"13894:1:17","type":""}]},{"body":{"nativeSrc":"13958:124:17","nodeType":"YulBlock","src":"13958:124:17","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"13979:3:17","nodeType":"YulIdentifier","src":"13979:3:17"},{"arguments":[{"name":"srcPtr","nativeSrc":"13990:6:17","nodeType":"YulIdentifier","src":"13990:6:17"}],"functionName":{"name":"mload","nativeSrc":"13984:5:17","nodeType":"YulIdentifier","src":"13984:5:17"},"nativeSrc":"13984:13:17","nodeType":"YulFunctionCall","src":"13984:13:17"}],"functionName":{"name":"mstore","nativeSrc":"13972:6:17","nodeType":"YulIdentifier","src":"13972:6:17"},"nativeSrc":"13972:26:17","nodeType":"YulFunctionCall","src":"13972:26:17"},"nativeSrc":"13972:26:17","nodeType":"YulExpressionStatement","src":"13972:26:17"},{"nativeSrc":"14011:21:17","nodeType":"YulAssignment","src":"14011:21:17","value":{"arguments":[{"name":"pos","nativeSrc":"14022:3:17","nodeType":"YulIdentifier","src":"14022:3:17"},{"kind":"number","nativeSrc":"14027:4:17","nodeType":"YulLiteral","src":"14027:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"14018:3:17","nodeType":"YulIdentifier","src":"14018:3:17"},"nativeSrc":"14018:14:17","nodeType":"YulFunctionCall","src":"14018:14:17"},"variableNames":[{"name":"pos","nativeSrc":"14011:3:17","nodeType":"YulIdentifier","src":"14011:3:17"}]},{"nativeSrc":"14045:27:17","nodeType":"YulAssignment","src":"14045:27:17","value":{"arguments":[{"name":"srcPtr","nativeSrc":"14059:6:17","nodeType":"YulIdentifier","src":"14059:6:17"},{"kind":"number","nativeSrc":"14067:4:17","nodeType":"YulLiteral","src":"14067:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"14055:3:17","nodeType":"YulIdentifier","src":"14055:3:17"},"nativeSrc":"14055:17:17","nodeType":"YulFunctionCall","src":"14055:17:17"},"variableNames":[{"name":"srcPtr","nativeSrc":"14045:6:17","nodeType":"YulIdentifier","src":"14045:6:17"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"13920:1:17","nodeType":"YulIdentifier","src":"13920:1:17"},{"name":"length","nativeSrc":"13923:6:17","nodeType":"YulIdentifier","src":"13923:6:17"}],"functionName":{"name":"lt","nativeSrc":"13917:2:17","nodeType":"YulIdentifier","src":"13917:2:17"},"nativeSrc":"13917:13:17","nodeType":"YulFunctionCall","src":"13917:13:17"},"nativeSrc":"13909:173:17","nodeType":"YulForLoop","post":{"nativeSrc":"13931:18:17","nodeType":"YulBlock","src":"13931:18:17","statements":[{"nativeSrc":"13933:14:17","nodeType":"YulAssignment","src":"13933:14:17","value":{"arguments":[{"name":"i","nativeSrc":"13942:1:17","nodeType":"YulIdentifier","src":"13942:1:17"},{"kind":"number","nativeSrc":"13945:1:17","nodeType":"YulLiteral","src":"13945:1:17","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"13938:3:17","nodeType":"YulIdentifier","src":"13938:3:17"},"nativeSrc":"13938:9:17","nodeType":"YulFunctionCall","src":"13938:9:17"},"variableNames":[{"name":"i","nativeSrc":"13933:1:17","nodeType":"YulIdentifier","src":"13933:1:17"}]}]},"pre":{"nativeSrc":"13913:3:17","nodeType":"YulBlock","src":"13913:3:17","statements":[]},"src":"13909:173:17"},{"nativeSrc":"14091:10:17","nodeType":"YulAssignment","src":"14091:10:17","value":{"name":"pos","nativeSrc":"14098:3:17","nodeType":"YulIdentifier","src":"14098:3:17"},"variableNames":[{"name":"end","nativeSrc":"14091:3:17","nodeType":"YulIdentifier","src":"14091:3:17"}]}]},"name":"abi_encode_array_uint256_dyn","nativeSrc":"13687:420:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"13725:5:17","nodeType":"YulTypedName","src":"13725:5:17","type":""},{"name":"pos","nativeSrc":"13732:3:17","nodeType":"YulTypedName","src":"13732:3:17","type":""}],"returnVariables":[{"name":"end","nativeSrc":"13740:3:17","nodeType":"YulTypedName","src":"13740:3:17","type":""}],"src":"13687:420:17"},{"body":{"nativeSrc":"14287:1093:17","nodeType":"YulBlock","src":"14287:1093:17","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"14304:9:17","nodeType":"YulIdentifier","src":"14304:9:17"},{"kind":"number","nativeSrc":"14315:2:17","nodeType":"YulLiteral","src":"14315:2:17","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"14297:6:17","nodeType":"YulIdentifier","src":"14297:6:17"},"nativeSrc":"14297:21:17","nodeType":"YulFunctionCall","src":"14297:21:17"},"nativeSrc":"14297:21:17","nodeType":"YulExpressionStatement","src":"14297:21:17"},{"nativeSrc":"14327:33:17","nodeType":"YulVariableDeclaration","src":"14327:33:17","value":{"arguments":[{"name":"headStart","nativeSrc":"14345:9:17","nodeType":"YulIdentifier","src":"14345:9:17"},{"kind":"number","nativeSrc":"14356:3:17","nodeType":"YulLiteral","src":"14356:3:17","type":"","value":"224"}],"functionName":{"name":"add","nativeSrc":"14341:3:17","nodeType":"YulIdentifier","src":"14341:3:17"},"nativeSrc":"14341:19:17","nodeType":"YulFunctionCall","src":"14341:19:17"},"variables":[{"name":"tail_1","nativeSrc":"14331:6:17","nodeType":"YulTypedName","src":"14331:6:17","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14380:9:17","nodeType":"YulIdentifier","src":"14380:9:17"},{"kind":"number","nativeSrc":"14391:2:17","nodeType":"YulLiteral","src":"14391:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14376:3:17","nodeType":"YulIdentifier","src":"14376:3:17"},"nativeSrc":"14376:18:17","nodeType":"YulFunctionCall","src":"14376:18:17"},{"arguments":[{"name":"value0","nativeSrc":"14402:6:17","nodeType":"YulIdentifier","src":"14402:6:17"}],"functionName":{"name":"mload","nativeSrc":"14396:5:17","nodeType":"YulIdentifier","src":"14396:5:17"},"nativeSrc":"14396:13:17","nodeType":"YulFunctionCall","src":"14396:13:17"}],"functionName":{"name":"mstore","nativeSrc":"14369:6:17","nodeType":"YulIdentifier","src":"14369:6:17"},"nativeSrc":"14369:41:17","nodeType":"YulFunctionCall","src":"14369:41:17"},"nativeSrc":"14369:41:17","nodeType":"YulExpressionStatement","src":"14369:41:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14430:9:17","nodeType":"YulIdentifier","src":"14430:9:17"},{"kind":"number","nativeSrc":"14441:2:17","nodeType":"YulLiteral","src":"14441:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"14426:3:17","nodeType":"YulIdentifier","src":"14426:3:17"},"nativeSrc":"14426:18:17","nodeType":"YulFunctionCall","src":"14426:18:17"},{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"14456:6:17","nodeType":"YulIdentifier","src":"14456:6:17"},{"kind":"number","nativeSrc":"14464:2:17","nodeType":"YulLiteral","src":"14464:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14452:3:17","nodeType":"YulIdentifier","src":"14452:3:17"},"nativeSrc":"14452:15:17","nodeType":"YulFunctionCall","src":"14452:15:17"}],"functionName":{"name":"mload","nativeSrc":"14446:5:17","nodeType":"YulIdentifier","src":"14446:5:17"},"nativeSrc":"14446:22:17","nodeType":"YulFunctionCall","src":"14446:22:17"}],"functionName":{"name":"mstore","nativeSrc":"14419:6:17","nodeType":"YulIdentifier","src":"14419:6:17"},"nativeSrc":"14419:50:17","nodeType":"YulFunctionCall","src":"14419:50:17"},"nativeSrc":"14419:50:17","nodeType":"YulExpressionStatement","src":"14419:50:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14489:9:17","nodeType":"YulIdentifier","src":"14489:9:17"},{"kind":"number","nativeSrc":"14500:2:17","nodeType":"YulLiteral","src":"14500:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"14485:3:17","nodeType":"YulIdentifier","src":"14485:3:17"},"nativeSrc":"14485:18:17","nodeType":"YulFunctionCall","src":"14485:18:17"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"14529:6:17","nodeType":"YulIdentifier","src":"14529:6:17"},{"kind":"number","nativeSrc":"14537:2:17","nodeType":"YulLiteral","src":"14537:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"14525:3:17","nodeType":"YulIdentifier","src":"14525:3:17"},"nativeSrc":"14525:15:17","nodeType":"YulFunctionCall","src":"14525:15:17"}],"functionName":{"name":"mload","nativeSrc":"14519:5:17","nodeType":"YulIdentifier","src":"14519:5:17"},"nativeSrc":"14519:22:17","nodeType":"YulFunctionCall","src":"14519:22:17"}],"functionName":{"name":"iszero","nativeSrc":"14512:6:17","nodeType":"YulIdentifier","src":"14512:6:17"},"nativeSrc":"14512:30:17","nodeType":"YulFunctionCall","src":"14512:30:17"}],"functionName":{"name":"iszero","nativeSrc":"14505:6:17","nodeType":"YulIdentifier","src":"14505:6:17"},"nativeSrc":"14505:38:17","nodeType":"YulFunctionCall","src":"14505:38:17"}],"functionName":{"name":"mstore","nativeSrc":"14478:6:17","nodeType":"YulIdentifier","src":"14478:6:17"},"nativeSrc":"14478:66:17","nodeType":"YulFunctionCall","src":"14478:66:17"},"nativeSrc":"14478:66:17","nodeType":"YulExpressionStatement","src":"14478:66:17"},{"nativeSrc":"14553:42:17","nodeType":"YulVariableDeclaration","src":"14553:42:17","value":{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"14583:6:17","nodeType":"YulIdentifier","src":"14583:6:17"},{"kind":"number","nativeSrc":"14591:2:17","nodeType":"YulLiteral","src":"14591:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"14579:3:17","nodeType":"YulIdentifier","src":"14579:3:17"},"nativeSrc":"14579:15:17","nodeType":"YulFunctionCall","src":"14579:15:17"}],"functionName":{"name":"mload","nativeSrc":"14573:5:17","nodeType":"YulIdentifier","src":"14573:5:17"},"nativeSrc":"14573:22:17","nodeType":"YulFunctionCall","src":"14573:22:17"},"variables":[{"name":"memberValue0","nativeSrc":"14557:12:17","nodeType":"YulTypedName","src":"14557:12:17","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"14615:9:17","nodeType":"YulIdentifier","src":"14615:9:17"},{"kind":"number","nativeSrc":"14626:3:17","nodeType":"YulLiteral","src":"14626:3:17","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"14611:3:17","nodeType":"YulIdentifier","src":"14611:3:17"},"nativeSrc":"14611:19:17","nodeType":"YulFunctionCall","src":"14611:19:17"},{"kind":"number","nativeSrc":"14632:4:17","nodeType":"YulLiteral","src":"14632:4:17","type":"","value":"0xc0"}],"functionName":{"name":"mstore","nativeSrc":"14604:6:17","nodeType":"YulIdentifier","src":"14604:6:17"},"nativeSrc":"14604:33:17","nodeType":"YulFunctionCall","src":"14604:33:17"},"nativeSrc":"14604:33:17","nodeType":"YulExpressionStatement","src":"14604:33:17"},{"nativeSrc":"14646:17:17","nodeType":"YulVariableDeclaration","src":"14646:17:17","value":{"name":"tail_1","nativeSrc":"14657:6:17","nodeType":"YulIdentifier","src":"14657:6:17"},"variables":[{"name":"pos","nativeSrc":"14650:3:17","nodeType":"YulTypedName","src":"14650:3:17","type":""}]},{"nativeSrc":"14672:33:17","nodeType":"YulVariableDeclaration","src":"14672:33:17","value":{"arguments":[{"name":"memberValue0","nativeSrc":"14692:12:17","nodeType":"YulIdentifier","src":"14692:12:17"}],"functionName":{"name":"mload","nativeSrc":"14686:5:17","nodeType":"YulIdentifier","src":"14686:5:17"},"nativeSrc":"14686:19:17","nodeType":"YulFunctionCall","src":"14686:19:17"},"variables":[{"name":"length","nativeSrc":"14676:6:17","nodeType":"YulTypedName","src":"14676:6:17","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nativeSrc":"14721:6:17","nodeType":"YulIdentifier","src":"14721:6:17"},{"name":"length","nativeSrc":"14729:6:17","nodeType":"YulIdentifier","src":"14729:6:17"}],"functionName":{"name":"mstore","nativeSrc":"14714:6:17","nodeType":"YulIdentifier","src":"14714:6:17"},"nativeSrc":"14714:22:17","nodeType":"YulFunctionCall","src":"14714:22:17"},"nativeSrc":"14714:22:17","nodeType":"YulExpressionStatement","src":"14714:22:17"},{"nativeSrc":"14745:26:17","nodeType":"YulAssignment","src":"14745:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"14756:9:17","nodeType":"YulIdentifier","src":"14756:9:17"},{"kind":"number","nativeSrc":"14767:3:17","nodeType":"YulLiteral","src":"14767:3:17","type":"","value":"256"}],"functionName":{"name":"add","nativeSrc":"14752:3:17","nodeType":"YulIdentifier","src":"14752:3:17"},"nativeSrc":"14752:19:17","nodeType":"YulFunctionCall","src":"14752:19:17"},"variableNames":[{"name":"pos","nativeSrc":"14745:3:17","nodeType":"YulIdentifier","src":"14745:3:17"}]},{"nativeSrc":"14780:35:17","nodeType":"YulVariableDeclaration","src":"14780:35:17","value":{"arguments":[{"name":"memberValue0","nativeSrc":"14798:12:17","nodeType":"YulIdentifier","src":"14798:12:17"},{"kind":"number","nativeSrc":"14812:2:17","nodeType":"YulLiteral","src":"14812:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14794:3:17","nodeType":"YulIdentifier","src":"14794:3:17"},"nativeSrc":"14794:21:17","nodeType":"YulFunctionCall","src":"14794:21:17"},"variables":[{"name":"srcPtr","nativeSrc":"14784:6:17","nodeType":"YulTypedName","src":"14784:6:17","type":""}]},{"nativeSrc":"14824:10:17","nodeType":"YulVariableDeclaration","src":"14824:10:17","value":{"kind":"number","nativeSrc":"14833:1:17","nodeType":"YulLiteral","src":"14833:1:17","type":"","value":"0"},"variables":[{"name":"i","nativeSrc":"14828:1:17","nodeType":"YulTypedName","src":"14828:1:17","type":""}]},{"body":{"nativeSrc":"14892:146:17","nodeType":"YulBlock","src":"14892:146:17","statements":[{"expression":{"arguments":[{"name":"pos","nativeSrc":"14913:3:17","nodeType":"YulIdentifier","src":"14913:3:17"},{"arguments":[{"arguments":[{"name":"srcPtr","nativeSrc":"14928:6:17","nodeType":"YulIdentifier","src":"14928:6:17"}],"functionName":{"name":"mload","nativeSrc":"14922:5:17","nodeType":"YulIdentifier","src":"14922:5:17"},"nativeSrc":"14922:13:17","nodeType":"YulFunctionCall","src":"14922:13:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"14945:3:17","nodeType":"YulLiteral","src":"14945:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"14950:1:17","nodeType":"YulLiteral","src":"14950:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"14941:3:17","nodeType":"YulIdentifier","src":"14941:3:17"},"nativeSrc":"14941:11:17","nodeType":"YulFunctionCall","src":"14941:11:17"},{"kind":"number","nativeSrc":"14954:1:17","nodeType":"YulLiteral","src":"14954:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"14937:3:17","nodeType":"YulIdentifier","src":"14937:3:17"},"nativeSrc":"14937:19:17","nodeType":"YulFunctionCall","src":"14937:19:17"}],"functionName":{"name":"and","nativeSrc":"14918:3:17","nodeType":"YulIdentifier","src":"14918:3:17"},"nativeSrc":"14918:39:17","nodeType":"YulFunctionCall","src":"14918:39:17"}],"functionName":{"name":"mstore","nativeSrc":"14906:6:17","nodeType":"YulIdentifier","src":"14906:6:17"},"nativeSrc":"14906:52:17","nodeType":"YulFunctionCall","src":"14906:52:17"},"nativeSrc":"14906:52:17","nodeType":"YulExpressionStatement","src":"14906:52:17"},{"nativeSrc":"14971:19:17","nodeType":"YulAssignment","src":"14971:19:17","value":{"arguments":[{"name":"pos","nativeSrc":"14982:3:17","nodeType":"YulIdentifier","src":"14982:3:17"},{"kind":"number","nativeSrc":"14987:2:17","nodeType":"YulLiteral","src":"14987:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"14978:3:17","nodeType":"YulIdentifier","src":"14978:3:17"},"nativeSrc":"14978:12:17","nodeType":"YulFunctionCall","src":"14978:12:17"},"variableNames":[{"name":"pos","nativeSrc":"14971:3:17","nodeType":"YulIdentifier","src":"14971:3:17"}]},{"nativeSrc":"15003:25:17","nodeType":"YulAssignment","src":"15003:25:17","value":{"arguments":[{"name":"srcPtr","nativeSrc":"15017:6:17","nodeType":"YulIdentifier","src":"15017:6:17"},{"kind":"number","nativeSrc":"15025:2:17","nodeType":"YulLiteral","src":"15025:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"15013:3:17","nodeType":"YulIdentifier","src":"15013:3:17"},"nativeSrc":"15013:15:17","nodeType":"YulFunctionCall","src":"15013:15:17"},"variableNames":[{"name":"srcPtr","nativeSrc":"15003:6:17","nodeType":"YulIdentifier","src":"15003:6:17"}]}]},"condition":{"arguments":[{"name":"i","nativeSrc":"14854:1:17","nodeType":"YulIdentifier","src":"14854:1:17"},{"name":"length","nativeSrc":"14857:6:17","nodeType":"YulIdentifier","src":"14857:6:17"}],"functionName":{"name":"lt","nativeSrc":"14851:2:17","nodeType":"YulIdentifier","src":"14851:2:17"},"nativeSrc":"14851:13:17","nodeType":"YulFunctionCall","src":"14851:13:17"},"nativeSrc":"14843:195:17","nodeType":"YulForLoop","post":{"nativeSrc":"14865:18:17","nodeType":"YulBlock","src":"14865:18:17","statements":[{"nativeSrc":"14867:14:17","nodeType":"YulAssignment","src":"14867:14:17","value":{"arguments":[{"name":"i","nativeSrc":"14876:1:17","nodeType":"YulIdentifier","src":"14876:1:17"},{"kind":"number","nativeSrc":"14879:1:17","nodeType":"YulLiteral","src":"14879:1:17","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"14872:3:17","nodeType":"YulIdentifier","src":"14872:3:17"},"nativeSrc":"14872:9:17","nodeType":"YulFunctionCall","src":"14872:9:17"},"variableNames":[{"name":"i","nativeSrc":"14867:1:17","nodeType":"YulIdentifier","src":"14867:1:17"}]}]},"pre":{"nativeSrc":"14847:3:17","nodeType":"YulBlock","src":"14847:3:17","statements":[]},"src":"14843:195:17"},{"nativeSrc":"15047:45:17","nodeType":"YulVariableDeclaration","src":"15047:45:17","value":{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"15079:6:17","nodeType":"YulIdentifier","src":"15079:6:17"},{"kind":"number","nativeSrc":"15087:3:17","nodeType":"YulLiteral","src":"15087:3:17","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"15075:3:17","nodeType":"YulIdentifier","src":"15075:3:17"},"nativeSrc":"15075:16:17","nodeType":"YulFunctionCall","src":"15075:16:17"}],"functionName":{"name":"mload","nativeSrc":"15069:5:17","nodeType":"YulIdentifier","src":"15069:5:17"},"nativeSrc":"15069:23:17","nodeType":"YulFunctionCall","src":"15069:23:17"},"variables":[{"name":"memberValue0_1","nativeSrc":"15051:14:17","nodeType":"YulTypedName","src":"15051:14:17","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"15112:9:17","nodeType":"YulIdentifier","src":"15112:9:17"},{"kind":"number","nativeSrc":"15123:3:17","nodeType":"YulLiteral","src":"15123:3:17","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"15108:3:17","nodeType":"YulIdentifier","src":"15108:3:17"},"nativeSrc":"15108:19:17","nodeType":"YulFunctionCall","src":"15108:19:17"},{"arguments":[{"arguments":[{"name":"pos","nativeSrc":"15137:3:17","nodeType":"YulIdentifier","src":"15137:3:17"},{"name":"headStart","nativeSrc":"15142:9:17","nodeType":"YulIdentifier","src":"15142:9:17"}],"functionName":{"name":"sub","nativeSrc":"15133:3:17","nodeType":"YulIdentifier","src":"15133:3:17"},"nativeSrc":"15133:19:17","nodeType":"YulFunctionCall","src":"15133:19:17"},{"arguments":[{"kind":"number","nativeSrc":"15158:2:17","nodeType":"YulLiteral","src":"15158:2:17","type":"","value":"31"}],"functionName":{"name":"not","nativeSrc":"15154:3:17","nodeType":"YulIdentifier","src":"15154:3:17"},"nativeSrc":"15154:7:17","nodeType":"YulFunctionCall","src":"15154:7:17"}],"functionName":{"name":"add","nativeSrc":"15129:3:17","nodeType":"YulIdentifier","src":"15129:3:17"},"nativeSrc":"15129:33:17","nodeType":"YulFunctionCall","src":"15129:33:17"}],"functionName":{"name":"mstore","nativeSrc":"15101:6:17","nodeType":"YulIdentifier","src":"15101:6:17"},"nativeSrc":"15101:62:17","nodeType":"YulFunctionCall","src":"15101:62:17"},"nativeSrc":"15101:62:17","nodeType":"YulExpressionStatement","src":"15101:62:17"},{"nativeSrc":"15172:63:17","nodeType":"YulVariableDeclaration","src":"15172:63:17","value":{"arguments":[{"name":"memberValue0_1","nativeSrc":"15215:14:17","nodeType":"YulIdentifier","src":"15215:14:17"},{"name":"pos","nativeSrc":"15231:3:17","nodeType":"YulIdentifier","src":"15231:3:17"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nativeSrc":"15186:28:17","nodeType":"YulIdentifier","src":"15186:28:17"},"nativeSrc":"15186:49:17","nodeType":"YulFunctionCall","src":"15186:49:17"},"variables":[{"name":"tail_2","nativeSrc":"15176:6:17","nodeType":"YulTypedName","src":"15176:6:17","type":""}]},{"nativeSrc":"15244:45:17","nodeType":"YulVariableDeclaration","src":"15244:45:17","value":{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"15276:6:17","nodeType":"YulIdentifier","src":"15276:6:17"},{"kind":"number","nativeSrc":"15284:3:17","nodeType":"YulLiteral","src":"15284:3:17","type":"","value":"160"}],"functionName":{"name":"add","nativeSrc":"15272:3:17","nodeType":"YulIdentifier","src":"15272:3:17"},"nativeSrc":"15272:16:17","nodeType":"YulFunctionCall","src":"15272:16:17"}],"functionName":{"name":"mload","nativeSrc":"15266:5:17","nodeType":"YulIdentifier","src":"15266:5:17"},"nativeSrc":"15266:23:17","nodeType":"YulFunctionCall","src":"15266:23:17"},"variables":[{"name":"memberValue0_2","nativeSrc":"15248:14:17","nodeType":"YulTypedName","src":"15248:14:17","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nativeSrc":"15314:14:17","nodeType":"YulIdentifier","src":"15314:14:17"},{"arguments":[{"name":"headStart","nativeSrc":"15334:9:17","nodeType":"YulIdentifier","src":"15334:9:17"},{"kind":"number","nativeSrc":"15345:4:17","nodeType":"YulLiteral","src":"15345:4:17","type":"","value":"0xc0"}],"functionName":{"name":"add","nativeSrc":"15330:3:17","nodeType":"YulIdentifier","src":"15330:3:17"},"nativeSrc":"15330:20:17","nodeType":"YulFunctionCall","src":"15330:20:17"}],"functionName":{"name":"abi_encode_bool","nativeSrc":"15298:15:17","nodeType":"YulIdentifier","src":"15298:15:17"},"nativeSrc":"15298:53:17","nodeType":"YulFunctionCall","src":"15298:53:17"},"nativeSrc":"15298:53:17","nodeType":"YulExpressionStatement","src":"15298:53:17"},{"nativeSrc":"15360:14:17","nodeType":"YulAssignment","src":"15360:14:17","value":{"name":"tail_2","nativeSrc":"15368:6:17","nodeType":"YulIdentifier","src":"15368:6:17"},"variableNames":[{"name":"tail","nativeSrc":"15360:4:17","nodeType":"YulIdentifier","src":"15360:4:17"}]}]},"name":"abi_encode_tuple_t_struct$_ContentPurchaseInfo_$3440_memory_ptr__to_t_struct$_ContentPurchaseInfo_$3440_memory_ptr__fromStack_reversed","nativeSrc":"14112:1268:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"14256:9:17","nodeType":"YulTypedName","src":"14256:9:17","type":""},{"name":"value0","nativeSrc":"14267:6:17","nodeType":"YulTypedName","src":"14267:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"14278:4:17","nodeType":"YulTypedName","src":"14278:4:17","type":""}],"src":"14112:1268:17"},{"body":{"nativeSrc":"15417:95:17","nodeType":"YulBlock","src":"15417:95:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"15434:1:17","nodeType":"YulLiteral","src":"15434:1:17","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"15441:3:17","nodeType":"YulLiteral","src":"15441:3:17","type":"","value":"224"},{"kind":"number","nativeSrc":"15446:10:17","nodeType":"YulLiteral","src":"15446:10:17","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"15437:3:17","nodeType":"YulIdentifier","src":"15437:3:17"},"nativeSrc":"15437:20:17","nodeType":"YulFunctionCall","src":"15437:20:17"}],"functionName":{"name":"mstore","nativeSrc":"15427:6:17","nodeType":"YulIdentifier","src":"15427:6:17"},"nativeSrc":"15427:31:17","nodeType":"YulFunctionCall","src":"15427:31:17"},"nativeSrc":"15427:31:17","nodeType":"YulExpressionStatement","src":"15427:31:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"15474:1:17","nodeType":"YulLiteral","src":"15474:1:17","type":"","value":"4"},{"kind":"number","nativeSrc":"15477:4:17","nodeType":"YulLiteral","src":"15477:4:17","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"15467:6:17","nodeType":"YulIdentifier","src":"15467:6:17"},"nativeSrc":"15467:15:17","nodeType":"YulFunctionCall","src":"15467:15:17"},"nativeSrc":"15467:15:17","nodeType":"YulExpressionStatement","src":"15467:15:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"15498:1:17","nodeType":"YulLiteral","src":"15498:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"15501:4:17","nodeType":"YulLiteral","src":"15501:4:17","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"15491:6:17","nodeType":"YulIdentifier","src":"15491:6:17"},"nativeSrc":"15491:15:17","nodeType":"YulFunctionCall","src":"15491:15:17"},"nativeSrc":"15491:15:17","nodeType":"YulExpressionStatement","src":"15491:15:17"}]},"name":"panic_error_0x11","nativeSrc":"15385:127:17","nodeType":"YulFunctionDefinition","src":"15385:127:17"},{"body":{"nativeSrc":"15565:77:17","nodeType":"YulBlock","src":"15565:77:17","statements":[{"nativeSrc":"15575:16:17","nodeType":"YulAssignment","src":"15575:16:17","value":{"arguments":[{"name":"x","nativeSrc":"15586:1:17","nodeType":"YulIdentifier","src":"15586:1:17"},{"name":"y","nativeSrc":"15589:1:17","nodeType":"YulIdentifier","src":"15589:1:17"}],"functionName":{"name":"add","nativeSrc":"15582:3:17","nodeType":"YulIdentifier","src":"15582:3:17"},"nativeSrc":"15582:9:17","nodeType":"YulFunctionCall","src":"15582:9:17"},"variableNames":[{"name":"sum","nativeSrc":"15575:3:17","nodeType":"YulIdentifier","src":"15575:3:17"}]},{"body":{"nativeSrc":"15614:22:17","nodeType":"YulBlock","src":"15614:22:17","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"15616:16:17","nodeType":"YulIdentifier","src":"15616:16:17"},"nativeSrc":"15616:18:17","nodeType":"YulFunctionCall","src":"15616:18:17"},"nativeSrc":"15616:18:17","nodeType":"YulExpressionStatement","src":"15616:18:17"}]},"condition":{"arguments":[{"name":"x","nativeSrc":"15606:1:17","nodeType":"YulIdentifier","src":"15606:1:17"},{"name":"sum","nativeSrc":"15609:3:17","nodeType":"YulIdentifier","src":"15609:3:17"}],"functionName":{"name":"gt","nativeSrc":"15603:2:17","nodeType":"YulIdentifier","src":"15603:2:17"},"nativeSrc":"15603:10:17","nodeType":"YulFunctionCall","src":"15603:10:17"},"nativeSrc":"15600:36:17","nodeType":"YulIf","src":"15600:36:17"}]},"name":"checked_add_t_uint256","nativeSrc":"15517:125:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"15548:1:17","nodeType":"YulTypedName","src":"15548:1:17","type":""},{"name":"y","nativeSrc":"15551:1:17","nodeType":"YulTypedName","src":"15551:1:17","type":""}],"returnVariables":[{"name":"sum","nativeSrc":"15557:3:17","nodeType":"YulTypedName","src":"15557:3:17","type":""}],"src":"15517:125:17"},{"body":{"nativeSrc":"15756:76:17","nodeType":"YulBlock","src":"15756:76:17","statements":[{"nativeSrc":"15766:26:17","nodeType":"YulAssignment","src":"15766:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"15778:9:17","nodeType":"YulIdentifier","src":"15778:9:17"},{"kind":"number","nativeSrc":"15789:2:17","nodeType":"YulLiteral","src":"15789:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"15774:3:17","nodeType":"YulIdentifier","src":"15774:3:17"},"nativeSrc":"15774:18:17","nodeType":"YulFunctionCall","src":"15774:18:17"},"variableNames":[{"name":"tail","nativeSrc":"15766:4:17","nodeType":"YulIdentifier","src":"15766:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"15808:9:17","nodeType":"YulIdentifier","src":"15808:9:17"},{"name":"value0","nativeSrc":"15819:6:17","nodeType":"YulIdentifier","src":"15819:6:17"}],"functionName":{"name":"mstore","nativeSrc":"15801:6:17","nodeType":"YulIdentifier","src":"15801:6:17"},"nativeSrc":"15801:25:17","nodeType":"YulFunctionCall","src":"15801:25:17"},"nativeSrc":"15801:25:17","nodeType":"YulExpressionStatement","src":"15801:25:17"}]},"name":"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed","nativeSrc":"15647:185:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"15725:9:17","nodeType":"YulTypedName","src":"15725:9:17","type":""},{"name":"value0","nativeSrc":"15736:6:17","nodeType":"YulTypedName","src":"15736:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"15747:4:17","nodeType":"YulTypedName","src":"15747:4:17","type":""}],"src":"15647:185:17"},{"body":{"nativeSrc":"15884:89:17","nodeType":"YulBlock","src":"15884:89:17","statements":[{"body":{"nativeSrc":"15911:22:17","nodeType":"YulBlock","src":"15911:22:17","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"15913:16:17","nodeType":"YulIdentifier","src":"15913:16:17"},"nativeSrc":"15913:18:17","nodeType":"YulFunctionCall","src":"15913:18:17"},"nativeSrc":"15913:18:17","nodeType":"YulExpressionStatement","src":"15913:18:17"}]},"condition":{"arguments":[{"name":"value","nativeSrc":"15904:5:17","nodeType":"YulIdentifier","src":"15904:5:17"}],"functionName":{"name":"iszero","nativeSrc":"15897:6:17","nodeType":"YulIdentifier","src":"15897:6:17"},"nativeSrc":"15897:13:17","nodeType":"YulFunctionCall","src":"15897:13:17"},"nativeSrc":"15894:39:17","nodeType":"YulIf","src":"15894:39:17"},{"nativeSrc":"15942:25:17","nodeType":"YulAssignment","src":"15942:25:17","value":{"arguments":[{"name":"value","nativeSrc":"15953:5:17","nodeType":"YulIdentifier","src":"15953:5:17"},{"arguments":[{"kind":"number","nativeSrc":"15964:1:17","nodeType":"YulLiteral","src":"15964:1:17","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"15960:3:17","nodeType":"YulIdentifier","src":"15960:3:17"},"nativeSrc":"15960:6:17","nodeType":"YulFunctionCall","src":"15960:6:17"}],"functionName":{"name":"add","nativeSrc":"15949:3:17","nodeType":"YulIdentifier","src":"15949:3:17"},"nativeSrc":"15949:18:17","nodeType":"YulFunctionCall","src":"15949:18:17"},"variableNames":[{"name":"ret","nativeSrc":"15942:3:17","nodeType":"YulIdentifier","src":"15942:3:17"}]}]},"name":"decrement_t_uint256","nativeSrc":"15837:136:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"15866:5:17","nodeType":"YulTypedName","src":"15866:5:17","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"15876:3:17","nodeType":"YulTypedName","src":"15876:3:17","type":""}],"src":"15837:136:17"},{"body":{"nativeSrc":"16010:95:17","nodeType":"YulBlock","src":"16010:95:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"16027:1:17","nodeType":"YulLiteral","src":"16027:1:17","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"16034:3:17","nodeType":"YulLiteral","src":"16034:3:17","type":"","value":"224"},{"kind":"number","nativeSrc":"16039:10:17","nodeType":"YulLiteral","src":"16039:10:17","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"16030:3:17","nodeType":"YulIdentifier","src":"16030:3:17"},"nativeSrc":"16030:20:17","nodeType":"YulFunctionCall","src":"16030:20:17"}],"functionName":{"name":"mstore","nativeSrc":"16020:6:17","nodeType":"YulIdentifier","src":"16020:6:17"},"nativeSrc":"16020:31:17","nodeType":"YulFunctionCall","src":"16020:31:17"},"nativeSrc":"16020:31:17","nodeType":"YulExpressionStatement","src":"16020:31:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"16067:1:17","nodeType":"YulLiteral","src":"16067:1:17","type":"","value":"4"},{"kind":"number","nativeSrc":"16070:4:17","nodeType":"YulLiteral","src":"16070:4:17","type":"","value":"0x32"}],"functionName":{"name":"mstore","nativeSrc":"16060:6:17","nodeType":"YulIdentifier","src":"16060:6:17"},"nativeSrc":"16060:15:17","nodeType":"YulFunctionCall","src":"16060:15:17"},"nativeSrc":"16060:15:17","nodeType":"YulExpressionStatement","src":"16060:15:17"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"16091:1:17","nodeType":"YulLiteral","src":"16091:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"16094:4:17","nodeType":"YulLiteral","src":"16094:4:17","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"16084:6:17","nodeType":"YulIdentifier","src":"16084:6:17"},"nativeSrc":"16084:15:17","nodeType":"YulFunctionCall","src":"16084:15:17"},"nativeSrc":"16084:15:17","nodeType":"YulExpressionStatement","src":"16084:15:17"}]},"name":"panic_error_0x32","nativeSrc":"15978:127:17","nodeType":"YulFunctionDefinition","src":"15978:127:17"},{"body":{"nativeSrc":"16218:101:17","nodeType":"YulBlock","src":"16218:101:17","statements":[{"nativeSrc":"16228:26:17","nodeType":"YulAssignment","src":"16228:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"16240:9:17","nodeType":"YulIdentifier","src":"16240:9:17"},{"kind":"number","nativeSrc":"16251:2:17","nodeType":"YulLiteral","src":"16251:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"16236:3:17","nodeType":"YulIdentifier","src":"16236:3:17"},"nativeSrc":"16236:18:17","nodeType":"YulFunctionCall","src":"16236:18:17"},"variableNames":[{"name":"tail","nativeSrc":"16228:4:17","nodeType":"YulIdentifier","src":"16228:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"16270:9:17","nodeType":"YulIdentifier","src":"16270:9:17"},{"arguments":[{"name":"value0","nativeSrc":"16285:6:17","nodeType":"YulIdentifier","src":"16285:6:17"},{"kind":"number","nativeSrc":"16293:18:17","nodeType":"YulLiteral","src":"16293:18:17","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"16281:3:17","nodeType":"YulIdentifier","src":"16281:3:17"},"nativeSrc":"16281:31:17","nodeType":"YulFunctionCall","src":"16281:31:17"}],"functionName":{"name":"mstore","nativeSrc":"16263:6:17","nodeType":"YulIdentifier","src":"16263:6:17"},"nativeSrc":"16263:50:17","nodeType":"YulFunctionCall","src":"16263:50:17"},"nativeSrc":"16263:50:17","nodeType":"YulExpressionStatement","src":"16263:50:17"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed","nativeSrc":"16110:209:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16187:9:17","nodeType":"YulTypedName","src":"16187:9:17","type":""},{"name":"value0","nativeSrc":"16198:6:17","nodeType":"YulTypedName","src":"16198:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"16209:4:17","nodeType":"YulTypedName","src":"16209:4:17","type":""}],"src":"16110:209:17"},{"body":{"nativeSrc":"16405:170:17","nodeType":"YulBlock","src":"16405:170:17","statements":[{"body":{"nativeSrc":"16451:16:17","nodeType":"YulBlock","src":"16451:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"16460:1:17","nodeType":"YulLiteral","src":"16460:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"16463:1:17","nodeType":"YulLiteral","src":"16463:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"16453:6:17","nodeType":"YulIdentifier","src":"16453:6:17"},"nativeSrc":"16453:12:17","nodeType":"YulFunctionCall","src":"16453:12:17"},"nativeSrc":"16453:12:17","nodeType":"YulExpressionStatement","src":"16453:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"16426:7:17","nodeType":"YulIdentifier","src":"16426:7:17"},{"name":"headStart","nativeSrc":"16435:9:17","nodeType":"YulIdentifier","src":"16435:9:17"}],"functionName":{"name":"sub","nativeSrc":"16422:3:17","nodeType":"YulIdentifier","src":"16422:3:17"},"nativeSrc":"16422:23:17","nodeType":"YulFunctionCall","src":"16422:23:17"},{"kind":"number","nativeSrc":"16447:2:17","nodeType":"YulLiteral","src":"16447:2:17","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"16418:3:17","nodeType":"YulIdentifier","src":"16418:3:17"},"nativeSrc":"16418:32:17","nodeType":"YulFunctionCall","src":"16418:32:17"},"nativeSrc":"16415:52:17","nodeType":"YulIf","src":"16415:52:17"},{"nativeSrc":"16476:29:17","nodeType":"YulVariableDeclaration","src":"16476:29:17","value":{"arguments":[{"name":"headStart","nativeSrc":"16495:9:17","nodeType":"YulIdentifier","src":"16495:9:17"}],"functionName":{"name":"mload","nativeSrc":"16489:5:17","nodeType":"YulIdentifier","src":"16489:5:17"},"nativeSrc":"16489:16:17","nodeType":"YulFunctionCall","src":"16489:16:17"},"variables":[{"name":"value","nativeSrc":"16480:5:17","nodeType":"YulTypedName","src":"16480:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"16539:5:17","nodeType":"YulIdentifier","src":"16539:5:17"}],"functionName":{"name":"validator_revert_address","nativeSrc":"16514:24:17","nodeType":"YulIdentifier","src":"16514:24:17"},"nativeSrc":"16514:31:17","nodeType":"YulFunctionCall","src":"16514:31:17"},"nativeSrc":"16514:31:17","nodeType":"YulExpressionStatement","src":"16514:31:17"},{"nativeSrc":"16554:15:17","nodeType":"YulAssignment","src":"16554:15:17","value":{"name":"value","nativeSrc":"16564:5:17","nodeType":"YulIdentifier","src":"16564:5:17"},"variableNames":[{"name":"value0","nativeSrc":"16554:6:17","nodeType":"YulIdentifier","src":"16554:6:17"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nativeSrc":"16324:251:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16371:9:17","nodeType":"YulTypedName","src":"16371:9:17","type":""},{"name":"dataEnd","nativeSrc":"16382:7:17","nodeType":"YulTypedName","src":"16382:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"16394:6:17","nodeType":"YulTypedName","src":"16394:6:17","type":""}],"src":"16324:251:17"},{"body":{"nativeSrc":"16737:214:17","nodeType":"YulBlock","src":"16737:214:17","statements":[{"nativeSrc":"16747:26:17","nodeType":"YulAssignment","src":"16747:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"16759:9:17","nodeType":"YulIdentifier","src":"16759:9:17"},{"kind":"number","nativeSrc":"16770:2:17","nodeType":"YulLiteral","src":"16770:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"16755:3:17","nodeType":"YulIdentifier","src":"16755:3:17"},"nativeSrc":"16755:18:17","nodeType":"YulFunctionCall","src":"16755:18:17"},"variableNames":[{"name":"tail","nativeSrc":"16747:4:17","nodeType":"YulIdentifier","src":"16747:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"16789:9:17","nodeType":"YulIdentifier","src":"16789:9:17"},{"arguments":[{"name":"value0","nativeSrc":"16804:6:17","nodeType":"YulIdentifier","src":"16804:6:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"16820:3:17","nodeType":"YulLiteral","src":"16820:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"16825:1:17","nodeType":"YulLiteral","src":"16825:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"16816:3:17","nodeType":"YulIdentifier","src":"16816:3:17"},"nativeSrc":"16816:11:17","nodeType":"YulFunctionCall","src":"16816:11:17"},{"kind":"number","nativeSrc":"16829:1:17","nodeType":"YulLiteral","src":"16829:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"16812:3:17","nodeType":"YulIdentifier","src":"16812:3:17"},"nativeSrc":"16812:19:17","nodeType":"YulFunctionCall","src":"16812:19:17"}],"functionName":{"name":"and","nativeSrc":"16800:3:17","nodeType":"YulIdentifier","src":"16800:3:17"},"nativeSrc":"16800:32:17","nodeType":"YulFunctionCall","src":"16800:32:17"}],"functionName":{"name":"mstore","nativeSrc":"16782:6:17","nodeType":"YulIdentifier","src":"16782:6:17"},"nativeSrc":"16782:51:17","nodeType":"YulFunctionCall","src":"16782:51:17"},"nativeSrc":"16782:51:17","nodeType":"YulExpressionStatement","src":"16782:51:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16853:9:17","nodeType":"YulIdentifier","src":"16853:9:17"},{"kind":"number","nativeSrc":"16864:2:17","nodeType":"YulLiteral","src":"16864:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"16849:3:17","nodeType":"YulIdentifier","src":"16849:3:17"},"nativeSrc":"16849:18:17","nodeType":"YulFunctionCall","src":"16849:18:17"},{"arguments":[{"name":"value1","nativeSrc":"16873:6:17","nodeType":"YulIdentifier","src":"16873:6:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"16889:3:17","nodeType":"YulLiteral","src":"16889:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"16894:1:17","nodeType":"YulLiteral","src":"16894:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"16885:3:17","nodeType":"YulIdentifier","src":"16885:3:17"},"nativeSrc":"16885:11:17","nodeType":"YulFunctionCall","src":"16885:11:17"},{"kind":"number","nativeSrc":"16898:1:17","nodeType":"YulLiteral","src":"16898:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"16881:3:17","nodeType":"YulIdentifier","src":"16881:3:17"},"nativeSrc":"16881:19:17","nodeType":"YulFunctionCall","src":"16881:19:17"}],"functionName":{"name":"and","nativeSrc":"16869:3:17","nodeType":"YulIdentifier","src":"16869:3:17"},"nativeSrc":"16869:32:17","nodeType":"YulFunctionCall","src":"16869:32:17"}],"functionName":{"name":"mstore","nativeSrc":"16842:6:17","nodeType":"YulIdentifier","src":"16842:6:17"},"nativeSrc":"16842:60:17","nodeType":"YulFunctionCall","src":"16842:60:17"},"nativeSrc":"16842:60:17","nodeType":"YulExpressionStatement","src":"16842:60:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"16922:9:17","nodeType":"YulIdentifier","src":"16922:9:17"},{"kind":"number","nativeSrc":"16933:2:17","nodeType":"YulLiteral","src":"16933:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"16918:3:17","nodeType":"YulIdentifier","src":"16918:3:17"},"nativeSrc":"16918:18:17","nodeType":"YulFunctionCall","src":"16918:18:17"},{"name":"value2","nativeSrc":"16938:6:17","nodeType":"YulIdentifier","src":"16938:6:17"}],"functionName":{"name":"mstore","nativeSrc":"16911:6:17","nodeType":"YulIdentifier","src":"16911:6:17"},"nativeSrc":"16911:34:17","nodeType":"YulFunctionCall","src":"16911:34:17"},"nativeSrc":"16911:34:17","nodeType":"YulExpressionStatement","src":"16911:34:17"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"16580:371:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"16690:9:17","nodeType":"YulTypedName","src":"16690:9:17","type":""},{"name":"value2","nativeSrc":"16701:6:17","nodeType":"YulTypedName","src":"16701:6:17","type":""},{"name":"value1","nativeSrc":"16709:6:17","nodeType":"YulTypedName","src":"16709:6:17","type":""},{"name":"value0","nativeSrc":"16717:6:17","nodeType":"YulTypedName","src":"16717:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"16728:4:17","nodeType":"YulTypedName","src":"16728:4:17","type":""}],"src":"16580:371:17"},{"body":{"nativeSrc":"17085:145:17","nodeType":"YulBlock","src":"17085:145:17","statements":[{"nativeSrc":"17095:26:17","nodeType":"YulAssignment","src":"17095:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"17107:9:17","nodeType":"YulIdentifier","src":"17107:9:17"},{"kind":"number","nativeSrc":"17118:2:17","nodeType":"YulLiteral","src":"17118:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"17103:3:17","nodeType":"YulIdentifier","src":"17103:3:17"},"nativeSrc":"17103:18:17","nodeType":"YulFunctionCall","src":"17103:18:17"},"variableNames":[{"name":"tail","nativeSrc":"17095:4:17","nodeType":"YulIdentifier","src":"17095:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"17137:9:17","nodeType":"YulIdentifier","src":"17137:9:17"},{"arguments":[{"name":"value0","nativeSrc":"17152:6:17","nodeType":"YulIdentifier","src":"17152:6:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"17168:3:17","nodeType":"YulLiteral","src":"17168:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"17173:1:17","nodeType":"YulLiteral","src":"17173:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"17164:3:17","nodeType":"YulIdentifier","src":"17164:3:17"},"nativeSrc":"17164:11:17","nodeType":"YulFunctionCall","src":"17164:11:17"},{"kind":"number","nativeSrc":"17177:1:17","nodeType":"YulLiteral","src":"17177:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"17160:3:17","nodeType":"YulIdentifier","src":"17160:3:17"},"nativeSrc":"17160:19:17","nodeType":"YulFunctionCall","src":"17160:19:17"}],"functionName":{"name":"and","nativeSrc":"17148:3:17","nodeType":"YulIdentifier","src":"17148:3:17"},"nativeSrc":"17148:32:17","nodeType":"YulFunctionCall","src":"17148:32:17"}],"functionName":{"name":"mstore","nativeSrc":"17130:6:17","nodeType":"YulIdentifier","src":"17130:6:17"},"nativeSrc":"17130:51:17","nodeType":"YulFunctionCall","src":"17130:51:17"},"nativeSrc":"17130:51:17","nodeType":"YulExpressionStatement","src":"17130:51:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17201:9:17","nodeType":"YulIdentifier","src":"17201:9:17"},{"kind":"number","nativeSrc":"17212:2:17","nodeType":"YulLiteral","src":"17212:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"17197:3:17","nodeType":"YulIdentifier","src":"17197:3:17"},"nativeSrc":"17197:18:17","nodeType":"YulFunctionCall","src":"17197:18:17"},{"name":"value1","nativeSrc":"17217:6:17","nodeType":"YulIdentifier","src":"17217:6:17"}],"functionName":{"name":"mstore","nativeSrc":"17190:6:17","nodeType":"YulIdentifier","src":"17190:6:17"},"nativeSrc":"17190:34:17","nodeType":"YulFunctionCall","src":"17190:34:17"},"nativeSrc":"17190:34:17","nodeType":"YulExpressionStatement","src":"17190:34:17"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"16956:274:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17046:9:17","nodeType":"YulTypedName","src":"17046:9:17","type":""},{"name":"value1","nativeSrc":"17057:6:17","nodeType":"YulTypedName","src":"17057:6:17","type":""},{"name":"value0","nativeSrc":"17065:6:17","nodeType":"YulTypedName","src":"17065:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"17076:4:17","nodeType":"YulTypedName","src":"17076:4:17","type":""}],"src":"16956:274:17"},{"body":{"nativeSrc":"17313:167:17","nodeType":"YulBlock","src":"17313:167:17","statements":[{"body":{"nativeSrc":"17359:16:17","nodeType":"YulBlock","src":"17359:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"17368:1:17","nodeType":"YulLiteral","src":"17368:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"17371:1:17","nodeType":"YulLiteral","src":"17371:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"17361:6:17","nodeType":"YulIdentifier","src":"17361:6:17"},"nativeSrc":"17361:12:17","nodeType":"YulFunctionCall","src":"17361:12:17"},"nativeSrc":"17361:12:17","nodeType":"YulExpressionStatement","src":"17361:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"17334:7:17","nodeType":"YulIdentifier","src":"17334:7:17"},{"name":"headStart","nativeSrc":"17343:9:17","nodeType":"YulIdentifier","src":"17343:9:17"}],"functionName":{"name":"sub","nativeSrc":"17330:3:17","nodeType":"YulIdentifier","src":"17330:3:17"},"nativeSrc":"17330:23:17","nodeType":"YulFunctionCall","src":"17330:23:17"},{"kind":"number","nativeSrc":"17355:2:17","nodeType":"YulLiteral","src":"17355:2:17","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"17326:3:17","nodeType":"YulIdentifier","src":"17326:3:17"},"nativeSrc":"17326:32:17","nodeType":"YulFunctionCall","src":"17326:32:17"},"nativeSrc":"17323:52:17","nodeType":"YulIf","src":"17323:52:17"},{"nativeSrc":"17384:29:17","nodeType":"YulVariableDeclaration","src":"17384:29:17","value":{"arguments":[{"name":"headStart","nativeSrc":"17403:9:17","nodeType":"YulIdentifier","src":"17403:9:17"}],"functionName":{"name":"mload","nativeSrc":"17397:5:17","nodeType":"YulIdentifier","src":"17397:5:17"},"nativeSrc":"17397:16:17","nodeType":"YulFunctionCall","src":"17397:16:17"},"variables":[{"name":"value","nativeSrc":"17388:5:17","nodeType":"YulTypedName","src":"17388:5:17","type":""}]},{"expression":{"arguments":[{"name":"value","nativeSrc":"17444:5:17","nodeType":"YulIdentifier","src":"17444:5:17"}],"functionName":{"name":"validator_revert_bool","nativeSrc":"17422:21:17","nodeType":"YulIdentifier","src":"17422:21:17"},"nativeSrc":"17422:28:17","nodeType":"YulFunctionCall","src":"17422:28:17"},"nativeSrc":"17422:28:17","nodeType":"YulExpressionStatement","src":"17422:28:17"},{"nativeSrc":"17459:15:17","nodeType":"YulAssignment","src":"17459:15:17","value":{"name":"value","nativeSrc":"17469:5:17","nodeType":"YulIdentifier","src":"17469:5:17"},"variableNames":[{"name":"value0","nativeSrc":"17459:6:17","nodeType":"YulIdentifier","src":"17459:6:17"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"17235:245:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17279:9:17","nodeType":"YulTypedName","src":"17279:9:17","type":""},{"name":"dataEnd","nativeSrc":"17290:7:17","nodeType":"YulTypedName","src":"17290:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"17302:6:17","nodeType":"YulTypedName","src":"17302:6:17","type":""}],"src":"17235:245:17"},{"body":{"nativeSrc":"17692:222:17","nodeType":"YulBlock","src":"17692:222:17","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"17709:9:17","nodeType":"YulIdentifier","src":"17709:9:17"},{"kind":"number","nativeSrc":"17720:2:17","nodeType":"YulLiteral","src":"17720:2:17","type":"","value":"96"}],"functionName":{"name":"mstore","nativeSrc":"17702:6:17","nodeType":"YulIdentifier","src":"17702:6:17"},"nativeSrc":"17702:21:17","nodeType":"YulFunctionCall","src":"17702:21:17"},"nativeSrc":"17702:21:17","nodeType":"YulExpressionStatement","src":"17702:21:17"},{"nativeSrc":"17732:64:17","nodeType":"YulAssignment","src":"17732:64:17","value":{"arguments":[{"name":"value0","nativeSrc":"17769:6:17","nodeType":"YulIdentifier","src":"17769:6:17"},{"arguments":[{"name":"headStart","nativeSrc":"17781:9:17","nodeType":"YulIdentifier","src":"17781:9:17"},{"kind":"number","nativeSrc":"17792:2:17","nodeType":"YulLiteral","src":"17792:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"17777:3:17","nodeType":"YulIdentifier","src":"17777:3:17"},"nativeSrc":"17777:18:17","nodeType":"YulFunctionCall","src":"17777:18:17"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nativeSrc":"17740:28:17","nodeType":"YulIdentifier","src":"17740:28:17"},"nativeSrc":"17740:56:17","nodeType":"YulFunctionCall","src":"17740:56:17"},"variableNames":[{"name":"tail","nativeSrc":"17732:4:17","nodeType":"YulIdentifier","src":"17732:4:17"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17816:9:17","nodeType":"YulIdentifier","src":"17816:9:17"},{"kind":"number","nativeSrc":"17827:2:17","nodeType":"YulLiteral","src":"17827:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"17812:3:17","nodeType":"YulIdentifier","src":"17812:3:17"},"nativeSrc":"17812:18:17","nodeType":"YulFunctionCall","src":"17812:18:17"},{"arguments":[{"name":"value1","nativeSrc":"17836:6:17","nodeType":"YulIdentifier","src":"17836:6:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"17852:3:17","nodeType":"YulLiteral","src":"17852:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"17857:1:17","nodeType":"YulLiteral","src":"17857:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"17848:3:17","nodeType":"YulIdentifier","src":"17848:3:17"},"nativeSrc":"17848:11:17","nodeType":"YulFunctionCall","src":"17848:11:17"},{"kind":"number","nativeSrc":"17861:1:17","nodeType":"YulLiteral","src":"17861:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"17844:3:17","nodeType":"YulIdentifier","src":"17844:3:17"},"nativeSrc":"17844:19:17","nodeType":"YulFunctionCall","src":"17844:19:17"}],"functionName":{"name":"and","nativeSrc":"17832:3:17","nodeType":"YulIdentifier","src":"17832:3:17"},"nativeSrc":"17832:32:17","nodeType":"YulFunctionCall","src":"17832:32:17"}],"functionName":{"name":"mstore","nativeSrc":"17805:6:17","nodeType":"YulIdentifier","src":"17805:6:17"},"nativeSrc":"17805:60:17","nodeType":"YulFunctionCall","src":"17805:60:17"},"nativeSrc":"17805:60:17","nodeType":"YulExpressionStatement","src":"17805:60:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"17885:9:17","nodeType":"YulIdentifier","src":"17885:9:17"},{"kind":"number","nativeSrc":"17896:2:17","nodeType":"YulLiteral","src":"17896:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"17881:3:17","nodeType":"YulIdentifier","src":"17881:3:17"},"nativeSrc":"17881:18:17","nodeType":"YulFunctionCall","src":"17881:18:17"},{"name":"value2","nativeSrc":"17901:6:17","nodeType":"YulIdentifier","src":"17901:6:17"}],"functionName":{"name":"mstore","nativeSrc":"17874:6:17","nodeType":"YulIdentifier","src":"17874:6:17"},"nativeSrc":"17874:34:17","nodeType":"YulFunctionCall","src":"17874:34:17"},"nativeSrc":"17874:34:17","nodeType":"YulExpressionStatement","src":"17874:34:17"}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_uint256__fromStack_reversed","nativeSrc":"17485:429:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"17645:9:17","nodeType":"YulTypedName","src":"17645:9:17","type":""},{"name":"value2","nativeSrc":"17656:6:17","nodeType":"YulTypedName","src":"17656:6:17","type":""},{"name":"value1","nativeSrc":"17664:6:17","nodeType":"YulTypedName","src":"17664:6:17","type":""},{"name":"value0","nativeSrc":"17672:6:17","nodeType":"YulTypedName","src":"17672:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"17683:4:17","nodeType":"YulTypedName","src":"17683:4:17","type":""}],"src":"17485:429:17"},{"body":{"nativeSrc":"18104:232:17","nodeType":"YulBlock","src":"18104:232:17","statements":[{"nativeSrc":"18114:27:17","nodeType":"YulAssignment","src":"18114:27:17","value":{"arguments":[{"name":"headStart","nativeSrc":"18126:9:17","nodeType":"YulIdentifier","src":"18126:9:17"},{"kind":"number","nativeSrc":"18137:3:17","nodeType":"YulLiteral","src":"18137:3:17","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"18122:3:17","nodeType":"YulIdentifier","src":"18122:3:17"},"nativeSrc":"18122:19:17","nodeType":"YulFunctionCall","src":"18122:19:17"},"variableNames":[{"name":"tail","nativeSrc":"18114:4:17","nodeType":"YulIdentifier","src":"18114:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"18157:9:17","nodeType":"YulIdentifier","src":"18157:9:17"},{"arguments":[{"name":"value0","nativeSrc":"18172:6:17","nodeType":"YulIdentifier","src":"18172:6:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"18188:3:17","nodeType":"YulLiteral","src":"18188:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"18193:1:17","nodeType":"YulLiteral","src":"18193:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"18184:3:17","nodeType":"YulIdentifier","src":"18184:3:17"},"nativeSrc":"18184:11:17","nodeType":"YulFunctionCall","src":"18184:11:17"},{"kind":"number","nativeSrc":"18197:1:17","nodeType":"YulLiteral","src":"18197:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"18180:3:17","nodeType":"YulIdentifier","src":"18180:3:17"},"nativeSrc":"18180:19:17","nodeType":"YulFunctionCall","src":"18180:19:17"}],"functionName":{"name":"and","nativeSrc":"18168:3:17","nodeType":"YulIdentifier","src":"18168:3:17"},"nativeSrc":"18168:32:17","nodeType":"YulFunctionCall","src":"18168:32:17"}],"functionName":{"name":"mstore","nativeSrc":"18150:6:17","nodeType":"YulIdentifier","src":"18150:6:17"},"nativeSrc":"18150:51:17","nodeType":"YulFunctionCall","src":"18150:51:17"},"nativeSrc":"18150:51:17","nodeType":"YulExpressionStatement","src":"18150:51:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"18221:9:17","nodeType":"YulIdentifier","src":"18221:9:17"},{"kind":"number","nativeSrc":"18232:2:17","nodeType":"YulLiteral","src":"18232:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"18217:3:17","nodeType":"YulIdentifier","src":"18217:3:17"},"nativeSrc":"18217:18:17","nodeType":"YulFunctionCall","src":"18217:18:17"},{"name":"value1","nativeSrc":"18237:6:17","nodeType":"YulIdentifier","src":"18237:6:17"}],"functionName":{"name":"mstore","nativeSrc":"18210:6:17","nodeType":"YulIdentifier","src":"18210:6:17"},"nativeSrc":"18210:34:17","nodeType":"YulFunctionCall","src":"18210:34:17"},"nativeSrc":"18210:34:17","nodeType":"YulExpressionStatement","src":"18210:34:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"18264:9:17","nodeType":"YulIdentifier","src":"18264:9:17"},{"kind":"number","nativeSrc":"18275:2:17","nodeType":"YulLiteral","src":"18275:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"18260:3:17","nodeType":"YulIdentifier","src":"18260:3:17"},"nativeSrc":"18260:18:17","nodeType":"YulFunctionCall","src":"18260:18:17"},{"name":"value2","nativeSrc":"18280:6:17","nodeType":"YulIdentifier","src":"18280:6:17"}],"functionName":{"name":"mstore","nativeSrc":"18253:6:17","nodeType":"YulIdentifier","src":"18253:6:17"},"nativeSrc":"18253:34:17","nodeType":"YulFunctionCall","src":"18253:34:17"},"nativeSrc":"18253:34:17","nodeType":"YulExpressionStatement","src":"18253:34:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"18307:9:17","nodeType":"YulIdentifier","src":"18307:9:17"},{"kind":"number","nativeSrc":"18318:2:17","nodeType":"YulLiteral","src":"18318:2:17","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"18303:3:17","nodeType":"YulIdentifier","src":"18303:3:17"},"nativeSrc":"18303:18:17","nodeType":"YulFunctionCall","src":"18303:18:17"},{"name":"value3","nativeSrc":"18323:6:17","nodeType":"YulIdentifier","src":"18323:6:17"}],"functionName":{"name":"mstore","nativeSrc":"18296:6:17","nodeType":"YulIdentifier","src":"18296:6:17"},"nativeSrc":"18296:34:17","nodeType":"YulFunctionCall","src":"18296:34:17"},"nativeSrc":"18296:34:17","nodeType":"YulExpressionStatement","src":"18296:34:17"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"17919:417:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18049:9:17","nodeType":"YulTypedName","src":"18049:9:17","type":""},{"name":"value3","nativeSrc":"18060:6:17","nodeType":"YulTypedName","src":"18060:6:17","type":""},{"name":"value2","nativeSrc":"18068:6:17","nodeType":"YulTypedName","src":"18068:6:17","type":""},{"name":"value1","nativeSrc":"18076:6:17","nodeType":"YulTypedName","src":"18076:6:17","type":""},{"name":"value0","nativeSrc":"18084:6:17","nodeType":"YulTypedName","src":"18084:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"18095:4:17","nodeType":"YulTypedName","src":"18095:4:17","type":""}],"src":"17919:417:17"},{"body":{"nativeSrc":"18422:103:17","nodeType":"YulBlock","src":"18422:103:17","statements":[{"body":{"nativeSrc":"18468:16:17","nodeType":"YulBlock","src":"18468:16:17","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"18477:1:17","nodeType":"YulLiteral","src":"18477:1:17","type":"","value":"0"},{"kind":"number","nativeSrc":"18480:1:17","nodeType":"YulLiteral","src":"18480:1:17","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"18470:6:17","nodeType":"YulIdentifier","src":"18470:6:17"},"nativeSrc":"18470:12:17","nodeType":"YulFunctionCall","src":"18470:12:17"},"nativeSrc":"18470:12:17","nodeType":"YulExpressionStatement","src":"18470:12:17"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"18443:7:17","nodeType":"YulIdentifier","src":"18443:7:17"},{"name":"headStart","nativeSrc":"18452:9:17","nodeType":"YulIdentifier","src":"18452:9:17"}],"functionName":{"name":"sub","nativeSrc":"18439:3:17","nodeType":"YulIdentifier","src":"18439:3:17"},"nativeSrc":"18439:23:17","nodeType":"YulFunctionCall","src":"18439:23:17"},{"kind":"number","nativeSrc":"18464:2:17","nodeType":"YulLiteral","src":"18464:2:17","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"18435:3:17","nodeType":"YulIdentifier","src":"18435:3:17"},"nativeSrc":"18435:32:17","nodeType":"YulFunctionCall","src":"18435:32:17"},"nativeSrc":"18432:52:17","nodeType":"YulIf","src":"18432:52:17"},{"nativeSrc":"18493:26:17","nodeType":"YulAssignment","src":"18493:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"18509:9:17","nodeType":"YulIdentifier","src":"18509:9:17"}],"functionName":{"name":"mload","nativeSrc":"18503:5:17","nodeType":"YulIdentifier","src":"18503:5:17"},"nativeSrc":"18503:16:17","nodeType":"YulFunctionCall","src":"18503:16:17"},"variableNames":[{"name":"value0","nativeSrc":"18493:6:17","nodeType":"YulIdentifier","src":"18493:6:17"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nativeSrc":"18341:184:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18388:9:17","nodeType":"YulTypedName","src":"18388:9:17","type":""},{"name":"dataEnd","nativeSrc":"18399:7:17","nodeType":"YulTypedName","src":"18399:7:17","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"18411:6:17","nodeType":"YulTypedName","src":"18411:6:17","type":""}],"src":"18341:184:17"},{"body":{"nativeSrc":"18631:102:17","nodeType":"YulBlock","src":"18631:102:17","statements":[{"nativeSrc":"18641:26:17","nodeType":"YulAssignment","src":"18641:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"18653:9:17","nodeType":"YulIdentifier","src":"18653:9:17"},{"kind":"number","nativeSrc":"18664:2:17","nodeType":"YulLiteral","src":"18664:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"18649:3:17","nodeType":"YulIdentifier","src":"18649:3:17"},"nativeSrc":"18649:18:17","nodeType":"YulFunctionCall","src":"18649:18:17"},"variableNames":[{"name":"tail","nativeSrc":"18641:4:17","nodeType":"YulIdentifier","src":"18641:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"18683:9:17","nodeType":"YulIdentifier","src":"18683:9:17"},{"arguments":[{"name":"value0","nativeSrc":"18698:6:17","nodeType":"YulIdentifier","src":"18698:6:17"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"18714:3:17","nodeType":"YulLiteral","src":"18714:3:17","type":"","value":"160"},{"kind":"number","nativeSrc":"18719:1:17","nodeType":"YulLiteral","src":"18719:1:17","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"18710:3:17","nodeType":"YulIdentifier","src":"18710:3:17"},"nativeSrc":"18710:11:17","nodeType":"YulFunctionCall","src":"18710:11:17"},{"kind":"number","nativeSrc":"18723:1:17","nodeType":"YulLiteral","src":"18723:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"18706:3:17","nodeType":"YulIdentifier","src":"18706:3:17"},"nativeSrc":"18706:19:17","nodeType":"YulFunctionCall","src":"18706:19:17"}],"functionName":{"name":"and","nativeSrc":"18694:3:17","nodeType":"YulIdentifier","src":"18694:3:17"},"nativeSrc":"18694:32:17","nodeType":"YulFunctionCall","src":"18694:32:17"}],"functionName":{"name":"mstore","nativeSrc":"18676:6:17","nodeType":"YulIdentifier","src":"18676:6:17"},"nativeSrc":"18676:51:17","nodeType":"YulFunctionCall","src":"18676:51:17"},"nativeSrc":"18676:51:17","nodeType":"YulExpressionStatement","src":"18676:51:17"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"18530:203:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18600:9:17","nodeType":"YulTypedName","src":"18600:9:17","type":""},{"name":"value0","nativeSrc":"18611:6:17","nodeType":"YulTypedName","src":"18611:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"18622:4:17","nodeType":"YulTypedName","src":"18622:4:17","type":""}],"src":"18530:203:17"},{"body":{"nativeSrc":"18867:119:17","nodeType":"YulBlock","src":"18867:119:17","statements":[{"nativeSrc":"18877:26:17","nodeType":"YulAssignment","src":"18877:26:17","value":{"arguments":[{"name":"headStart","nativeSrc":"18889:9:17","nodeType":"YulIdentifier","src":"18889:9:17"},{"kind":"number","nativeSrc":"18900:2:17","nodeType":"YulLiteral","src":"18900:2:17","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"18885:3:17","nodeType":"YulIdentifier","src":"18885:3:17"},"nativeSrc":"18885:18:17","nodeType":"YulFunctionCall","src":"18885:18:17"},"variableNames":[{"name":"tail","nativeSrc":"18877:4:17","nodeType":"YulIdentifier","src":"18877:4:17"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"18919:9:17","nodeType":"YulIdentifier","src":"18919:9:17"},{"name":"value0","nativeSrc":"18930:6:17","nodeType":"YulIdentifier","src":"18930:6:17"}],"functionName":{"name":"mstore","nativeSrc":"18912:6:17","nodeType":"YulIdentifier","src":"18912:6:17"},"nativeSrc":"18912:25:17","nodeType":"YulFunctionCall","src":"18912:25:17"},"nativeSrc":"18912:25:17","nodeType":"YulExpressionStatement","src":"18912:25:17"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"18957:9:17","nodeType":"YulIdentifier","src":"18957:9:17"},{"kind":"number","nativeSrc":"18968:2:17","nodeType":"YulLiteral","src":"18968:2:17","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"18953:3:17","nodeType":"YulIdentifier","src":"18953:3:17"},"nativeSrc":"18953:18:17","nodeType":"YulFunctionCall","src":"18953:18:17"},{"name":"value1","nativeSrc":"18973:6:17","nodeType":"YulIdentifier","src":"18973:6:17"}],"functionName":{"name":"mstore","nativeSrc":"18946:6:17","nodeType":"YulIdentifier","src":"18946:6:17"},"nativeSrc":"18946:34:17","nodeType":"YulFunctionCall","src":"18946:34:17"},"nativeSrc":"18946:34:17","nodeType":"YulExpressionStatement","src":"18946:34:17"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"18738:248:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"18828:9:17","nodeType":"YulTypedName","src":"18828:9:17","type":""},{"name":"value1","nativeSrc":"18839:6:17","nodeType":"YulTypedName","src":"18839:6:17","type":""},{"name":"value0","nativeSrc":"18847:6:17","nodeType":"YulTypedName","src":"18847:6:17","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"18858:4:17","nodeType":"YulTypedName","src":"18858:4:17","type":""}],"src":"18738:248:17"},{"body":{"nativeSrc":"19038:88:17","nodeType":"YulBlock","src":"19038:88:17","statements":[{"body":{"nativeSrc":"19069:22:17","nodeType":"YulBlock","src":"19069:22:17","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"19071:16:17","nodeType":"YulIdentifier","src":"19071:16:17"},"nativeSrc":"19071:18:17","nodeType":"YulFunctionCall","src":"19071:18:17"},"nativeSrc":"19071:18:17","nodeType":"YulExpressionStatement","src":"19071:18:17"}]},"condition":{"arguments":[{"name":"value","nativeSrc":"19054:5:17","nodeType":"YulIdentifier","src":"19054:5:17"},{"arguments":[{"kind":"number","nativeSrc":"19065:1:17","nodeType":"YulLiteral","src":"19065:1:17","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"19061:3:17","nodeType":"YulIdentifier","src":"19061:3:17"},"nativeSrc":"19061:6:17","nodeType":"YulFunctionCall","src":"19061:6:17"}],"functionName":{"name":"eq","nativeSrc":"19051:2:17","nodeType":"YulIdentifier","src":"19051:2:17"},"nativeSrc":"19051:17:17","nodeType":"YulFunctionCall","src":"19051:17:17"},"nativeSrc":"19048:43:17","nodeType":"YulIf","src":"19048:43:17"},{"nativeSrc":"19100:20:17","nodeType":"YulAssignment","src":"19100:20:17","value":{"arguments":[{"name":"value","nativeSrc":"19111:5:17","nodeType":"YulIdentifier","src":"19111:5:17"},{"kind":"number","nativeSrc":"19118:1:17","nodeType":"YulLiteral","src":"19118:1:17","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"19107:3:17","nodeType":"YulIdentifier","src":"19107:3:17"},"nativeSrc":"19107:13:17","nodeType":"YulFunctionCall","src":"19107:13:17"},"variableNames":[{"name":"ret","nativeSrc":"19100:3:17","nodeType":"YulIdentifier","src":"19100:3:17"}]}]},"name":"increment_t_uint256","nativeSrc":"18991:135:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nativeSrc":"19020:5:17","nodeType":"YulTypedName","src":"19020:5:17","type":""}],"returnVariables":[{"name":"ret","nativeSrc":"19030:3:17","nodeType":"YulTypedName","src":"19030:3:17","type":""}],"src":"18991:135:17"},{"body":{"nativeSrc":"19268:150:17","nodeType":"YulBlock","src":"19268:150:17","statements":[{"nativeSrc":"19278:27:17","nodeType":"YulVariableDeclaration","src":"19278:27:17","value":{"arguments":[{"name":"value0","nativeSrc":"19298:6:17","nodeType":"YulIdentifier","src":"19298:6:17"}],"functionName":{"name":"mload","nativeSrc":"19292:5:17","nodeType":"YulIdentifier","src":"19292:5:17"},"nativeSrc":"19292:13:17","nodeType":"YulFunctionCall","src":"19292:13:17"},"variables":[{"name":"length","nativeSrc":"19282:6:17","nodeType":"YulTypedName","src":"19282:6:17","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nativeSrc":"19353:6:17","nodeType":"YulIdentifier","src":"19353:6:17"},{"kind":"number","nativeSrc":"19361:4:17","nodeType":"YulLiteral","src":"19361:4:17","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"19349:3:17","nodeType":"YulIdentifier","src":"19349:3:17"},"nativeSrc":"19349:17:17","nodeType":"YulFunctionCall","src":"19349:17:17"},{"name":"pos","nativeSrc":"19368:3:17","nodeType":"YulIdentifier","src":"19368:3:17"},{"name":"length","nativeSrc":"19373:6:17","nodeType":"YulIdentifier","src":"19373:6:17"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nativeSrc":"19314:34:17","nodeType":"YulIdentifier","src":"19314:34:17"},"nativeSrc":"19314:66:17","nodeType":"YulFunctionCall","src":"19314:66:17"},"nativeSrc":"19314:66:17","nodeType":"YulExpressionStatement","src":"19314:66:17"},{"nativeSrc":"19389:23:17","nodeType":"YulAssignment","src":"19389:23:17","value":{"arguments":[{"name":"pos","nativeSrc":"19400:3:17","nodeType":"YulIdentifier","src":"19400:3:17"},{"name":"length","nativeSrc":"19405:6:17","nodeType":"YulIdentifier","src":"19405:6:17"}],"functionName":{"name":"add","nativeSrc":"19396:3:17","nodeType":"YulIdentifier","src":"19396:3:17"},"nativeSrc":"19396:16:17","nodeType":"YulFunctionCall","src":"19396:16:17"},"variableNames":[{"name":"end","nativeSrc":"19389:3:17","nodeType":"YulIdentifier","src":"19389:3:17"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nativeSrc":"19131:287:17","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nativeSrc":"19244:3:17","nodeType":"YulTypedName","src":"19244:3:17","type":""},{"name":"value0","nativeSrc":"19249:6:17","nodeType":"YulTypedName","src":"19249:6:17","type":""}],"returnVariables":[{"name":"end","nativeSrc":"19260:3:17","nodeType":"YulTypedName","src":"19260:3:17","type":""}],"src":"19131:287:17"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := 0\n        value_1 := calldataload(add(headStart, 32))\n        value1 := value_1\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_uint256_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        let dst := allocate_memory(array_allocation_size_array_uint256_dyn(length))\n        let array_1 := dst\n        mstore(dst, length)\n        dst := add(dst, 0x20)\n        let srcEnd := add(add(offset, shl(5, length)), 0x20)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, 0x20)\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            let value := 0\n            value := calldataload(src)\n            mstore(dst, value)\n            dst := add(dst, 0x20)\n        }\n        array := array_1\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_array_bool_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        let dst := allocate_memory(array_allocation_size_array_uint256_dyn(length))\n        let array_1 := dst\n        mstore(dst, length)\n        dst := add(dst, 0x20)\n        let srcEnd := add(add(offset, shl(5, length)), 0x20)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, 0x20)\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            let value := calldataload(src)\n            validator_revert_bool(value)\n            mstore(dst, value)\n            dst := add(dst, 0x20)\n        }\n        array := array_1\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_bool_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 64))\n        if gt(offset_2, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_2), dataEnd)\n        let offset_3 := calldataload(add(headStart, 96))\n        if gt(offset_3, 0xffffffffffffffff) { revert(0, 0) }\n        value3 := abi_decode_array_uint256_dyn(add(headStart, offset_3), dataEnd)\n        let offset_4 := calldataload(add(headStart, 128))\n        if gt(offset_4, 0xffffffffffffffff) { revert(0, 0) }\n        value4 := abi_decode_array_bool_dyn(add(headStart, offset_4), dataEnd)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256t_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := 0\n        value := calldataload(headStart)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := 0\n        value_2 := calldataload(add(headStart, 64))\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := 0\n        value := calldataload(headStart)\n        value0 := value\n    }\n    function abi_decode_array_address_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        let dst := allocate_memory(array_allocation_size_array_uint256_dyn(length))\n        let array_1 := dst\n        mstore(dst, length)\n        dst := add(dst, 0x20)\n        let srcEnd := add(add(offset, shl(5, length)), 0x20)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, 0x20)\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            let value := calldataload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, 0x20)\n        }\n        array := array_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_array_address_dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_array_address_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_1)\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(length, 0x1f), not(31)), 32))\n        mstore(array, length)\n        if gt(add(add(_1, length), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, 32), add(_1, 32), length)\n        mstore(add(add(array, length), 32), 0)\n        value1 := array\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_array_address_dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function abi_encode_tuple_t_array$_t_bool_$dyn_memory_ptr__to_t_array$_t_bool_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let tail_1 := add(headStart, 32)\n        mstore(headStart, 32)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, 32)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, iszero(iszero(mload(srcPtr))))\n            pos := add(pos, 32)\n            srcPtr := add(srcPtr, 32)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_struct_ViewPermission(value, pos)\n    {\n        mstore(pos, mload(value))\n        mstore(add(pos, 0x20), mload(add(value, 0x20)))\n        mstore(add(pos, 0x40), iszero(iszero(mload(add(value, 0x40)))))\n    }\n    function abi_encode_tuple_t_struct$_ViewPermission_$3767_memory_ptr__to_t_struct$_ViewPermission_$3767_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        abi_encode_struct_ViewPermission(value0, headStart)\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_addresst_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        let value_1 := 0\n        value_1 := calldataload(add(headStart, 64))\n        value2 := value_1\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := 0\n        value := calldataload(headStart)\n        value0 := value\n        let value_1 := 0\n        value_1 := calldataload(add(headStart, 32))\n        value1 := value_1\n        let value_2 := 0\n        value_2 := calldataload(add(headStart, 64))\n        value2 := value_2\n        let value_3 := 0\n        value_3 := calldataload(add(headStart, 96))\n        value3 := value_3\n        let value_4 := calldataload(add(headStart, 128))\n        validator_revert_bool(value_4)\n        value4 := value_4\n    }\n    function abi_decode_tuple_t_addresst_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_ViewPermission_$3767_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let tail_1 := add(headStart, 32)\n        mstore(headStart, 32)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, 32)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            abi_encode_struct_ViewPermission(mload(srcPtr), pos)\n            pos := add(pos, 0x60)\n            srcPtr := add(srcPtr, 32)\n        }\n        tail := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        pos := add(pos, 0x20)\n        let srcPtr := add(value, 0x20)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, 0x20)\n            srcPtr := add(srcPtr, 0x20)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_struct$_ContentPurchaseInfo_$3440_memory_ptr__to_t_struct$_ContentPurchaseInfo_$3440_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let tail_1 := add(headStart, 224)\n        mstore(add(headStart, 32), mload(value0))\n        mstore(add(headStart, 64), mload(add(value0, 32)))\n        mstore(add(headStart, 96), iszero(iszero(mload(add(value0, 64)))))\n        let memberValue0 := mload(add(value0, 96))\n        mstore(add(headStart, 128), 0xc0)\n        let pos := tail_1\n        let length := mload(memberValue0)\n        mstore(tail_1, length)\n        pos := add(headStart, 256)\n        let srcPtr := add(memberValue0, 32)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, 32)\n            srcPtr := add(srcPtr, 32)\n        }\n        let memberValue0_1 := mload(add(value0, 128))\n        mstore(add(headStart, 160), add(sub(pos, headStart), not(31)))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_1, pos)\n        let memberValue0_2 := mload(add(value0, 160))\n        abi_encode_bool(memberValue0_2, add(headStart, 0xc0))\n        tail := tail_2\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function decrement_t_uint256(value) -> ret\n    {\n        if iszero(value) { panic_error_0x11() }\n        ret := add(value, not(0))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        tail := abi_encode_array_uint256_dyn(value0, add(headStart, 96))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n}","id":17,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"287":[{"length":32,"start":8579},{"length":32,"start":8620},{"length":32,"start":8984}]},"linkReferences":{},"object":"60806040526004361061019c5760003560e01c806370480275116100ec57806399ea24fe1161008a578063b303f53f11610064578063b303f53f146104b9578063b6f1d140146104e6578063b8e8f98e146104f9578063caae24b31461052657600080fd5b806399ea24fe14610448578063ad3cb1cc1461045b578063b1b105fe1461049957600080fd5b806386778641116100c657806386778641146103c65780638d13660e146103e65780638f0ff11b146104135780638fd3ab801461043357600080fd5b8063704802751461037157806376319190146103915780638456cb59146103b157600080fd5b806340033b3d11610159578063529e2b3211610133578063529e2b32146102ec57806352d1902d1461031957806354fd4d501461033c5780636d69fcaf1461035157600080fd5b806340033b3d146102865780634a200fa5146102b95780634f1ef286146102d957600080fd5b806305059571146101a157806309b952be146101d65780631785f53c146101f8578063240028e8146102185780633428cebb146102515780633f4ba83a14610271575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046128c4565b610546565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101f66101f1366004612a3b565b610722565b005b34801561020457600080fd5b506101f6610213366004612b22565b610952565b34801561022457600080fd5b506101c1610233366004612b22565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561025d57600080fd5b506101f661026c366004612b3f565b6109ed565b34801561027d57600080fd5b506101f6610ade565b34801561029257600080fd5b506101c16102a1366004612b77565b60009081526002602052604090206004015460ff1690565b3480156102c557600080fd5b506101f66102d4366004612bf7565b610b3e565b6101f66102e7366004612c70565b610e74565b3480156102f857600080fd5b5061030c610307366004612d1b565b610e93565b6040516101cd9190612d82565b34801561032557600080fd5b5061032e611286565b6040519081526020016101cd565b34801561034857600080fd5b5060065461032e565b34801561035d57600080fd5b506101f661036c366004612b22565b6112a3565b34801561037d57600080fd5b506101f661038c366004612b22565b61131f565b34801561039d57600080fd5b506101f66103ac366004612b22565b6113c0565b3480156103bd57600080fd5b506101f6611439565b3480156103d257600080fd5b506101f66103e1366004612b3f565b61149c565b3480156103f257600080fd5b506104066104013660046128c4565b611661565b6040516101cd9190612dc7565b34801561041f57600080fd5b506101f661042e366004612dea565b6116da565b34801561043f57600080fd5b506101f66118b0565b6101f6610456366004612e59565b6118dd565b34801561046757600080fd5b5061048c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190612ec5565b3480156104a557600080fd5b506101f66104b4366004612ef8565b611bc7565b3480156104c557600080fd5b506104d96104d4366004612f45565b611c5a565b6040516101cd9190612f7e565b6101f66104f4366004612b3f565b611d75565b34801561050557600080fd5b50610519610514366004612b77565b611fdc565b6040516101cd9190613013565b34801561053257600080fd5b506101c16105413660046128c4565b61207d565b3360009081526001602052604081205460ff1661057657604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03831660009081526003602090815260408083208584529091529020600281015460ff166105be5760405163fcd7a1b560e01b815260040160405180910390fd5b60008381526002602052604090206003015481546105dc91906130d4565b4211156105fc5760405163fcd7a1b560e01b815260040160405180910390fd5b600083815260026020819052604082200154908190036106545783856001600160a01b03166000805160206131cb833981519152600060405161064191815260200190565b60405180910390a360019250505061071c565b81600101546000036106795760405163fcd7a1b560e01b815260040160405180910390fd5b60018201805490600061068b836130e7565b919050555083856001600160a01b03166000805160206131cb83398151915284600101546040516106be91815260200190565b60405180910390a381600101546000036107155760028201805460ff1916905560405184906001600160a01b038716907f294e395c96ee31e4373f6b284b107e5341ffa80f2c53e582bc3cfb1f9efe500e90600090a35b6001925050505b92915050565b3360009081526001602052604090205460ff1661075257604051637bfa4b9f60e01b815260040160405180910390fd5b8351855114158061076557508251855114155b8061077257508151855114155b8061077f57508051855114155b1561079d5760405163512509d360e11b815260040160405180910390fd5b60005b855181101561094a578481815181106107bb576107bb6130fe565b6020026020010151600060020160008884815181106107dc576107dc6130fe565b602002602001015181526020019081526020016000206001018190555083818151811061080b5761080b6130fe565b60200260200101516000600201600088848151811061082c5761082c6130fe565b602002602001015181526020019081526020016000206002018190555082818151811061085b5761085b6130fe565b60200260200101516000600201600088848151811061087c5761087c6130fe565b60200260200101518152602001908152602001600020600301819055508181815181106108ab576108ab6130fe565b6020026020010151600060020160008884815181106108cc576108cc6130fe565b6020026020010151815260200190815260200160002060040160006101000a81548160ff02191690831515021790555085818151811061090e5761090e6130fe565b60200260200101517fa7c3f5f04f0c05ad82fcdf81039da5a01bf41ce2769b7b347afa43bb65e4426660405160405180910390a26001016107a0565b505050505050565b6000546001600160a01b0316331461097d576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166109a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9190a250565b3360009081526001602052604090205460ff16610a1d57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff16610a565760405163350b944160e11b815260040160405180910390fd5b60008381526002602090815260408083206001600160a01b0386168085529252909120829055610a955760008381526002602052604090206001018190555b816001600160a01b0316837f376716bd86293ff8b34061b9af3cac5116f15e0f2cbf689d822b6d6d7b1eeca983604051610ad191815260200190565b60405180910390a3505050565b6000546001600160a01b03163314610b09576040516330cd747160e01b815260040160405180910390fd5b6005805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6000610b48612137565b805490915060ff600160401b82041615906001600160401b0316600081158015610b6f5750825b90506000826001600160401b03166001148015610b8b5750303b155b905081158015610b99575080155b15610bb75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610be157845460ff60401b1916600160401b1785555b6001600160a01b038816610c085760405163d92e233d60e01b815260040160405180910390fd5b610c10612160565b610c18612168565b600080546001600160a01b0319166001600160a01b038a1617815560016006556005805460ff191690555b8751811015610d315760006001600160a01b0316888281518110610c6957610c696130fe565b60200260200101516001600160a01b031614610d29576001600060010160008a8481518110610c9a57610c9a6130fe565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550878181518110610ceb57610ceb6130fe565b60200260200101516001600160a01b03167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a25b600101610c43565b5060005b8651811015610e235760006001600160a01b0316878281518110610d5b57610d5b6130fe565b60200260200101516001600160a01b031614610e1b57600160006004016000898481518110610d8c57610d8c6130fe565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550868181518110610ddd57610ddd6130fe565b60200260200101516001600160a01b03167fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d760405160405180910390a25b600101610d35565b508315610e6a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610e7c612178565b610e858261221d565b610e8f828261224b565b5050565b3360009081526001602052604090205460609060ff16610ec657604051637bfa4b9f60e01b815260040160405180910390fd5b8151835114610ee85760405163512509d360e11b815260040160405180910390fd5b600083516001600160401b03811115610f0357610f036128f0565b604051908082528060200260200182016040528015610f2c578160200160208202803683370190505b50905060005b845181101561127e576000806003016000878481518110610f5557610f556130fe565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110610f9157610f916130fe565b6020026020010151815260200190815260200160002090508060020160009054906101000a900460ff16610fe9576000838381518110610fd357610fd36130fe565b9115156020928302919091019091015250611276565b60006002016000868481518110611002576110026130fe565b6020026020010151815260200190815260200160002060030154816000015461102b91906130d4565b421115611046576000838381518110610fd357610fd36130fe565b6000806002016000878581518110611060576110606130fe565b602002602001015181526020019081526020016000206002015490508060000361111257858381518110611096576110966130fe565b60200260200101518784815181106110b0576110b06130fe565b60200260200101516001600160a01b03166000805160206131cb83398151915260006040516110e191815260200190565b60405180910390a360018484815181106110fd576110fd6130fe565b91151560209283029190910190910152611273565b816001015460000361114b576000848481518110611132576111326130fe565b6020026020010190151590811515815250505050611276565b60018201805490600061115d836130e7565b9190505550858381518110611174576111746130fe565b602002602001015187848151811061118e5761118e6130fe565b60200260200101516001600160a01b03166000805160206131cb83398151915284600101546040516111c291815260200190565b60405180910390a3816001015460000361124e5760028201805460ff1916905585518690849081106111f6576111f66130fe565b6020026020010151878481518110611210576112106130fe565b60200260200101516001600160a01b03167f294e395c96ee31e4373f6b284b107e5341ffa80f2c53e582bc3cfb1f9efe500e60405160405180910390a35b6001848481518110611262576112626130fe565b911515602092830291909101909101525b50505b600101610f32565b509392505050565b600061129061230d565b506000805160206131eb83398151915290565b3360009081526001602052604090205460ff166112d357604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d79190a250565b6000546001600160a01b0316331461134a576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166113715760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399190a250565b3360009081526001602052604090205460ff166113f057604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19169055517fbea12876694c4055c71f74308f752b9027cf3d554194000a366abddfc239a3069190a250565b6000546001600160a01b03163314611464576040516330cd747160e01b815260040160405180910390fd5b6005805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6114a4612356565b60055460ff16156114c85760405163ab35696f60e01b815260040160405180910390fd5b600083815260026020526040902060040154839060ff166114fc5760405163ab4142cf60e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905233906001600160a01b03851690636352211e90602401602060405180830381865afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190613114565b6001600160a01b03161461158e5760405163fcd7a1b560e01b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038416906323b872dd90606401600060405180830381600087803b1580156115dc57600080fd5b505af11580156115f0573d6000803e3d6000fd5b505050506115fe338561238e565b604080516001600160a01b038516815260208101849052859133917fd0de3e759b6d8ae4ab8dfd56f0869b691034bf2f14b896155287e5cd61d66a70910160405180910390a35061165c600160008051602061320b83398151915255565b505050565b611687604051806060016040528060008152602001600081526020016000151581525090565b506001600160a01b03821660009081526003602090815260408083208484528252918290208251606081018452815481526001820154928101929092526002015460ff1615159181019190915292915050565b3360009081526001602052604090205460ff1661170a57604051637bfa4b9f60e01b815260040160405180910390fd5b805183511461172c5760405163512509d360e11b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff166117655760405163350b944160e11b815260040160405180910390fd5b60005b83518110156118aa57818181518110611783576117836130fe565b6020026020010151600060020160008684815181106117a4576117a46130fe565b602090810291909101810151825281810192909252604090810160009081206001600160a01b0388168083529352209190915561182c578181815181106117ed576117ed6130fe565b60200260200101516000600201600086848151811061180e5761180e6130fe565b60200260200101518152602001908152602001600020600101819055505b826001600160a01b0316848281518110611848576118486130fe565b60200260200101517f376716bd86293ff8b34061b9af3cac5116f15e0f2cbf689d822b6d6d7b1eeca9848481518110611883576118836130fe565b602002602001015160405161189a91815260200190565b60405180910390a3600101611768565b50505050565b6000546001600160a01b031633146118db576040516330cd747160e01b815260040160405180910390fd5b565b6118e5612356565b60055460ff16156119095760405163ab35696f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602052604090205460ff166119425760405163350b944160e11b815260040160405180910390fd5b6000805b8451811015611a655760006002016000868381518110611968576119686130fe565b60209081029190910181015182528101919091526040016000206004015460ff166119a65760405163ab4142cf60e01b815260040160405180910390fd5b6001600160a01b0384166119f957600060020160008683815181106119cd576119cd6130fe565b6020026020010151815260200190815260200160002060010154826119f291906130d4565b9150611a5d565b60006002016000868381518110611a1257611a126130fe565b602002602001015181526020019081526020016000206000016000856001600160a01b03166001600160a01b031681526020019081526020016000205482611a5a91906130d4565b91505b600101611946565b50808214611a865760405163cd1c886760e01b815260040160405180910390fd5b6001600160a01b038316611ab957813414611ab45760405163cd1c886760e01b815260040160405180910390fd5b611b32565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038416906323b872dd906064016020604051808303816000875af1158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b309190613131565b505b60005b8451811015611b6957611b6133868381518110611b5457611b546130fe565b602002602001015161238e565b600101611b35565b50336001600160a01b03167f2be07a645f06bfa8b189b4f0aba9bf2109d098d03cbede0449641495bba5d53d858585604051611ba79392919061314e565b60405180910390a25061165c600160008051602061320b83398151915255565b3360009081526001602052604090205460ff16611bf757604051637bfa4b9f60e01b815260040160405180910390fd5b600085815260026020819052604080832060018101889055918201869055600382018590556004909101805460ff19168415151790555186917fa7c3f5f04f0c05ad82fcdf81039da5a01bf41ce2769b7b347afa43bb65e4426691a25050505050565b6060600082516001600160401b03811115611c7757611c776128f0565b604051908082528060200260200182016040528015611cce57816020015b611cbb604051806060016040528060008152602001600081526020016000151581525090565b815260200190600190039081611c955790505b50905060005b835181101561127e576001600160a01b03851660009081526003602052604081208551909190869084908110611d0c57611d0c6130fe565b60209081029190910181015182528181019290925260409081016000208151606081018352815481526001820154938101939093526002015460ff161515908201528251839083908110611d6257611d626130fe565b6020908102919091010152600101611cd4565b611d7d612356565b60055460ff1615611da15760405163ab35696f60e01b815260040160405180910390fd5b600083815260026020526040902060040154839060ff16611dd55760405163ab4142cf60e01b815260040160405180910390fd5b6001600160a01b03831660009081526004602052604090205460ff16611e0e5760405163350b944160e11b815260040160405180910390fd5b60006001600160a01b038416611e765750600084815260026020526040902060010154348114611e515760405163cd1c886760e01b815260040160405180910390fd5b348314611e715760405163cd1c886760e01b815260040160405180910390fd5b611f33565b5060008481526002602090815260408083206001600160a01b0387168452909152902054828114611eba5760405163cd1c886760e01b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f319190613131565b505b611f3d338661238e565b600085815260026020526040812060030154611f5990426130d4565b6000878152600260208181526040928390209091015482516001600160a01b038a16815291820188905281830152606081018390529051919250879133917f180fe4b156a592a405cdd866f58883063db683348215e97cf864d6bf9679261c919081900360800190a350505061165c600160008051602061320b83398151915255565b6120196040518060c00160405280600081526020016000815260200160001515815260200160608152602001606081526020016000151581525090565b60008281526002602052604081209080612032856124e2565b6040805160c08101825260028701548082526003880154602083015260049097015460ff1615159181019190915260608101929092526080820152921560a084015250909392505050565b6001600160a01b038216600090815260036020908152604080832084845282528083208151606081018352815481526001820154938101939093526002015460ff1615159082018190526120d557600091505061071c565b60008381526002602052604090206003015481516120f391906130d4565b42111561210457600091505061071c565b600083815260026020819052604082200154908190036121295760019250505061071c565b50602001511515905061071c565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061071c565b6118db612690565b612170612690565b6118db6126b5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121ff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121f36000805160206131eb833981519152546001600160a01b031690565b6001600160a01b031614155b156118db5760405163703e46dd60e11b815260040160405180910390fd5b6000546001600160a01b03163314612248576040516330cd747160e01b815260040160405180910390fd5b50565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122a5575060408051601f3d908101601f191682019092526122a29181019061317c565b60015b6122d257604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206131eb833981519152811461230357604051632a87526960e21b8152600481018290526024016122c9565b61165c83836126bd565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118db5760405163703e46dd60e11b815260040160405180910390fd5b60008051602061320b83398151915280546001190161238857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b03821660009081526003602081815260408084208585528252808420600292839052908420918201549190920154919290919082900361241d57600283015460ff1680156123ef575082546123eb9082906130d4565b4211155b156123fb575050505050565b428355600060018085019190915560028401805460ff191690911790556124c7565b600283015460ff16801561243d575082546124399082906130d4565b4211155b156124ac578183600101600082825461245691906130d4565b9091555050600183015460408051848152602081019290925285916001600160a01b038816917fb76abe3c068fccae7ac0f9377f48f7261dcf952179a37060c5de877a493e67b7910160405180910390a36124c7565b428355600180840183905560028401805460ff191690911790555b5050505050565b600160008051602061320b83398151915255565b600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec54606091829160ff168015612532575060008481526002602052604090206001015415155b15612545578061254181613195565b9150505b806001600160401b0381111561255d5761255d6128f0565b604051908082528060200260200182016040528015612586578160200160208202803683370190505b509250806001600160401b038111156125a1576125a16128f0565b6040519080825280602002602001820160405280156125ca578160200160208202803683370190505b50600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec549193509060ff16801561261a575060008581526002602052604090206001015415155b15612689576000848281518110612633576126336130fe565b6001600160a01b039092166020928302919091018201526000868152600290915260409020600101548351849083908110612670576126706130fe565b60209081029190910101528061268581613195565b9150505b5050915091565b612698612713565b6118db57604051631afcd79f60e31b815260040160405180910390fd5b6124ce612690565b6126c68261272d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561270b5761165c8282612792565b610e8f612808565b600061271d612137565b54600160401b900460ff16919050565b806001600160a01b03163b60000361276357604051634c9c8ce360e01b81526001600160a01b03821660048201526024016122c9565b6000805160206131eb83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516127af91906131ae565b600060405180830381855af49150503d80600081146127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50915091506127ff858383612827565b95945050505050565b34156118db5760405163b398979f60e01b815260040160405180910390fd5b60608261283c5761283782612886565b61287f565b815115801561285357506001600160a01b0384163b155b1561287c57604051639996b31560e01b81526001600160a01b03851660048201526024016122c9565b50805b9392505050565b8051156128965780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6001600160a01b038116811461224857600080fd5b600080604083850312156128d757600080fd5b82356128e2816128af565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561292e5761292e6128f0565b604052919050565b60006001600160401b0382111561294f5761294f6128f0565b5060051b60200190565b600082601f83011261296a57600080fd5b813561297d61297882612936565b612906565b8082825260208201915060208360051b86010192508583111561299f57600080fd5b602085015b838110156129bc5780358352602092830192016129a4565b5095945050505050565b801515811461224857600080fd5b600082601f8301126129e557600080fd5b81356129f361297882612936565b8082825260208201915060208360051b860101925085831115612a1557600080fd5b602085015b838110156129bc578035612a2d816129c6565b835260209283019201612a1a565b600080600080600060a08688031215612a5357600080fd5b85356001600160401b03811115612a6957600080fd5b612a7588828901612959565b95505060208601356001600160401b03811115612a9157600080fd5b612a9d88828901612959565b94505060408601356001600160401b03811115612ab957600080fd5b612ac588828901612959565b93505060608601356001600160401b03811115612ae157600080fd5b612aed88828901612959565b92505060808601356001600160401b03811115612b0957600080fd5b612b15888289016129d4565b9150509295509295909350565b600060208284031215612b3457600080fd5b813561287f816128af565b600080600060608486031215612b5457600080fd5b833592506020840135612b66816128af565b929592945050506040919091013590565b600060208284031215612b8957600080fd5b5035919050565b600082601f830112612ba157600080fd5b8135612baf61297882612936565b8082825260208201915060208360051b860101925085831115612bd157600080fd5b602085015b838110156129bc578035612be9816128af565b835260209283019201612bd6565b600080600060608486031215612c0c57600080fd5b8335612c17816128af565b925060208401356001600160401b03811115612c3257600080fd5b612c3e86828701612b90565b92505060408401356001600160401b03811115612c5a57600080fd5b612c6686828701612b90565b9150509250925092565b60008060408385031215612c8357600080fd5b8235612c8e816128af565b915060208301356001600160401b03811115612ca957600080fd5b8301601f81018513612cba57600080fd5b80356001600160401b03811115612cd357612cd36128f0565b612ce6601f8201601f1916602001612906565b818152866020838501011115612cfb57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060408385031215612d2e57600080fd5b82356001600160401b03811115612d4457600080fd5b612d5085828601612b90565b92505060208301356001600160401b03811115612d6c57600080fd5b612d7885828601612959565b9150509250929050565b602080825282518282018190526000918401906040840190835b81811015612dbc5783511515835260209384019390920191600101612d9c565b509095945050505050565b81518152602080830151908201526040808301511515908201526060810161071c565b600080600060608486031215612dff57600080fd5b83356001600160401b03811115612e1557600080fd5b612e2186828701612959565b9350506020840135612e32816128af565b915060408401356001600160401b03811115612e4d57600080fd5b612c6686828701612959565b600080600060608486031215612e6e57600080fd5b83356001600160401b03811115612e8457600080fd5b612e9086828701612959565b9350506020840135612b66816128af565b60005b83811015612ebc578181015183820152602001612ea4565b50506000910152565b6020815260008251806020840152612ee4816040850160208701612ea1565b601f01601f19169190910160400192915050565b600080600080600060a08688031215612f1057600080fd5b853594506020860135935060408601359250606086013591506080860135612f37816129c6565b809150509295509295909350565b60008060408385031215612f5857600080fd5b8235612f63816128af565b915060208301356001600160401b03811115612d6c57600080fd5b602080825282518282018190526000918401906040840190835b81811015612dbc57612fc183855180518252602080820151908301526040908101511515910152565b6020939093019260609290920191600101612f98565b600081518084526020840193506020830160005b82811015613009578151865260209586019590910190600101612feb565b5093949350505050565b60208152600060e082018351602084015260208401516040840152604084015115156060840152606084015160c0608085015281815180845261010086019150602083019350600092505b808310156130895783516001600160a01b03168252602093840193600193909301929091019061305e565b506080860151858203601f190160a087015292506130a78184612fd7565b9250505060a084015161127e60c085018215159052565b634e487b7160e01b600052601160045260246000fd5b8082018082111561071c5761071c6130be565b6000816130f6576130f66130be565b506000190190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561312657600080fd5b815161287f816128af565b60006020828403121561314357600080fd5b815161287f816129c6565b6060815260006131616060830186612fd7565b6001600160a01b039490941660208301525060400152919050565b60006020828403121561318e57600080fd5b5051919050565b6000600182016131a7576131a76130be565b5060010190565b600082516131c0818460208701612ea1565b919091019291505056fe2ccc6c74b339e9d58b89aa6bb58d0519712aeff106f7981d466f54572cb88b42360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212205360a02460f8e8d4dfce4cfc45d45f74b6c93829f4b3e42714bf9ccaa698894a64736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x19C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70480275 GT PUSH2 0xEC JUMPI DUP1 PUSH4 0x99EA24FE GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xB303F53F GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xB303F53F EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0xB6F1D140 EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xB8E8F98E EQ PUSH2 0x4F9 JUMPI DUP1 PUSH4 0xCAAE24B3 EQ PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x99EA24FE EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0xB1B105FE EQ PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x86778641 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x86778641 EQ PUSH2 0x3C6 JUMPI DUP1 PUSH4 0x8D13660E EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x8F0FF11B EQ PUSH2 0x413 JUMPI DUP1 PUSH4 0x8FD3AB80 EQ PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70480275 EQ PUSH2 0x371 JUMPI DUP1 PUSH4 0x76319190 EQ PUSH2 0x391 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40033B3D GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x529E2B32 GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x529E2B32 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x52D1902D EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x6D69FCAF EQ PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40033B3D EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x4A200FA5 EQ PUSH2 0x2B9 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x2D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5059571 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x9B952BE EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x1785F53C EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x240028E8 EQ PUSH2 0x218 JUMPI DUP1 PUSH4 0x3428CEBB EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x271 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x1BC CALLDATASIZE PUSH1 0x4 PUSH2 0x28C4 JUMP JUMPDEST PUSH2 0x546 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x1F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A3B JUMP JUMPDEST PUSH2 0x722 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x213 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x952 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x233 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x26C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3F JUMP JUMPDEST PUSH2 0x9ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0xADE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x2A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B77 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x2D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BF7 JUMP JUMPDEST PUSH2 0xB3E JUMP JUMPDEST PUSH2 0x1F6 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0xE74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30C PUSH2 0x307 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D1B JUMP JUMPDEST PUSH2 0xE93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2D82 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32E PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x32E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x36C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x12A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x131F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x3AC CALLDATASIZE PUSH1 0x4 PUSH2 0x2B22 JUMP JUMPDEST PUSH2 0x13C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x1439 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x3E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3F JUMP JUMPDEST PUSH2 0x149C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x406 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x28C4 JUMP JUMPDEST PUSH2 0x1661 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2DC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x2DEA JUMP JUMPDEST PUSH2 0x16DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x18B0 JUMP JUMPDEST PUSH2 0x1F6 PUSH2 0x456 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E59 JUMP JUMPDEST PUSH2 0x18DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x352E302E3 PUSH1 0xDC SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2EC5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F6 PUSH2 0x4B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1BC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D9 PUSH2 0x4D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F45 JUMP JUMPDEST PUSH2 0x1C5A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x2F7E JUMP JUMPDEST PUSH2 0x1F6 PUSH2 0x4F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3F JUMP JUMPDEST PUSH2 0x1D75 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x505 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x519 PUSH2 0x514 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B77 JUMP JUMPDEST PUSH2 0x1FDC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0x3013 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C1 PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x28C4 JUMP JUMPDEST PUSH2 0x207D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x576 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xFF AND PUSH2 0x5BE JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP2 SLOAD PUSH2 0x5DC SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x5FC JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x654 JUMPI DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x641 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x71C JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x679 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x68B DUP4 PUSH2 0x30E7 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x1 ADD SLOAD PUSH1 0x40 MLOAD PUSH2 0x6BE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x715 JUMPI PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH32 0x294E395C96EE31E4373F6B284B107E5341FFA80F2C53E582BC3CFB1F9EFE500E SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x752 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 MLOAD DUP6 MLOAD EQ ISZERO DUP1 PUSH2 0x765 JUMPI POP DUP3 MLOAD DUP6 MLOAD EQ ISZERO JUMPDEST DUP1 PUSH2 0x772 JUMPI POP DUP2 MLOAD DUP6 MLOAD EQ ISZERO JUMPDEST DUP1 PUSH2 0x77F JUMPI POP DUP1 MLOAD DUP6 MLOAD EQ ISZERO JUMPDEST ISZERO PUSH2 0x79D JUMPI PUSH1 0x40 MLOAD PUSH4 0x512509D3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x94A JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x7BB JUMPI PUSH2 0x7BB PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x7DC JUMPI PUSH2 0x7DC PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x80B JUMPI PUSH2 0x80B PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x82C JUMPI PUSH2 0x82C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD DUP2 SWAP1 SSTORE POP DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x85B JUMPI PUSH2 0x85B PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x87C JUMPI PUSH2 0x87C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD DUP2 SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x8AB JUMPI PUSH2 0x8AB PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8CC JUMPI PUSH2 0x8CC PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x90E JUMPI PUSH2 0x90E PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH32 0xA7C3F5F04F0C05AD82FCDF81039DA5A01BF41CE2769B7B347AFA43BB65E44266 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x1 ADD PUSH2 0x7A0 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x97D JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xA3B62BC36326052D97EA62D63C3D60308ED4C3EA8AC079DD8499F1E9C4F80C0F SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xA1D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xA56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP3 SWAP1 SSTORE PUSH2 0xA95 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0x376716BD86293FF8B34061B9AF3CAC5116F15E0F2CBF689D822B6D6D7B1EECA9 DUP4 PUSH1 0x40 MLOAD PUSH2 0xAD1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA45F47FDEA8A1EFDD9029A5691C7F759C32B7C698632B563573E155625D16933 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB48 PUSH2 0x2137 JUMP JUMPDEST DUP1 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF PUSH1 0x1 PUSH1 0x40 SHL DUP3 DIV AND ISZERO SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x0 DUP2 ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI POP DUP3 JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x1 EQ DUP1 ISZERO PUSH2 0xB8B JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xBB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF92EE8A9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 OR DUP6 SSTORE DUP4 ISZERO PUSH2 0xBE1 JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND PUSH1 0x1 PUSH1 0x40 SHL OR DUP6 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH2 0xC08 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC10 PUSH2 0x2160 JUMP JUMPDEST PUSH2 0xC18 PUSH2 0x2168 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND OR DUP2 SSTORE PUSH1 0x1 PUSH1 0x6 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0xD31 JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC69 JUMPI PUSH2 0xC69 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD29 JUMPI PUSH1 0x1 PUSH1 0x0 PUSH1 0x1 ADD PUSH1 0x0 DUP11 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC9A JUMPI PUSH2 0xC9A PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xCEB JUMPI PUSH2 0xCEB PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x44D6D25963F097AD14F29F06854A01F575648A1EF82F30E562CCD3889717E339 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 ADD PUSH2 0xC43 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0xE23 JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xD5B JUMPI PUSH2 0xD5B PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE1B JUMPI PUSH1 0x1 PUSH1 0x0 PUSH1 0x4 ADD PUSH1 0x0 DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xD8C JUMPI PUSH2 0xD8C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xDDD JUMPI PUSH2 0xDDD PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xD1BE2E90BD3D24839D9DD94AD871068E1F9688B02FA43F2A62C9975DFA9DE2D7 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 ADD PUSH2 0xD35 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0xE6A JUMPI DUP5 SLOAD PUSH1 0xFF PUSH1 0x40 SHL NOT AND DUP6 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE7C PUSH2 0x2178 JUMP JUMPDEST PUSH2 0xE85 DUP3 PUSH2 0x221D JUMP JUMPDEST PUSH2 0xE8F DUP3 DUP3 PUSH2 0x224B JUMP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0xEC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0xEE8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x512509D3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xF03 JUMPI PUSH2 0xF03 PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF2C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x127E JUMPI PUSH1 0x0 DUP1 PUSH1 0x3 ADD PUSH1 0x0 DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF55 JUMPI PUSH2 0xF55 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xF91 JUMPI PUSH2 0xF91 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP DUP1 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0xFE9 JUMPI PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xFD3 JUMPI PUSH2 0xFD3 PUSH2 0x30FE JUMP JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE POP PUSH2 0x1276 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1002 JUMPI PUSH2 0x1002 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD SLOAD DUP2 PUSH1 0x0 ADD SLOAD PUSH2 0x102B SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x1046 JUMPI PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xFD3 JUMPI PUSH2 0xFD3 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x2 ADD PUSH1 0x0 DUP8 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1060 JUMPI PUSH2 0x1060 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1112 JUMPI DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1096 JUMPI PUSH2 0x1096 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x10B0 JUMPI PUSH2 0x10B0 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x10E1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x10FD JUMPI PUSH2 0x10FD PUSH2 0x30FE JUMP JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH2 0x1273 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x114B JUMPI PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1132 JUMPI PUSH2 0x1132 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 ISZERO ISZERO SWAP1 DUP2 ISZERO ISZERO DUP2 MSTORE POP POP POP POP PUSH2 0x1276 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x115D DUP4 PUSH2 0x30E7 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1174 JUMPI PUSH2 0x1174 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI PUSH2 0x118E PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31CB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x1 ADD SLOAD PUSH1 0x40 MLOAD PUSH2 0x11C2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP2 PUSH1 0x1 ADD SLOAD PUSH1 0x0 SUB PUSH2 0x124E JUMPI PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP6 MLOAD DUP7 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x11F6 JUMPI PUSH2 0x11F6 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1210 JUMPI PUSH2 0x1210 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x294E395C96EE31E4373F6B284B107E5341FFA80F2C53E582BC3CFB1F9EFE500E PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1262 JUMPI PUSH2 0x1262 PUSH2 0x30FE JUMP JUMPDEST SWAP2 ISZERO ISZERO PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xF32 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1290 PUSH2 0x230D JUMP JUMPDEST POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x12D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xD1BE2E90BD3D24839D9DD94AD871068E1F9688B02FA43F2A62C9975DFA9DE2D7 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x134A JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1371 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x44D6D25963F097AD14F29F06854A01F575648A1EF82F30E562CCD3889717E339 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x13F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xBEA12876694C4055C71F74308F752B9027CF3D554194000A366ABDDFC239A306 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1464 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E87FAC88FF661F02D44F95383C817FECE4BCE600A3DAB7A54406878B965E752 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x14A4 PUSH2 0x2356 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x14C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB35696F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP4 SWAP1 PUSH1 0xFF AND PUSH2 0x14FC JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB4142CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x31A9108F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x6352211E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1567 SWAP2 SWAP1 PUSH2 0x3114 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x158E JUMPI PUSH1 0x40 MLOAD PUSH4 0xFCD7A1B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x15FE CALLER DUP6 PUSH2 0x238E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP6 SWAP2 CALLER SWAP2 PUSH32 0xD0DE3E759B6D8AE4AB8DFD56F0869B691034BF2F14B896155287E5CD61D66A70 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x165C PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1687 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x170A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP4 MLOAD EQ PUSH2 0x172C JUMPI PUSH1 0x40 MLOAD PUSH4 0x512509D3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1765 JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x18AA JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1783 JUMPI PUSH2 0x1783 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x17A4 JUMPI PUSH2 0x17A4 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD DUP3 MSTORE DUP2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP4 MSTORE SWAP4 MSTORE KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x182C JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x17ED JUMPI PUSH2 0x17ED PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x180E JUMPI PUSH2 0x180E PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1848 JUMPI PUSH2 0x1848 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH32 0x376716BD86293FF8B34061B9AF3CAC5116F15E0F2CBF689D822B6D6D7B1EECA9 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1883 JUMPI PUSH2 0x1883 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x189A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 ADD PUSH2 0x1768 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x18E5 PUSH2 0x2356 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1909 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB35696F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1942 JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x1A65 JUMPI PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1968 JUMPI PUSH2 0x1968 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 ADD SLOAD PUSH1 0xFF AND PUSH2 0x19A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB4142CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x19F9 JUMPI PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x19CD JUMPI PUSH2 0x19CD PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 PUSH2 0x19F2 SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A5D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A12 JUMPI PUSH2 0x1A12 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP3 PUSH2 0x1A5A SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1946 JUMP JUMPDEST POP DUP1 DUP3 EQ PUSH2 0x1A86 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1AB9 JUMPI DUP2 CALLVALUE EQ PUSH2 0x1AB4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B0C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B30 SWAP2 SWAP1 PUSH2 0x3131 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x1B69 JUMPI PUSH2 0x1B61 CALLER DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1B54 JUMPI PUSH2 0x1B54 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x238E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1B35 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2BE07A645F06BFA8B189B4F0ABA9BF2109D098D03CBEDE0449641495BBA5D53D DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1BA7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x314E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP PUSH2 0x165C PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1BF7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BFA4B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 DUP2 ADD DUP9 SWAP1 SSTORE SWAP2 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x3 DUP3 ADD DUP6 SWAP1 SSTORE PUSH1 0x4 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND DUP5 ISZERO ISZERO OR SWAP1 SSTORE MLOAD DUP7 SWAP2 PUSH32 0xA7C3F5F04F0C05AD82FCDF81039DA5A01BF41CE2769B7B347AFA43BB65E44266 SWAP2 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1C77 JUMPI PUSH2 0x1C77 PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1CCE JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1CBB PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1C95 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x127E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP6 MLOAD SWAP1 SWAP2 SWAP1 DUP7 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1D0C JUMPI PUSH2 0x1D0C PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD DUP3 MSTORE DUP2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP1 DUP3 ADD MSTORE DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x1D62 JUMPI PUSH2 0x1D62 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1CD4 JUMP JUMPDEST PUSH2 0x1D7D PUSH2 0x2356 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1DA1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB35696F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP4 SWAP1 PUSH1 0xFF AND PUSH2 0x1DD5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAB4142CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x350B9441 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1E76 JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD CALLVALUE DUP2 EQ PUSH2 0x1E51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLVALUE DUP4 EQ PUSH2 0x1E71 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1F33 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 EQ PUSH2 0x1EBA JUMPI PUSH1 0x40 MLOAD PUSH4 0xCD1C8867 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F31 SWAP2 SWAP1 PUSH2 0x3131 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1F3D CALLER DUP7 PUSH2 0x238E JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH2 0x1F59 SWAP1 TIMESTAMP PUSH2 0x30D4 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP2 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP DUP8 SWAP2 CALLER SWAP2 PUSH32 0x180FE4B156A592A405CDD866F58883063DB683348215E97CF864D6BF9679261C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP POP PUSH2 0x165C PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH2 0x2019 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 DUP1 PUSH2 0x2032 DUP6 PUSH2 0x24E2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH1 0x2 DUP8 ADD SLOAD DUP1 DUP3 MSTORE PUSH1 0x3 DUP9 ADD SLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x4 SWAP1 SWAP8 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP3 ADD MSTORE SWAP3 ISZERO PUSH1 0xA0 DUP5 ADD MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP5 DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x20D5 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP2 MLOAD PUSH2 0x20F3 SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x2104 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2129 JUMPI PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x71C JUMP JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO ISZERO SWAP1 POP PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 PUSH2 0x71C JUMP JUMPDEST PUSH2 0x18DB PUSH2 0x2690 JUMP JUMPDEST PUSH2 0x2170 PUSH2 0x2690 JUMP JUMPDEST PUSH2 0x18DB PUSH2 0x26B5 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x21FF JUMPI POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21F3 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x703E46DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2248 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30CD7471 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x52D1902D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x22A5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x22A2 SWAP2 DUP2 ADD SWAP1 PUSH2 0x317C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x22D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 EQ PUSH2 0x2303 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A875269 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 ADD PUSH2 0x22C9 JUMP JUMPDEST PUSH2 0x165C DUP4 DUP4 PUSH2 0x26BD JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x703E46DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP1 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x2388 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5AEB5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 PUSH1 0x2 SWAP3 DUP4 SWAP1 MSTORE SWAP1 DUP5 KECCAK256 SWAP2 DUP3 ADD SLOAD SWAP2 SWAP1 SWAP3 ADD SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB PUSH2 0x241D JUMPI PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x23EF JUMPI POP DUP3 SLOAD PUSH2 0x23EB SWAP1 DUP3 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO JUMPDEST ISZERO PUSH2 0x23FB JUMPI POP POP POP POP POP JUMP JUMPDEST TIMESTAMP DUP4 SSTORE PUSH1 0x0 PUSH1 0x1 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x24C7 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x243D JUMPI POP DUP3 SLOAD PUSH2 0x2439 SWAP1 DUP3 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST TIMESTAMP GT ISZERO JUMPDEST ISZERO PUSH2 0x24AC JUMPI DUP2 DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x2456 SWAP2 SWAP1 PUSH2 0x30D4 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP6 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0xB76ABE3C068FCCAE7AC0F9377F48F7261DCF952179A37060C5DE877A493E67B7 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x24C7 JUMP JUMPDEST TIMESTAMP DUP4 SSTORE PUSH1 0x1 DUP1 DUP5 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH32 0x17EF568E3E12AB5B9C7254A8D58478811DE00F9E6EB34345ACD53BF8FD09D3EC SLOAD PUSH1 0x60 SWAP2 DUP3 SWAP2 PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x2532 JUMPI POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x2545 JUMPI DUP1 PUSH2 0x2541 DUP2 PUSH2 0x3195 JUMP JUMPDEST SWAP2 POP POP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x255D JUMPI PUSH2 0x255D PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2586 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25A1 JUMPI PUSH2 0x25A1 PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25CA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH32 0x17EF568E3E12AB5B9C7254A8D58478811DE00F9E6EB34345ACD53BF8FD09D3EC SLOAD SWAP2 SWAP4 POP SWAP1 PUSH1 0xFF AND DUP1 ISZERO PUSH2 0x261A JUMPI POP PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x2689 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2633 JUMPI PUSH2 0x2633 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP4 MLOAD DUP5 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x2670 JUMPI PUSH2 0x2670 PUSH2 0x30FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x2685 DUP2 PUSH2 0x3195 JUMP JUMPDEST SWAP2 POP POP JUMPDEST POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x2698 PUSH2 0x2713 JUMP JUMPDEST PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x1AFCD79F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x24CE PUSH2 0x2690 JUMP JUMPDEST PUSH2 0x26C6 DUP3 PUSH2 0x272D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0x270B JUMPI PUSH2 0x165C DUP3 DUP3 PUSH2 0x2792 JUMP JUMPDEST PUSH2 0xE8F PUSH2 0x2808 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x271D PUSH2 0x2137 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH1 0xFF AND SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE PUSH1 0x0 SUB PUSH2 0x2763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4C9C8CE3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x22C9 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x31EB DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x40 MLOAD PUSH2 0x27AF SWAP2 SWAP1 PUSH2 0x31AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x27EA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x27EF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x27FF DUP6 DUP4 DUP4 PUSH2 0x2827 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x18DB JUMPI PUSH1 0x40 MLOAD PUSH4 0xB398979F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 PUSH2 0x283C JUMPI PUSH2 0x2837 DUP3 PUSH2 0x2886 JUMP JUMPDEST PUSH2 0x287F JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2853 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x287C JUMPI PUSH1 0x40 MLOAD PUSH4 0x9996B315 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x22C9 JUMP JUMPDEST POP DUP1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2896 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD6BDA275 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x28E2 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x292E JUMPI PUSH2 0x292E PUSH2 0x28F0 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x294F JUMPI PUSH2 0x294F PUSH2 0x28F0 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x296A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x297D PUSH2 0x2978 DUP3 PUSH2 0x2936 JUMP JUMPDEST PUSH2 0x2906 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x299F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29BC JUMPI DUP1 CALLDATALOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x29A4 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x29E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x29F3 PUSH2 0x2978 DUP3 PUSH2 0x2936 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x2A15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29BC JUMPI DUP1 CALLDATALOAD PUSH2 0x2A2D DUP2 PUSH2 0x29C6 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x2A1A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2A53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A75 DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A9D DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AC5 DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AED DUP9 DUP3 DUP10 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2B09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B15 DUP9 DUP3 DUP10 ADD PUSH2 0x29D4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x287F DUP2 PUSH2 0x28AF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2B54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2B66 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2BA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2BAF PUSH2 0x2978 DUP3 PUSH2 0x2936 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP6 DUP4 GT ISZERO PUSH2 0x2BD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29BC JUMPI DUP1 CALLDATALOAD PUSH2 0x2BE9 DUP2 PUSH2 0x28AF JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x2BD6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2C0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2C17 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C3E DUP7 DUP3 DUP8 ADD PUSH2 0x2B90 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C66 DUP7 DUP3 DUP8 ADD PUSH2 0x2B90 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2C83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2C8E DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x2CBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CD3 JUMPI PUSH2 0x2CD3 PUSH2 0x28F0 JUMP JUMPDEST PUSH2 0x2CE6 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2906 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP7 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D50 DUP6 DUP3 DUP7 ADD PUSH2 0x2B90 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D78 DUP6 DUP3 DUP7 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DBC JUMPI DUP4 MLOAD ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2D9C JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD PUSH2 0x71C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2DFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E21 DUP7 DUP3 DUP8 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2E32 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C66 DUP7 DUP3 DUP8 ADD PUSH2 0x2959 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2E6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2E84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E90 DUP7 DUP3 DUP8 ADD PUSH2 0x2959 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2B66 DUP2 PUSH2 0x28AF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2EBC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2EA4 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2EE4 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x2EA1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2F10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x2F37 DUP2 PUSH2 0x29C6 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2F58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2F63 DUP2 PUSH2 0x28AF JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DBC JUMPI PUSH2 0x2FC1 DUP4 DUP6 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2F98 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP4 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3009 JUMPI DUP2 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2FEB JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH1 0xE0 DUP3 ADD DUP4 MLOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE DUP2 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x100 DUP7 ADD SWAP2 POP PUSH1 0x20 DUP4 ADD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x3089 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 PUSH1 0x1 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x305E JUMP JUMPDEST POP PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP3 SUB PUSH1 0x1F NOT ADD PUSH1 0xA0 DUP8 ADD MSTORE SWAP3 POP PUSH2 0x30A7 DUP2 DUP5 PUSH2 0x2FD7 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0x127E PUSH1 0xC0 DUP6 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x71C JUMPI PUSH2 0x71C PUSH2 0x30BE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x30F6 JUMPI PUSH2 0x30F6 PUSH2 0x30BE JUMP JUMPDEST POP PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x287F DUP2 PUSH2 0x28AF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x287F DUP2 PUSH2 0x29C6 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3161 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x2FD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x318E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x31A7 JUMPI PUSH2 0x31A7 PUSH2 0x30BE JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x31C0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2EA1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID 0x2C 0xCC PUSH13 0x74B339E9D58B89AA6BB58D0519 PUSH18 0x2AEFF106F7981D466F54572CB88B42360894 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC9B779B17422D0DF9222301 DUP12 ORIGIN 0xB4 0xD1 STATICCALL CHAINID 0xE0 PUSH18 0x723D6817E2486D003BECC55F00A264697066 PUSH20 0x582212205360A02460F8E8D4DFCE4CFC45D45F74 0xB6 0xC9 CODESIZE 0x29 DELEGATECALL 0xB3 0xE4 0x27 EQ 0xBF SWAP13 0xCA 0xA6 SWAP9 DUP10 BLOBBASEFEE PUSH5 0x736F6C6343 STOP ADDMOD SHR STOP CALLER ","sourceMap":"658:24517:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18253:1570;;;;;;;;;;-1:-1:-1;18253:1570:14;;;;;:::i;:::-;;:::i;:::-;;;783:14:17;;776:22;758:41;;746:2;731:18;18253:1570:14;;;;;;;;5284:1097;;;;;;;;;;-1:-1:-1;5284:1097:14;;;;;:::i;:::-;;:::i;:::-;;3897:192;;;;;;;;;;-1:-1:-1;3897:192:14;;;;;:::i;:::-;;:::i;9287:125::-;;;;;;;;;;-1:-1:-1;9287:125:14;;;;;:::i;:::-;-1:-1:-1;;;;;9374:31:14;9351:4;9374:31;;;:24;:31;;;;;;;;;9287:125;6937:508;;;;;;;;;;-1:-1:-1;6937:508:14;;;;;:::i;:::-;;:::i;25070:103::-;;;;;;;;;;;;;:::i;6518:140::-;;;;;;;;;;-1:-1:-1;6518:140:14;;;;;:::i;:::-;6585:4;6608:34;;;:23;:34;;;;;:43;;;;;;6518:140;1787:1025;;;;;;;;;;-1:-1:-1;1787:1025:14;;;;;:::i;:::-;;:::i;4161:214:1:-;;;;;;:::i;:::-;;:::i;20013:2160:14:-;;;;;;;;;;-1:-1:-1;20013:2160:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3708:134:1:-;;;;;;;;;;;;;:::i;:::-;;;9047:25:17;;;9035:2;9020:18;3708:134:1;8901:177:17;2867:91:14;;;;;;;;;;-1:-1:-1;2935:16:14;;2867:91;;8665:157;;;;;;;;;;-1:-1:-1;8665:157:14;;;;;:::i;:::-;;:::i;3620:186::-;;;;;;;;;;-1:-1:-1;3620:186:14;;;;;:::i;:::-;;:::i;8977:163::-;;;;;;;;;;-1:-1:-1;8977:163:14;;;;;:::i;:::-;;:::i;24921:98::-;;;;;;;;;;;;;:::i;13093:646::-;;;;;;;;;;-1:-1:-1;13093:646:14;;;;;:::i;:::-;;:::i;17880:216::-;;;;;;;;;;-1:-1:-1;17880:216:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7690:757::-;;;;;;;;;;-1:-1:-1;7690:757:14;;;;;:::i;:::-;;:::i;3031:263::-;;;;;;;;;;;;;:::i;11395:1521::-;;;;;;:::i;:::-;;:::i;1819:58:1:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:1;;;;;;;;;;;;:::i;4442:534:14:-;;;;;;;;;;-1:-1:-1;4442:534:14;;;;;:::i;:::-;;:::i;17205:511::-;;;;;;;;;;-1:-1:-1;17205:511:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9701:1434::-;;;;;;:::i;:::-;;:::i;22407:826::-;;;;;;;;;;-1:-1:-1;22407:826:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16017:1005::-;;;;;;;;;;-1:-1:-1;16017:1005:14;;;;;:::i;:::-;;:::i;18253:1570::-;1121:10;18357:4;1104:28;;;:16;:28;;;;;;;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;-1:-1:-1;;;;;18429:43:14;::::1;18373:53;18429:43:::0;;;:37:::1;:43;::::0;;;;;;;:54;;;;;;;;18499:18:::1;::::0;::::1;::::0;::::1;;18494:76;;18540:19;;-1:-1:-1::0;;;18540:19:14::1;;;;;;;;;;;18494:76;18712:8;:34:::0;;;:23:::1;:34;::::0;;;;:47:::1;;::::0;18670:23;;:89:::1;::::0;18712:47;18670:89:::1;:::i;:::-;18640:15;:119;18623:198;;;18791:19;;-1:-1:-1::0;;;18791:19:14::1;;;;;;;;;;;18623:198;18914:20;18937:47:::0;;;:36:::1;:47;::::0;;;;;;:77:::1;::::0;;19029:17;;;19025:792:::1;;19160:9;19154:4;-1:-1:-1::0;;;;;19141:32:14::1;-1:-1:-1::0;;;;;;;;;;;19171:1:14::1;19141:32;;;;9047:25:17::0;;9035:2;9020:18;;8901:177;19141:32:14::1;;;;;;;;19219:4;19212:11;;;;;;19025:792;19321:10;:25;;;19350:1;19321:30:::0;19317:95:::1;;19378:19;;-1:-1:-1::0;;;19378:19:14::1;;;;;;;;;;;19317:95;19458:25;::::0;::::1;:27:::0;;;:25:::1;:27;::::0;::::1;:::i;:::-;;;;;;19524:9;19518:4;-1:-1:-1::0;;;;;19505:56:14::1;-1:-1:-1::0;;;;;;;;;;;19535:10:14::1;:25;;;19505:56;;;;9047:25:17::0;;9035:2;9020:18;;8901:177;19505:56:14::1;;;;;;;;19633:10;:25;;;19662:1;19633:30:::0;19629:152:::1;;19683:18;::::0;::::1;:26:::0;;-1:-1:-1;;19683:26:14::1;::::0;;19732:34:::1;::::0;19756:9;;-1:-1:-1;;;;;19732:34:14;::::1;::::0;::::1;::::0;19704:5:::1;::::0;19732:34:::1;19629:152;19802:4;19795:11;;;;1161:1;18253:1570:::0;;;;:::o;5284:1097::-;1121:10;1104:8;:28;;;:16;:28;;;;;;;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;5585:12:::1;:19;5564:10;:17;:40;;:101;;;;5641:17;:24;5620:10;:17;:45;;5564:101;:158;;;;5702:13;:20;5681:10;:17;:41;;5564:158;:215;;;;5759:13;:20;5738:10;:17;:41;;5564:215;5547:271;;;5797:21;;-1:-1:-1::0;;;5797:21:14::1;;;;;;;;;;;5547:271;5834:9;5829:546;5853:10;:17;5849:1;:21;5829:546;;;5944:12;5974:1;5944:45;;;;;;;;:::i;:::-;;;;;;;5891:8;:23;;:38;5915:10;5926:1;5915:13;;;;;;;;:::i;:::-;;;;;;;5891:38;;;;;;;;;;;:50;;:98;;;;6095:17;6113:1;6095:20;;;;;;;;:::i;:::-;;;;;;;6003:8;:40;;:55;6044:10;6055:1;6044:13;;;;;;;;:::i;:::-;;;;;;;6003:55;;;;;;;;;;;:89;;:112;;;;6183:13;6214:1;6183:46;;;;;;;;:::i;:::-;;;;;;;6129:8;:23;;:38;6153:10;6164:1;6153:13;;;;;;;;:::i;:::-;;;;;;;6129:38;;;;;;;;;;;:51;;:100;;;;6293:13;6307:1;6293:16;;;;;;;;:::i;:::-;;;;;;;6243:8;:23;;:38;6267:10;6278:1;6267:13;;;;;;;;:::i;:::-;;;;;;;6243:38;;;;;;;;;;;:47;;;:66;;;;;;;;;;;;;;;;;;6350:10;6361:1;6350:13;;;;;;;;:::i;:::-;;;;;;;6329:35;;;;;;;;;;5872:3;;5829:546;;;;5284:1097:::0;;;;;:::o;3897:192::-;1011:8;:14;-1:-1:-1;;;;;1011:14:14;997:10;:28;993:51;;1034:10;;-1:-1:-1;;;1034:10:14;;;;;;;;;;;993:51;-1:-1:-1;;;;;3966:19:14;::::1;3962:45;;3994:13;;-1:-1:-1::0;;;3994:13:14::1;;;;;;;;;;;3962:45;-1:-1:-1::0;;;;;4017:23:14;::::1;4043:5;4017:23:::0;;;:16:::1;:23;::::0;;;;;:31;;-1:-1:-1;;4017:31:14::1;::::0;;4063:19;::::1;::::0;4043:5;4063:19:::1;3897:192:::0;:::o;6937:508::-;1121:10;1104:8;:28;;;:16;:28;;;;;;;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;-1:-1:-1;;;;;7076:31:14;::::1;:8;:31:::0;;;:24:::1;:31;::::0;;;;;::::1;;7071:63;;7116:18;;-1:-1:-1::0;;;7116:18:14::1;;;;;;;;;;;7071:63;7145:8;:34:::0;;;:23:::1;:34;::::0;;;;;;;-1:-1:-1;;;;;7145:53:14;::::1;::::0;;;;;;;;:61;;;7277:104:::1;;7316:8;:34:::0;;;:23:::1;:34;::::0;;;;:46:::1;;:54:::0;;;7277:104:::1;7425:5;-1:-1:-1::0;;;;;7396:42:14::1;7414:9;7396:42;7432:5;7396:42;;;;9047:25:17::0;;9035:2;9020:18;;8901:177;7396:42:14::1;;;;;;;;6937:508:::0;;;:::o;25070:103::-;1011:8;:14;-1:-1:-1;;;;;1011:14:14;997:10;:28;993:51;;1034:10;;-1:-1:-1;;;1034:10:14;;;;;;;;;;;993:51;25118:15:::1;:23:::0;;-1:-1:-1;;25118:23:14::1;::::0;;25156:10:::1;::::0;::::1;::::0;25136:5:::1;::::0;25156:10:::1;25070:103::o:0;1787:1025::-;4158:30:0;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:0;-1:-1:-1;;;4302:15:0;;;4301:16;;-1:-1:-1;;;;;4348:14:0;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:0;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:0;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:0;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:0;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:0;-1:-1:-1;;;5011:22:0;;;4977:67;-1:-1:-1;;;;;1966:26:14;::::1;1962:52;;2001:13;;-1:-1:-1::0;;;2001:13:14::1;;;;;;;;;;;1962:52;2025:24;:22;:24::i;:::-;2059;:22;:24::i;:::-;2094:8;:29:::0;;-1:-1:-1;;;;;;2094:29:14::1;-1:-1:-1::0;;;;;2094:29:14;::::1;;::::0;;-1:-1:-1;2133:16:14::1;:20:::0;2163:15:::1;:23:::0;;-1:-1:-1;;2163:23:14::1;::::0;;2227:236:::1;2251:13;:20;2247:1;:24;2227:236;;;2324:1;-1:-1:-1::0;;;;;2296:30:14::1;:13;2310:1;2296:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2296:30:14::1;;2292:161;;2383:4;2346:8;:16;;:34;2363:13;2377:1;2363:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2346:34:14::1;-1:-1:-1::0;;;;;2346:34:14::1;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;2421:13;2435:1;2421:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2410:28:14::1;;;;;;;;;;;2292:161;2273:3;;2227:236;;;;2518:9;2513:293;2537:23;:30;2533:1;:34;2513:293;;;2630:1;-1:-1:-1::0;;;;;2592:40:14::1;:23;2616:1;2592:26;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2592:40:14::1;;2588:208;;2707:4;2652:8;:24;;:52;2677:23;2701:1;2677:26;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2652:52:14::1;-1:-1:-1::0;;;;;2652:52:14::1;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;2754:23;2778:1;2754:26;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2734:47:14::1;;;;;;;;;;;2588:208;2569:3;;2513:293;;;;5068:14:0::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:0;;;5140:14;;-1:-1:-1;16263:50:17;;5140:14:0;;16251:2:17;16236:18;5140:14:0;;;;;;;5064:101;4092:1079;;;;;1787:1025:14;;;:::o;4161:214:1:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;:::-;4161:214:::0;;:::o;20013:2160:14:-;1121:10;1104:8;:28;;;:16;:28;;;;;;20142:13;;1104:28;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;20187:10:::1;:17;20171:5;:12;:33;20167:67;;20213:21;;-1:-1:-1::0;;;20213:21:14::1;;;;;;;;;;;20167:67;20245:21;20280:5;:12;-1:-1:-1::0;;;;;20269:24:14::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;20269:24:14::1;;20245:48;;20309:9;20304:1838;20328:5;:12;20324:1;:16;20304:1838;;;20361:53;20417:8:::0;:41:::1;;:51;20459:5;20465:1;20459:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;20417:51:14::1;-1:-1:-1::0;;;;;20417:51:14::1;;;;;;;;;;;;:66;20469:10;20480:1;20469:13;;;;;;;;:::i;:::-;;;;;;;20417:66;;;;;;;;;;;20361:122;;20503:10;:18;;;;;;;;;;;;20498:102;;20554:5;20541:7;20549:1;20541:10;;;;;;;;:::i;:::-;:18:::0;::::1;;:10;::::0;;::::1;::::0;;;;;;;:18;-1:-1:-1;20577:8:14::1;;20498:102;20762:8;:23;;:38;20786:10;20797:1;20786:13;;;;;;;;:::i;:::-;;;;;;;20762:38;;;;;;;;;;;:51;;;20716:10;:23;;;:97;;;;:::i;:::-;20682:15;:131;20661:244;;;20859:5;20846:7;20854:1;20846:10;;;;;;;;:::i;20661:244::-;21006:20;21029:8:::0;:40:::1;;:55;21070:10;21081:1;21070:13;;;;;;;;:::i;:::-;;;;;;;21029:55;;;;;;;;;;;:89;;;21006:112;;21137:12;21153:1;21137:17:::0;21133:999:::1;;21280:10;21291:1;21280:13;;;;;;;;:::i;:::-;;;;;;;21270:5;21276:1;21270:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21257:40:14::1;-1:-1:-1::0;;;;;;;;;;;21295:1:14::1;21257:40;;;;9047:25:17::0;;9035:2;9020:18;;8901:177;21257:40:14::1;;;;;;;;21353:4;21340:7;21348:1;21340:10;;;;;;;;:::i;:::-;:17:::0;::::1;;:10;::::0;;::::1;::::0;;;;;;;:17;21133:999:::1;;;21467:10;:25;;;21496:1;21467:30:::0;21463:125:::1;;21534:5;21521:7;21529:1;21521:10;;;;;;;;:::i;:::-;;;;;;:18;;;;;;;;;::::0;::::1;21561:8;;;;21463:125;21642:25;::::0;::::1;:27:::0;;;:25:::1;:27;::::0;::::1;:::i;:::-;;;;;;21756:10;21767:1;21756:13;;;;;;;;:::i;:::-;;;;;;;21726:5;21732:1;21726:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21692:142:14::1;-1:-1:-1::0;;;;;;;;;;;21791:10:14::1;:25;;;21692:142;;;;9047:25:17::0;;9035:2;9020:18;;8901:177;21692:142:14::1;;;;;;;;21914:10;:25;;;21943:1;21914:30:::0;21910:172:::1;;21968:18;::::0;::::1;:26:::0;;-1:-1:-1;;21968:26:14::1;::::0;;22049:13;;:10;;22060:1;;22049:13;::::1;;;;;:::i;:::-;;;;;;;22039:5;22045:1;22039:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;22021:42:14::1;;;;;;;;;;;21910:172;22113:4;22100:7;22108:1;22100:10;;;;;;;;:::i;:::-;:17:::0;::::1;;:10;::::0;;::::1;::::0;;;;;;;:17;21133:999:::1;20347:1795;;20304:1838;20342:3;;20304:1838;;;-1:-1:-1::0;22159:7:14;20013:2160;-1:-1:-1;;;20013:2160:14:o;3708:134:1:-;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:1;:::o;8665:157:14:-;1121:10;1104:8;:28;;;:16;:28;;;;;;;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;-1:-1:-1;;;;;8736:31:14;::::1;:8;:31:::0;;;:24:::1;:31;::::0;;;;;:38;;-1:-1:-1;;8736:38:14::1;8770:4;8736:38;::::0;;8789:26;::::1;::::0;8736:8;8789:26:::1;8665:157:::0;:::o;3620:186::-;1011:8;:14;-1:-1:-1;;;;;1011:14:14;997:10;:28;993:51;;1034:10;;-1:-1:-1;;;1034:10:14;;;;;;;;;;;993:51;-1:-1:-1;;;;;3686:19:14;::::1;3682:45;;3714:13;;-1:-1:-1::0;;;3714:13:14::1;;;;;;;;;;;3682:45;-1:-1:-1::0;;;;;3737:23:14;::::1;:8;:23:::0;;;3763:4:::1;3737:23;::::0;;;;;;;:30;;-1:-1:-1;;3737:30:14::1;::::0;;::::1;::::0;;;3782:17;::::1;::::0;3737:8;3782:17:::1;3620:186:::0;:::o;8977:163::-;1121:10;1104:8;:28;;;:16;:28;;;;;;;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;-1:-1:-1;;;;;9051:31:14;::::1;9085:5;9051:31:::0;;;:24:::1;:31;::::0;;;;;:39;;-1:-1:-1;;9051:39:14::1;::::0;;9105:28;::::1;::::0;9085:5;9105:28:::1;8977:163:::0;:::o;24921:98::-;1011:8;:14;-1:-1:-1;;;;;1011:14:14;997:10;:28;993:51;;1034:10;;-1:-1:-1;;;1034:10:14;;;;;;;;;;;993:51;24967:15:::1;:22:::0;;-1:-1:-1;;24967:22:14::1;24985:4;24967:22;::::0;;25004:8:::1;::::0;::::1;::::0;24967::::1;::::0;25004::::1;24921:98::o:0;13093:646::-;3395:21:2;:19;:21::i;:::-;1214:15:14::1;::::0;::::1;;1210:44;;;1238:16;;-1:-1:-1::0;;;1238:16:14::1;;;;;;;;;;;1210:44;1334:8:::2;:34:::0;;;:23:::2;:34;::::0;;;;:43:::2;;::::0;13254:9;;1334:43:::2;;1329:85;;1398:16;;-1:-1:-1::0;;;1398:16:14::2;;;;;;;;;;;1329:85;13310:37:::3;::::0;-1:-1:-1;;;13310:37:14;;::::3;::::0;::::3;9047:25:17::0;;;13351:10:14::3;::::0;-1:-1:-1;;;;;13310:28:14;::::3;::::0;::::3;::::0;9020:18:17;;13310:37:14::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13310:51:14::3;;13306:95;;13382:19;;-1:-1:-1::0;;;13382:19:14::3;;;;;;;;;;;13306:95;13479:69;::::0;-1:-1:-1;;;13479:69:14;;13513:10:::3;13479:69;::::0;::::3;16782:51:17::0;13533:4:14::3;16849:18:17::0;;;16842:60;16918:18;;;16911:34;;;-1:-1:-1;;;;;13479:33:14;::::3;::::0;::::3;::::0;16755:18:17;;13479:69:14::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;13593:44;13615:10;13627:9;13593:21;:44::i;:::-;13675:57;::::0;;-1:-1:-1;;;;;17148:32:17;;17130:51;;17212:2;17197:18;;17190:34;;;13700:9:14;;13688:10:::3;::::0;13675:57:::3;::::0;17103:18:17;13675:57:14::3;;;;;;;1264:1:::2;3437:20:2::0;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:2;3860:283;3437:20;13093:646:14;;;:::o;17880:216::-;17988:41;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;17988:41:14;-1:-1:-1;;;;;;18048:30:14;;:8;:30;;;:24;:30;;;;;;;;:41;;;;;;;;;18041:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17880:216;;;;:::o;7690:757::-;1121:10;1104:8;:28;;;:16;:28;;;;;;;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;7874:6:::1;:13;7853:10;:17;:34;7849:68;;7896:21;;-1:-1:-1::0;;;7896:21:14::1;;;;;;;;;;;7849:68;-1:-1:-1::0;;;;;7932:31:14;::::1;:8;:31:::0;;;:24:::1;:31;::::0;;;;;::::1;;7927:63;;7972:18;;-1:-1:-1::0;;;7972:18:14::1;;;;;;;;;;;7927:63;8006:9;8001:440;8025:10;:17;8021:1;:21;8001:440;;;8123:6;8147:1;8123:39;;;;;;;;:::i;:::-;;;;;;;8063:8;:23;;:38;8087:10;8098:1;8087:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;8063:38;;;;::::1;::::0;;;;;;;;-1:-1:-1;8063:38:14;;;-1:-1:-1;;;;;8063:57:14;::::1;::::0;;;;;;:99;;;;8241:120:::1;;8337:6;8344:1;8337:9;;;;;;;;:::i;:::-;;;;;;;8284:8;:23;;:38;8308:10;8319:1;8308:13;;;;;;;;:::i;:::-;;;;;;;8284:38;;;;;;;;;;;:50;;:62;;;;8241:120;8413:5;-1:-1:-1::0;;;;;8380:50:14::1;8398:10;8409:1;8398:13;;;;;;;;:::i;:::-;;;;;;;8380:50;8420:6;8427:1;8420:9;;;;;;;;:::i;:::-;;;;;;;8380:50;;;;9047:25:17::0;;9035:2;9020:18;;8901:177;8380:50:14::1;;;;;;;;8044:3;;8001:440;;;;7690:757:::0;;;:::o;3031:263::-;1011:8;:14;-1:-1:-1;;;;;1011:14:14;997:10;:28;993:51;;1034:10;;-1:-1:-1;;;1034:10:14;;;;;;;;;;;993:51;3031:263::o;11395:1521::-;3395:21:2;:19;:21::i;:::-;1214:15:14::1;::::0;::::1;;1210:44;;;1238:16;;-1:-1:-1::0;;;1238:16:14::1;;;;;;;;;;;1210:44;-1:-1:-1::0;;;;;11579:38:14;::::2;:8;:38:::0;;;:24:::2;:38;::::0;;;;;::::2;;11574:70;;11626:18;;-1:-1:-1::0;;;11626:18:14::2;;;;;;;;;;;11574:70;11655:21;11695:9:::0;11690:516:::2;11714:10;:17;11710:1;:21;11690:516;;;11757:8;:23;;:38;11781:10;11792:1;11781:13;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;11757:38;;;::::2;::::0;;;;;;-1:-1:-1;11757:38:14;:47:::2;;::::0;::::2;;11752:93;;11829:16;;-1:-1:-1::0;;;11829:16:14::2;;;;;;;;;;;11752:93;-1:-1:-1::0;;;;;11864:26:14;::::2;11860:336;;11927:8;:44;;:59;11972:10;11983:1;11972:13;;;;;;;;:::i;:::-;;;;;;;11927:59;;;;;;;;;;;:92;;;11910:109;;;;;:::i;:::-;;;11860:336;;;12075:8;:44;;:59;12120:10;12131:1;12120:13;;;;;;;;:::i;:::-;;;;;;;12075:59;;;;;;;;;;;:92;;:106;12168:12;-1:-1:-1::0;;;;;12075:106:14::2;-1:-1:-1::0;;;;;12075:106:14::2;;;;;;;;;;;;;12058:123;;;;;:::i;:::-;;;11860:336;11733:3;;11690:516;;;;12235:13;12220:11;:28;12216:62;;12257:21;;-1:-1:-1::0;;;12257:21:14::2;;;;;;;;;;;12216:62;-1:-1:-1::0;;;;;12293:26:14;::::2;12289:352;;12388:11;12375:9;:24;12371:58;;12408:21;;-1:-1:-1::0;;;12408:21:14::2;;;;;;;;;;;12371:58;12289:352;;;12495:135;::::0;-1:-1:-1;;;12495:135:14;;12546:10:::2;12495:135;::::0;::::2;16782:51:17::0;12582:4:14::2;16849:18:17::0;;;16842:60;16918:18;;;16911:34;;;-1:-1:-1;;;;;12495:33:14;::::2;::::0;::::2;::::0;16755:18:17;;12495:135:14::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12289:352;12691:9;12686:121;12710:10;:17;12706:1;:21;12686:121;;;12748:48;12770:10;12782;12793:1;12782:13;;;;;;;;:::i;:::-;;;;;;;12748:21;:48::i;:::-;12729:3;;12686:121;;;;12859:10;-1:-1:-1::0;;;;;12844:65:14::2;;12871:10;12883:12;12897:11;12844:65;;;;;;;;:::i;:::-;;;;;;;;11564:1352;3437:20:2::0;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:2;3860:283;4442:534:14;1121:10;1104:8;:28;;;:16;:28;;;;;;;;1099:52;;1141:10;;-1:-1:-1;;;1141:10:14;;;;;;;;;;;1099:52;4646:8:::1;:34:::0;;;:23:::1;:34;::::0;;;;;;;:46:::1;::::0;::::1;:60:::0;;;4716:51;;::::1;:70:::0;;;4796:47:::1;::::0;::::1;:62:::0;;;4868:43:::1;::::0;;::::1;:54:::0;;-1:-1:-1;;4868:54:14::1;::::0;::::1;;;::::0;;4938:31;4646:34;;4938:31:::1;::::0;::::1;4442:534:::0;;;;;:::o;17205:511::-;17321:43;17376:67;17504:10;:17;-1:-1:-1;;;;;17446:89:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;17446:89:14;;;;;;;;;;;;;;;;;17376:159;;17551:9;17546:135;17570:10;:17;17566:1;:21;17546:135;;;-1:-1:-1;;;;;17625:30:14;;:8;:30;;;:24;:30;;;;;17656:13;;17625:30;;:8;17656:10;;17667:1;;17656:13;;;;;;:::i;:::-;;;;;;;;;;;;17625:45;;;;;;;;;;;;;-1:-1:-1;17625:45:14;17608:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;;:11;;17620:1;;17608:14;;;;;;:::i;:::-;;;;;;;;;;:62;17589:3;;17546:135;;9701:1434;3395:21:2;:19;:21::i;:::-;1214:15:14::1;::::0;::::1;;1210:44;;;1238:16;;-1:-1:-1::0;;;1238:16:14::1;;;;;;;;;;;1210:44;1334:8:::2;:34:::0;;;:23:::2;:34;::::0;;;;:43:::2;;::::0;9870:9;;1334:43:::2;;1329:85;;1398:16;;-1:-1:-1::0;;;1398:16:14::2;;;;;;;;;;;1329:85;-1:-1:-1::0;;;;;9896:38:14;::::3;:8;:38:::0;;;:24:::3;:38;::::0;;;;;::::3;;9891:70;;9943:18;;-1:-1:-1::0;;;9943:18:14::3;;;;;;;;;;;9891:70;9972:21;-1:-1:-1::0;;;;;10007:26:14;::::3;10003:683;;-1:-1:-1::0;10101:8:14::3;:34:::0;;;:23:::3;:34;::::0;;;;:46:::3;;::::0;10165:9:::3;:26:::0;::::3;10161:60;;10200:21;;-1:-1:-1::0;;;10200:21:14::3;;;;;;;;;;;10161:60;10249:9;10239:6;:19;10235:53;;10267:21;;-1:-1:-1::0;;;10267:21:14::3;;;;;;;;;;;10235:53;10003:683;;;-1:-1:-1::0;10370:8:14::3;:34:::0;;;:23:::3;:34;::::0;;;;;;;-1:-1:-1;;;;;10370:90:14;::::3;::::0;;;;;;;;10478:23;;::::3;10474:57;;10510:21;;-1:-1:-1::0;;;10510:21:14::3;;;;;;;;;;;10474:57;10545:130;::::0;-1:-1:-1;;;10545:130:14;;10596:10:::3;10545:130;::::0;::::3;16782:51:17::0;10632:4:14::3;16849:18:17::0;;;16842:60;16918:18;;;16911:34;;;-1:-1:-1;;;;;10545:33:14;::::3;::::0;::::3;::::0;16755:18:17;;10545:130:14::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10003:683;10730:44;10752:10;10764:9;10730:21;:44::i;:::-;10807:18;10858:34:::0;;;:23:::3;:34;::::0;;;;:47:::3;;::::0;10828:77:::3;::::0;:15:::3;:77;:::i;:::-;11043:8;:34:::0;;;:23:::3;:34;::::0;;;;;;;;:51;;::::3;::::0;10920:208;;-1:-1:-1;;;;;18168:32:17;;18150:51;;18217:18;;;18210:34;;;18260:18;;;18253:34;18318:2;18303:18;;18296:34;;;10920:208:14;;18296:34:17;;-1:-1:-1;11043:34:14;;10950:10:::3;::::0;10920:208:::3;::::0;;;;;18137:3:17;10920:208:14;;::::3;9881:1254;;1264:1:::2;3437:20:2::0;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:2;3860:283;22407:826:14;22495:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22495:40:14;22547:48;22598:47;;;:36;:47;;;;;;22547:48;22801:40;22635:9;22801:29;:40::i;:::-;22871:355;;;;;;;;22941:23;;;;22871:355;;;22996:19;;;;22871:355;;;;23043:15;;;;;;;22871:355;;;;;;;;;;;;;;;;;;;;23183:28;;22871:355;;;;-1:-1:-1;22871:355:14;;22407:826;-1:-1:-1;;;22407:826:14:o;16017:1005::-;-1:-1:-1;;;;;16193:43:14;;16122:4;16193:43;;;:37;:43;;;;;;;;:54;;;;;;;;16138:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16258:62;;16304:5;16297:12;;;;;16258:62;16462:8;:34;;;:23;:34;;;;;:47;;;16420:23;;:89;;16462:47;16420:89;:::i;:::-;16390:15;:119;16373:184;;;16541:5;16534:12;;;;;16373:184;16627:20;16650:47;;;:36;:47;;;;;;;:77;;;16742:17;;;16738:278;;16866:4;16859:11;;;;;;16738:278;-1:-1:-1;16976:25:14;;;:29;;;-1:-1:-1;16969:36:14;;9071:205:0;9129:30;;3147:66;9186:27;8819:122;2970:67:1;6929:20:0;:18;:20::i;2684:111:2:-;6929:20:0;:18;:20::i;:::-;2754:34:2::1;:32;:34::i;4578:312:1:-:0;4658:4;-1:-1:-1;;;;;4667:6:1;4650:23;;;:120;;;4764:6;-1:-1:-1;;;;;4728:42:1;:32;-1:-1:-1;;;;;;;;;;;1519:53:5;-1:-1:-1;;;;;1519:53:5;;1441:138;4728:32:1;-1:-1:-1;;;;;4728:42:1;;;4650:120;4633:251;;;4844:29;;-1:-1:-1;;;4844:29:1;;;;;;;;;;;3376:98:14;1011:8;:14;-1:-1:-1;;;;;1011:14:14;997:10;:28;993:51;;1034:10;;-1:-1:-1;;;1034:10:14;;;;;;;;;;;993:51;3376:98;:::o;6032:538:1:-;6149:17;-1:-1:-1;;;;;6131:50:1;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6131:52:1;;;;;;;;-1:-1:-1;;6131:52:1;;;;;;;;;;;;:::i;:::-;;;6127:437;;6493:60;;-1:-1:-1;;;6493:60:1;;-1:-1:-1;;;;;18694:32:17;;6493:60:1;;;18676:51:17;18649:18;;6493:60:1;;;;;;;;6127:437;-1:-1:-1;;;;;;;;;;;6225:40:1;;6221:120;;6292:34;;-1:-1:-1;;;6292:34:1;;;;;9047:25:17;;;9020:18;;6292:34:1;8901:177:17;6221:120:1;6354:54;6384:17;6403:4;6354:29;:54::i;5007:213::-;5081:4;-1:-1:-1;;;;;5090:6:1;5073:23;;5069:145;;5174:29;;-1:-1:-1;;;5174:29:1;;;;;;;;;;;3470:384:2;-1:-1:-1;;;;;;;;;;;3670:9:2;;-1:-1:-1;;3670:20:2;3666:88;;3713:30;;-1:-1:-1;;;3713:30:2;;;;;;;;;;;3666:88;1991:1;3828:19;;3470:384::o;13884:1875:14:-;-1:-1:-1;;;;;14021:43:14;;13967:51;14021:43;;;:37;:43;;;;;;;;:54;;;;;;;;14108:36;:47;;;;;;;:77;;;;14214:47;;;;;14021:54;;14108:77;;14214:47;14276:17;;;14272:1481;;14407:16;;;;;;:87;;;;-1:-1:-1;14462:21:14;;:32;;14486:8;;14462:32;:::i;:::-;14443:15;:51;;14407:87;14386:320;;;14685:7;;;13884:1875;;:::o;14386:320::-;14832:15;14808:39;;:21;14861:23;;;;:27;;;;14923:16;;;:23;;-1:-1:-1;;14923:23:14;;;;;;14272:1481;;;15061:16;;;;;;:87;;;;-1:-1:-1;15116:21:14;;:32;;15140:8;;15116:32;:::i;:::-;15097:15;:51;;15061:87;15040:703;;;15285:12;15258:8;:23;;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;15447:23:14;;;;15320:168;;;18912:25:17;;;18968:2;18953:18;;18946:34;;;;15382:9:14;;-1:-1:-1;;;;;15320:168:14;;;;;18885:18:17;15320:168:14;;;;;;;15040:703;;;15616:15;15592:39;;15649:23;;;;:38;;;15705:16;;;:23;;-1:-1:-1;;15705:23:14;;;;;;15040:703;13957:1802;;;13884:1875;;:::o;3860:283:2:-;1949:1;-1:-1:-1;;;;;;;;;;;4113:23:2;3860:283::o;23485:1325:14:-;23711:13;23786:36;;;:24;:36;;;;23604:32;;;;23786:36;;:102;;;;-1:-1:-1;23887:1:14;23838:34;;;:23;:34;;;;;:46;;;:50;;23786:102;23769:162;;;23913:7;;;;:::i;:::-;;;;23769:162;24239:5;-1:-1:-1;;;;;24225:20:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24225:20:14;;24207:38;;24278:5;-1:-1:-1;;;;;24264:20:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24264:20:14;-1:-1:-1;24295:13:14;24395:36;;;:24;:36;;;;24255:29;;-1:-1:-1;24295:13:14;24395:36;;:102;;;;-1:-1:-1;24496:1:14;24447:34;;;:23;:34;;;;;:46;;;:50;;24395:102;24378:287;;;24555:1;24522:15;24538:5;24522:22;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24522:35:14;;;:22;;;;;;;;;;:35;24587:8;:34;;;:23;:34;;;;;;:46;;;24571:13;;:6;;24578:5;;24571:13;;;;;;:::i;:::-;;;;;;;;;;:62;24647:7;;;;:::i;:::-;;;;24378:287;23667:1143;;23485:1325;;;:::o;7082:141:0:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:0;;;;;;;;;;;2801:183:2;6929:20:0;:18;:20::i;2264:344:5:-;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:5;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;8485:120:0:-;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:0;;;;;;-1:-1:-1;8485:120:0:o;1671:281:5:-;1748:17;-1:-1:-1;;;;;1748:29:5;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:5;;-1:-1:-1;;;;;18694:32:17;;1805:47:5;;;18676:51:17;18649:18;;1805:47:5;18530:203:17;1744:119:5;-1:-1:-1;;;;;;;;;;;1872:73:5;;-1:-1:-1;;;;;;1872:73:5;-1:-1:-1;;;;;1872:73:5;;;;;;;;;;1671:281::o;3916:253:10:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:10;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:10:o;6113:122:5:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:5;;;;;;;;;;;4437:582:10;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:10;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:10;;-1:-1:-1;;;;;18694:32:17;;4933:24:10;;;18676:51:17;18649:18;;4933:24:10;18530:203:17;4853:119:10;-1:-1:-1;4992:10:10;4605:408;4437:582;;;;;:::o;5559:487::-;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:10;;;;;;;;;;;14:131:17;-1:-1:-1;;;;;89:31:17;;79:42;;69:70;;135:1;132;125:12;150:367;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;481:2;466:18;;;;453:32;;-1:-1:-1;;;150:367:17:o;810:127::-;871:10;866:3;862:20;859:1;852:31;902:4;899:1;892:15;926:4;923:1;916:15;942:275;1013:2;1007:9;1078:2;1059:13;;-1:-1:-1;;1055:27:17;1043:40;;-1:-1:-1;;;;;1098:34:17;;1134:22;;;1095:62;1092:88;;;1160:18;;:::i;:::-;1196:2;1189:22;942:275;;-1:-1:-1;942:275:17:o;1222:183::-;1282:4;-1:-1:-1;;;;;1307:6:17;1304:30;1301:56;;;1337:18;;:::i;:::-;-1:-1:-1;1382:1:17;1378:14;1394:4;1374:25;;1222:183::o;1410:723::-;1464:5;1517:3;1510:4;1502:6;1498:17;1494:27;1484:55;;1535:1;1532;1525:12;1484:55;1575:6;1562:20;1602:64;1618:47;1658:6;1618:47;:::i;:::-;1602:64;:::i;:::-;1690:3;1714:6;1709:3;1702:19;1746:4;1741:3;1737:14;1730:21;;1807:4;1797:6;1794:1;1790:14;1782:6;1778:27;1774:38;1760:52;;1835:3;1827:6;1824:15;1821:35;;;1852:1;1849;1842:12;1821:35;1888:4;1880:6;1876:17;1902:200;1918:6;1913:3;1910:15;1902:200;;;2010:17;;2040:18;;2087:4;2078:14;;;;1935;1902:200;;;-1:-1:-1;2120:7:17;1410:723;-1:-1:-1;;;;;1410:723:17:o;2138:118::-;2224:5;2217:13;2210:21;2203:5;2200:32;2190:60;;2246:1;2243;2236:12;2261:738;2312:5;2365:3;2358:4;2350:6;2346:17;2342:27;2332:55;;2383:1;2380;2373:12;2332:55;2423:6;2410:20;2450:64;2466:47;2506:6;2466:47;:::i;2450:64::-;2538:3;2562:6;2557:3;2550:19;2594:4;2589:3;2585:14;2578:21;;2655:4;2645:6;2642:1;2638:14;2630:6;2626:27;2622:38;2608:52;;2683:3;2675:6;2672:15;2669:35;;;2700:1;2697;2690:12;2669:35;2736:4;2728:6;2724:17;2750:218;2766:6;2761:3;2758:15;2750:218;;;2848:3;2835:17;2865:28;2887:5;2865:28;:::i;:::-;2906:18;;2953:4;2944:14;;;;2783;2750:218;;3004:1312;3221:6;3229;3237;3245;3253;3306:3;3294:9;3285:7;3281:23;3277:33;3274:53;;;3323:1;3320;3313:12;3274:53;3363:9;3350:23;-1:-1:-1;;;;;3388:6:17;3385:30;3382:50;;;3428:1;3425;3418:12;3382:50;3451:61;3504:7;3495:6;3484:9;3480:22;3451:61;:::i;:::-;3441:71;;;3565:2;3554:9;3550:18;3537:32;-1:-1:-1;;;;;3584:8:17;3581:32;3578:52;;;3626:1;3623;3616:12;3578:52;3649:63;3704:7;3693:8;3682:9;3678:24;3649:63;:::i;:::-;3639:73;;;3765:2;3754:9;3750:18;3737:32;-1:-1:-1;;;;;3784:8:17;3781:32;3778:52;;;3826:1;3823;3816:12;3778:52;3849:63;3904:7;3893:8;3882:9;3878:24;3849:63;:::i;:::-;3839:73;;;3965:2;3954:9;3950:18;3937:32;-1:-1:-1;;;;;3984:8:17;3981:32;3978:52;;;4026:1;4023;4016:12;3978:52;4049:63;4104:7;4093:8;4082:9;4078:24;4049:63;:::i;:::-;4039:73;;;4165:3;4154:9;4150:19;4137:33;-1:-1:-1;;;;;4185:8:17;4182:32;4179:52;;;4227:1;4224;4217:12;4179:52;4250:60;4302:7;4291:8;4280:9;4276:24;4250:60;:::i;:::-;4240:70;;;3004:1312;;;;;;;;:::o;4321:247::-;4380:6;4433:2;4421:9;4412:7;4408:23;4404:32;4401:52;;;4449:1;4446;4439:12;4401:52;4488:9;4475:23;4507:31;4532:5;4507:31;:::i;4573:487::-;4650:6;4658;4666;4719:2;4707:9;4698:7;4694:23;4690:32;4687:52;;;4735:1;4732;4725:12;4687:52;4780:23;;;-1:-1:-1;4879:2:17;4864:18;;4851:32;4892:33;4851:32;4892:33;:::i;:::-;4573:487;;4944:7;;-1:-1:-1;;;5024:2:17;5009:18;;;;4996:32;;4573:487::o;5065:226::-;5124:6;5177:2;5165:9;5156:7;5152:23;5148:32;5145:52;;;5193:1;5190;5183:12;5145:52;-1:-1:-1;5238:23:17;;5065:226;-1:-1:-1;5065:226:17:o;5296:744::-;5350:5;5403:3;5396:4;5388:6;5384:17;5380:27;5370:55;;5421:1;5418;5411:12;5370:55;5461:6;5448:20;5488:64;5504:47;5544:6;5504:47;:::i;5488:64::-;5576:3;5600:6;5595:3;5588:19;5632:4;5627:3;5623:14;5616:21;;5693:4;5683:6;5680:1;5676:14;5668:6;5664:27;5660:38;5646:52;;5721:3;5713:6;5710:15;5707:35;;;5738:1;5735;5728:12;5707:35;5774:4;5766:6;5762:17;5788:221;5804:6;5799:3;5796:15;5788:221;;;5886:3;5873:17;5903:31;5928:5;5903:31;:::i;:::-;5947:18;;5994:4;5985:14;;;;5821;5788:221;;6045:725;6172:6;6180;6188;6241:2;6229:9;6220:7;6216:23;6212:32;6209:52;;;6257:1;6254;6247:12;6209:52;6296:9;6283:23;6315:31;6340:5;6315:31;:::i;:::-;6365:5;-1:-1:-1;6421:2:17;6406:18;;6393:32;-1:-1:-1;;;;;6437:30:17;;6434:50;;;6480:1;6477;6470:12;6434:50;6503:61;6556:7;6547:6;6536:9;6532:22;6503:61;:::i;:::-;6493:71;;;6617:2;6606:9;6602:18;6589:32;-1:-1:-1;;;;;6636:8:17;6633:32;6630:52;;;6678:1;6675;6668:12;6630:52;6701:63;6756:7;6745:8;6734:9;6730:24;6701:63;:::i;:::-;6691:73;;;6045:725;;;;;:::o;6775:900::-;6852:6;6860;6913:2;6901:9;6892:7;6888:23;6884:32;6881:52;;;6929:1;6926;6919:12;6881:52;6968:9;6955:23;6987:31;7012:5;6987:31;:::i;:::-;7037:5;-1:-1:-1;7093:2:17;7078:18;;7065:32;-1:-1:-1;;;;;7109:30:17;;7106:50;;;7152:1;7149;7142:12;7106:50;7175:22;;7228:4;7220:13;;7216:27;-1:-1:-1;7206:55:17;;7257:1;7254;7247:12;7206:55;7297:2;7284:16;-1:-1:-1;;;;;7315:6:17;7312:30;7309:56;;;7345:18;;:::i;:::-;7387:57;7434:2;7411:17;;-1:-1:-1;;7407:31:17;7440:2;7403:40;7387:57;:::i;:::-;7467:6;7460:5;7453:21;7515:7;7510:2;7501:6;7497:2;7493:15;7489:24;7486:37;7483:57;;;7536:1;7533;7526:12;7483:57;7591:6;7586:2;7582;7578:11;7573:2;7566:5;7562:14;7549:49;7643:1;7638:2;7629:6;7622:5;7618:18;7614:27;7607:38;7664:5;7654:15;;;;;6775:900;;;;;:::o;7680:590::-;7798:6;7806;7859:2;7847:9;7838:7;7834:23;7830:32;7827:52;;;7875:1;7872;7865:12;7827:52;7915:9;7902:23;-1:-1:-1;;;;;7940:6:17;7937:30;7934:50;;;7980:1;7977;7970:12;7934:50;8003:61;8056:7;8047:6;8036:9;8032:22;8003:61;:::i;:::-;7993:71;;;8117:2;8106:9;8102:18;8089:32;-1:-1:-1;;;;;8136:8:17;8133:32;8130:52;;;8178:1;8175;8168:12;8130:52;8201:63;8256:7;8245:8;8234:9;8230:24;8201:63;:::i;:::-;8191:73;;;7680:590;;;;;:::o;8275:621::-;8459:2;8471:21;;;8541:13;;8444:18;;;8563:22;;;8411:4;;8642:15;;;8616:2;8601:18;;;8411:4;8685:185;8699:6;8696:1;8693:13;8685:185;;;8774:13;;8767:21;8760:29;8748:42;;8819:2;8845:15;;;;8810:12;;;;8721:1;8714:9;8685:185;;;-1:-1:-1;8887:3:17;;8275:621;-1:-1:-1;;;;;8275:621:17:o;9497:267::-;9345:12;;9333:25;;9407:4;9396:16;;;9390:23;9374:14;;;9367:47;9477:4;9466:16;;;9460:23;9453:31;9446:39;9430:14;;;9423:63;9695:2;9680:18;;9707:51;9265:227;9769:725;9896:6;9904;9912;9965:2;9953:9;9944:7;9940:23;9936:32;9933:52;;;9981:1;9978;9971:12;9933:52;10021:9;10008:23;-1:-1:-1;;;;;10046:6:17;10043:30;10040:50;;;10086:1;10083;10076:12;10040:50;10109:61;10162:7;10153:6;10142:9;10138:22;10109:61;:::i;:::-;10099:71;;;10220:2;10209:9;10205:18;10192:32;10233:31;10258:5;10233:31;:::i;:::-;10283:5;-1:-1:-1;10341:2:17;10326:18;;10313:32;-1:-1:-1;;;;;10357:32:17;;10354:52;;;10402:1;10399;10392:12;10354:52;10425:63;10480:7;10469:8;10458:9;10454:24;10425:63;:::i;10499:603::-;10601:6;10609;10617;10670:2;10658:9;10649:7;10645:23;10641:32;10638:52;;;10686:1;10683;10676:12;10638:52;10726:9;10713:23;-1:-1:-1;;;;;10751:6:17;10748:30;10745:50;;;10791:1;10788;10781:12;10745:50;10814:61;10867:7;10858:6;10847:9;10843:22;10814:61;:::i;:::-;10804:71;;;10925:2;10914:9;10910:18;10897:32;10938:31;10963:5;10938:31;:::i;11107:250::-;11192:1;11202:113;11216:6;11213:1;11210:13;11202:113;;;11292:11;;;11286:18;11273:11;;;11266:39;11238:2;11231:10;11202:113;;;-1:-1:-1;;11349:1:17;11331:16;;11324:27;11107:250::o;11362:396::-;11511:2;11500:9;11493:21;11474:4;11543:6;11537:13;11586:6;11581:2;11570:9;11566:18;11559:34;11602:79;11674:6;11669:2;11658:9;11654:18;11649:2;11641:6;11637:15;11602:79;:::i;:::-;11742:2;11721:15;-1:-1:-1;;11717:29:17;11702:45;;;;11749:2;11698:54;;11362:396;-1:-1:-1;;11362:396:17:o;11763:723::-;11855:6;11863;11871;11879;11887;11940:3;11928:9;11919:7;11915:23;11911:33;11908:53;;;11957:1;11954;11947:12;11908:53;12002:23;;;-1:-1:-1;12122:2:17;12107:18;;12094:32;;-1:-1:-1;12225:2:17;12210:18;;12197:32;;-1:-1:-1;12328:2:17;12313:18;;12300:32;;-1:-1:-1;12410:3:17;12395:19;;12382:33;12424:30;12382:33;12424:30;:::i;:::-;12473:7;12463:17;;;11763:723;;;;;;;;:::o;12491:483::-;12584:6;12592;12645:2;12633:9;12624:7;12620:23;12616:32;12613:52;;;12661:1;12658;12651:12;12613:52;12700:9;12687:23;12719:31;12744:5;12719:31;:::i;:::-;12769:5;-1:-1:-1;12825:2:17;12810:18;;12797:32;-1:-1:-1;;;;;12841:30:17;;12838:50;;;12884:1;12881;12874:12;12979:703;13233:2;13245:21;;;13315:13;;13218:18;;;13337:22;;;13185:4;;13416:15;;;13390:2;13375:18;;;13185:4;13459:197;13473:6;13470:1;13467:13;13459:197;;;13522:52;13570:3;13561:6;13555:13;9345:12;;9333:25;;9407:4;9396:16;;;9390:23;9374:14;;;9367:47;9477:4;9466:16;;;9460:23;9453:31;9446:39;9430:14;;9423:63;9265:227;13522:52;13643:2;13631:15;;;;;13603:4;13594:14;;;;;13495:1;13488:9;13459:197;;13687:420;13740:3;13778:5;13772:12;13805:6;13800:3;13793:19;13837:4;13832:3;13828:14;13821:21;;13876:4;13869:5;13865:16;13899:1;13909:173;13923:6;13920:1;13917:13;13909:173;;;13984:13;;13972:26;;14027:4;14018:14;;;;14055:17;;;;13945:1;13938:9;13909:173;;;-1:-1:-1;14098:3:17;;13687:420;-1:-1:-1;;;;13687:420:17:o;14112:1268::-;14315:2;14304:9;14297:21;14278:4;14356:3;14345:9;14341:19;14402:6;14396:13;14391:2;14380:9;14376:18;14369:41;14464:2;14456:6;14452:15;14446:22;14441:2;14430:9;14426:18;14419:50;14537:2;14529:6;14525:15;14519:22;14512:30;14505:38;14500:2;14489:9;14485:18;14478:66;14591:2;14583:6;14579:15;14573:22;14632:4;14626:3;14615:9;14611:19;14604:33;14657:6;14692:12;14686:19;14729:6;14721;14714:22;14767:3;14756:9;14752:19;14745:26;;14812:2;14798:12;14794:21;14780:35;;14833:1;14824:10;;14843:195;14857:6;14854:1;14851:13;14843:195;;;14922:13;;-1:-1:-1;;;;;14918:39:17;14906:52;;14987:2;15013:15;;;;14954:1;14872:9;;;;;14978:12;;;;14843:195;;;-1:-1:-1;15087:3:17;15075:16;;15069:23;15133:19;;;-1:-1:-1;;15129:33:17;15123:3;15108:19;;15101:62;15069:23;-1:-1:-1;15186:49:17;15137:3;15069:23;15186:49;:::i;:::-;15172:63;;;;15284:3;15276:6;15272:16;15266:23;15298:53;15345:4;15334:9;15330:20;15314:14;592:13;585:21;573:34;;522:91;15385:127;15446:10;15441:3;15437:20;15434:1;15427:31;15477:4;15474:1;15467:15;15501:4;15498:1;15491:15;15517:125;15582:9;;;15603:10;;;15600:36;;;15616:18;;:::i;15837:136::-;15876:3;15904:5;15894:39;;15913:18;;:::i;:::-;-1:-1:-1;;;15949:18:17;;15837:136::o;15978:127::-;16039:10;16034:3;16030:20;16027:1;16020:31;16070:4;16067:1;16060:15;16094:4;16091:1;16084:15;16324:251;16394:6;16447:2;16435:9;16426:7;16422:23;16418:32;16415:52;;;16463:1;16460;16453:12;16415:52;16495:9;16489:16;16514:31;16539:5;16514:31;:::i;17235:245::-;17302:6;17355:2;17343:9;17334:7;17330:23;17326:32;17323:52;;;17371:1;17368;17361:12;17323:52;17403:9;17397:16;17422:28;17444:5;17422:28;:::i;17485:429::-;17720:2;17709:9;17702:21;17683:4;17740:56;17792:2;17781:9;17777:18;17769:6;17740:56;:::i;:::-;-1:-1:-1;;;;;17832:32:17;;;;17827:2;17812:18;;17805:60;-1:-1:-1;17896:2:17;17881:18;17874:34;17732:64;17485:429;-1:-1:-1;17485:429:17:o;18341:184::-;18411:6;18464:2;18452:9;18443:7;18439:23;18435:32;18432:52;;;18480:1;18477;18470:12;18432:52;-1:-1:-1;18503:16:17;;18341:184;-1:-1:-1;18341:184:17:o;18991:135::-;19030:3;19051:17;;;19048:43;;19071:18;;:::i;:::-;-1:-1:-1;19118:1:17;19107:13;;18991:135::o;19131:287::-;19260:3;19298:6;19292:13;19314:66;19373:6;19368:3;19361:4;19353:6;19349:17;19314:66;:::i;:::-;19396:16;;;;;19131:287;-1:-1:-1;;19131:287:17:o"},"gasEstimates":{"creation":{"codeDepositCost":"2579200","executionCost":"infinite","totalCost":"infinite"},"external":{"UPGRADE_INTERFACE_VERSION()":"infinite","addAdmin(address)":"27982","addSupportedToken(address)":"28051","batchConsumeView(address[],uint256[])":"infinite","batchPurchase(uint256[],address,uint256)":"infinite","batchSetContentConfig(uint256[],uint256[],uint256[],uint256[],bool[])":"infinite","batchUpdateTokenPrice(uint256[],address,uint256[])":"infinite","consumeView(address,uint256)":"infinite","getContentPurchaseInfo(uint256)":"infinite","getPermissionDetails(address,uint256)":"7233","getUserPermissions(address,uint256[])":"infinite","hasViewPermission(address,uint256)":"infinite","initialize(address,address[],address[])":"infinite","isContentActive(uint256)":"2491","isSupportedToken(address)":"2622","migrate()":"2436","pause()":"27366","proxiableUUID()":"infinite","purchaseContent(uint256,address,uint256)":"infinite","purchaseWithNFT(uint256,address,uint256)":"infinite","removeAdmin(address)":"27986","removeSupportedToken(address)":"28002","setContentConfig(uint256,uint256,uint256,uint256,bool)":"94476","unpause()":"27404","updateTokenPrice(uint256,address,uint256)":"51174","upgradeToAndCall(address,bytes)":"infinite","version()":"2381"},"internal":{"_authorizeUpgrade(address)":"infinite","_getSupportedTokensForContent(uint256)":"infinite","_updateViewPermission(address,uint256)":"infinite"}},"methodIdentifiers":{"UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","addAdmin(address)":"70480275","addSupportedToken(address)":"6d69fcaf","batchConsumeView(address[],uint256[])":"529e2b32","batchPurchase(uint256[],address,uint256)":"99ea24fe","batchSetContentConfig(uint256[],uint256[],uint256[],uint256[],bool[])":"09b952be","batchUpdateTokenPrice(uint256[],address,uint256[])":"8f0ff11b","consumeView(address,uint256)":"05059571","getContentPurchaseInfo(uint256)":"b8e8f98e","getPermissionDetails(address,uint256)":"8d13660e","getUserPermissions(address,uint256[])":"b303f53f","hasViewPermission(address,uint256)":"caae24b3","initialize(address,address[],address[])":"4a200fa5","isContentActive(uint256)":"40033b3d","isSupportedToken(address)":"240028e8","migrate()":"8fd3ab80","pause()":"8456cb59","proxiableUUID()":"52d1902d","purchaseContent(uint256,address,uint256)":"b6f1d140","purchaseWithNFT(uint256,address,uint256)":"86778641","removeAdmin(address)":"1785f53c","removeSupportedToken(address)":"76319190","setContentConfig(uint256,uint256,uint256,uint256,bool)":"b1b105fe","unpause()":"3f4ba83a","updateTokenPrice(uint256,address,uint256)":"3428cebb","upgradeToAndCall(address,bytes)":"4f1ef286","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyPurchased\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArrayLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientPayment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoValidPermission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AdminRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"}],\"name\":\"BatchPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"ContentConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"viewCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validUntil\",\"type\":\"uint256\"}],\"name\":\"ContentPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"NFTPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"PermissionExpired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SupportedTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SupportedTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"TokenPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingViews\",\"type\":\"uint256\"}],\"name\":\"ViewConsumed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addedCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalRemaining\",\"type\":\"uint256\"}],\"name\":\"ViewCountAdded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addSupportedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"users\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"}],\"name\":\"batchConsumeView\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"}],\"name\":\"batchPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"nativePrices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defaultViewCounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"viewDurations\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"isActiveArray\",\"type\":\"bool[]\"}],\"name\":\"batchSetContentConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"batchUpdateTokenPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"consumeView\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"getContentPurchaseInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"defaultViewCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"viewDuration\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"supportedTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrices\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"isUnlimitedViewing\",\"type\":\"bool\"}],\"internalType\":\"struct IVideoPayment.ContentPurchaseInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"getPermissionDetails\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"purchaseTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingViews\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct VideoPaymentStorage.ViewPermission\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"}],\"name\":\"getUserPermissions\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"purchaseTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingViews\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct VideoPaymentStorage.ViewPermission[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"hasViewPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"initialAdmins\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"supportedTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"isContentActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"purchaseContent\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"nftContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"purchaseWithNFT\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"removeSupportedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nativePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultViewCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"viewDuration\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"name\":\"setContentConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"updateTokenPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Main contract for video content payment and access control\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"addAdmin(address)\":{\"details\":\"Add admin\",\"params\":{\"admin\":\"Admin address to add\"}},\"addSupportedToken(address)\":{\"details\":\"Add supported token (address(0) for native token)\",\"params\":{\"token\":\"Token address to add (address(0) for native)\"}},\"batchConsumeView(address[],uint256[])\":{\"details\":\"Batch consume views for multiple users\",\"params\":{\"contentIds\":\"Content ID array\",\"users\":\"User address array\"},\"returns\":{\"_0\":\"Success status array\"}},\"batchPurchase(uint256[],address,uint256)\":{\"details\":\"Batch purchase content with token (address(0) for native token)\",\"params\":{\"contentIds\":\"Content ID array\",\"paymentToken\":\"Payment token address (address(0) for native)\",\"totalAmount\":\"Total payment amount\"}},\"batchSetContentConfig(uint256[],uint256[],uint256[],uint256[],bool[])\":{\"details\":\"Batch set content configurations\",\"params\":{\"contentIds\":\"Content ID array\",\"defaultViewCounts\":\"Default view count array\",\"isActiveArray\":\"Active status array\",\"nativePrices\":\"Native price array\",\"viewDurations\":\"View duration array\"}},\"batchUpdateTokenPrice(uint256[],address,uint256[])\":{\"details\":\"Batch update token prices for multiple contents (address(0) for native token)\",\"params\":{\"contentIds\":\"Content ID array\",\"prices\":\"Price array\",\"token\":\"Token address (address(0) for native)\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"consumeView(address,uint256)\":{\"details\":\"Consume one view for user\",\"params\":{\"contentId\":\"Content ID\",\"user\":\"User address\"},\"returns\":{\"_0\":\"Success status\"}},\"getContentPurchaseInfo(uint256)\":{\"details\":\"Get content purchase information\",\"params\":{\"contentId\":\"Content ID\"},\"returns\":{\"_0\":\"Purchase information including supported tokens and prices\"}},\"getPermissionDetails(address,uint256)\":{\"details\":\"Get detailed permission info\",\"params\":{\"contentId\":\"Content ID\",\"user\":\"User address\"},\"returns\":{\"_0\":\"Permission details\"}},\"getUserPermissions(address,uint256[])\":{\"details\":\"Get user permissions for multiple contents\",\"params\":{\"contentIds\":\"Content ID array\",\"user\":\"User address\"},\"returns\":{\"_0\":\"Permission array\"}},\"hasViewPermission(address,uint256)\":{\"details\":\"Check if user has valid view permission\",\"params\":{\"contentId\":\"Content ID\",\"user\":\"User address\"},\"returns\":{\"_0\":\"Whether user has valid permission\"}},\"initialize(address,address[],address[])\":{\"details\":\"Initialize the contract\",\"params\":{\"initialAdmins\":\"Initial admin addresses array\",\"initialOwner\":\"Initial owner address\",\"supportedTokenAddresses\":\"Initial supported token addresses array\"}},\"isContentActive(uint256)\":{\"details\":\"Check if content is active\",\"params\":{\"contentId\":\"Content ID\"},\"returns\":{\"_0\":\"Whether content is active\"}},\"isSupportedToken(address)\":{\"details\":\"Check if token is supported\",\"params\":{\"token\":\"Token address to check\"},\"returns\":{\"_0\":\"Whether token is supported\"}},\"migrate()\":{\"details\":\"Migration function for future upgrades\"},\"pause()\":{\"details\":\"Pause contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"purchaseContent(uint256,address,uint256)\":{\"details\":\"Purchase content with token (address(0) for native token)\",\"params\":{\"amount\":\"Payment amount\",\"contentId\":\"Content ID\",\"paymentToken\":\"Payment token address (address(0) for native)\"}},\"purchaseWithNFT(uint256,address,uint256)\":{\"details\":\"Purchase content with NFT\",\"params\":{\"contentId\":\"Content ID\",\"nftContract\":\"NFT contract address\",\"tokenId\":\"NFT token ID\"}},\"removeAdmin(address)\":{\"details\":\"Remove admin\",\"params\":{\"admin\":\"Admin address to remove\"}},\"removeSupportedToken(address)\":{\"details\":\"Remove supported token (address(0) for native token)\",\"params\":{\"token\":\"Token address to remove (address(0) for native)\"}},\"setContentConfig(uint256,uint256,uint256,uint256,bool)\":{\"details\":\"Set content configuration\",\"params\":{\"contentId\":\"Content ID\",\"defaultViewCount\":\"Default view count\",\"isActive\":\"Whether content is active\",\"nativePrice\":\"Native coin price\",\"viewDuration\":\"View duration in seconds\"}},\"unpause()\":{\"details\":\"Unpause contract\"},\"updateTokenPrice(uint256,address,uint256)\":{\"details\":\"Update token price for content (address(0) for native token)\",\"params\":{\"contentId\":\"Content ID\",\"price\":\"New price\",\"token\":\"Token address (address(0) for native)\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"version()\":{\"details\":\"Get contract version\"}},\"title\":\"VideoPayment\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/VideoPayment.sol\":\"VideoPayment\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.20;\\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 * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\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 Storage of the initializable contract.\\n     *\\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\\n     * when using with upgradeable contracts.\\n     *\\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\\n     */\\n    struct InitializableStorage {\\n        /**\\n         * @dev Indicates that the contract has been initialized.\\n         */\\n        uint64 _initialized;\\n        /**\\n         * @dev Indicates that the contract is in the process of being initialized.\\n         */\\n        bool _initializing;\\n    }\\n\\n    // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.Initializable\\\")) - 1)) & ~bytes32(uint256(0xff))\\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\\n\\n    /**\\n     * @dev The contract is already initialized.\\n     */\\n    error InvalidInitialization();\\n\\n    /**\\n     * @dev The contract is not initializing.\\n     */\\n    error NotInitializing();\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint64 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 in the context of a constructor an `initializer` may be invoked any\\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\\n     * production.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        // Cache values to avoid duplicated sloads\\n        bool isTopLevelCall = !$._initializing;\\n        uint64 initialized = $._initialized;\\n\\n        // Allowed calls:\\n        // - initialSetup: the contract is not in the initializing state and no previous version was\\n        //                 initialized\\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\\n        //                 current contract is just being deployed\\n        bool initialSetup = initialized == 0 && isTopLevelCall;\\n        bool construction = initialized == 1 && address(this).code.length == 0;\\n\\n        if (!initialSetup && !construction) {\\n            revert InvalidInitialization();\\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 2**64 - 1 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint64 version) {\\n        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing || $._initialized >= version) {\\n            revert InvalidInitialization();\\n        }\\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        _checkInitializing();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\\n     */\\n    function _checkInitializing() internal view virtual {\\n        if (!_isInitializing()) {\\n            revert NotInitializing();\\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        // solhint-disable-next-line var-name-mixedcase\\n        InitializableStorage storage $ = _getInitializableStorage();\\n\\n        if ($._initializing) {\\n            revert InvalidInitialization();\\n        }\\n        if ($._initialized != type(uint64).max) {\\n            $._initialized = type(uint64).max;\\n            emit Initialized(type(uint64).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n     */\\n    function _getInitializedVersion() internal view returns (uint64) {\\n        return _getInitializableStorage()._initialized;\\n    }\\n\\n    /**\\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _getInitializableStorage()._initializing;\\n    }\\n\\n    /**\\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\\n     *\\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\\n     */\\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\\n        return INITIALIZABLE_STORAGE;\\n    }\\n\\n    /**\\n     * @dev Returns a pointer to the storage namespace.\\n     */\\n    // solhint-disable-next-line var-name-mixedcase\\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\\n        bytes32 slot = _initializableStorageSlot();\\n        assembly {\\n            $.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.22;\\n\\nimport {IERC1822Proxiable} from \\\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\\\";\\nimport {ERC1967Utils} from \\\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\\\";\\nimport {Initializable} from \\\"./Initializable.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n */\\nabstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {\\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n    address private immutable __self = address(this);\\n\\n    /**\\n     * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\\n     * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\\n     * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\\n     * If the getter returns `\\\"5.0.0\\\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\\n     * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\\n     * during an upgrade.\\n     */\\n    string public constant UPGRADE_INTERFACE_VERSION = \\\"5.0.0\\\";\\n\\n    /**\\n     * @dev The call is from an unauthorized context.\\n     */\\n    error UUPSUnauthorizedCallContext();\\n\\n    /**\\n     * @dev The storage `slot` is unsupported as a UUID.\\n     */\\n    error UUPSUnsupportedProxiableUUID(bytes32 slot);\\n\\n    /**\\n     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n     * a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case\\n     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n     * function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n     * fail.\\n     */\\n    modifier onlyProxy() {\\n        _checkProxy();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n     * callable on the implementing contract but not through proxies.\\n     */\\n    modifier notDelegated() {\\n        _checkNotDelegated();\\n        _;\\n    }\\n\\n    function __UUPSUpgradeable_init() internal onlyInitializing {\\n    }\\n\\n    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the\\n     * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n     */\\n    function proxiableUUID() external view virtual notDelegated returns (bytes32) {\\n        return ERC1967Utils.IMPLEMENTATION_SLOT;\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n     * encoded in `data`.\\n     *\\n     * Calls {_authorizeUpgrade}.\\n     *\\n     * Emits an {Upgraded} event.\\n     *\\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\\n        _authorizeUpgrade(newImplementation);\\n        _upgradeToAndCallUUPS(newImplementation, data);\\n    }\\n\\n    /**\\n     * @dev Reverts if the execution is not performed via delegatecall or the execution\\n     * context is not of a proxy with an ERC-1967 compliant implementation pointing to self.\\n     */\\n    function _checkProxy() internal view virtual {\\n        if (\\n            address(this) == __self || // Must be called through delegatecall\\n            ERC1967Utils.getImplementation() != __self // Must be called through an active proxy\\n        ) {\\n            revert UUPSUnauthorizedCallContext();\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts if the execution is performed via delegatecall.\\n     * See {notDelegated}.\\n     */\\n    function _checkNotDelegated() internal view virtual {\\n        if (address(this) != __self) {\\n            // Must not be called through delegatecall\\n            revert UUPSUnauthorizedCallContext();\\n        }\\n    }\\n\\n    /**\\n     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n     * {upgradeToAndCall}.\\n     *\\n     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n     *\\n     * ```solidity\\n     * function _authorizeUpgrade(address) internal onlyOwner {}\\n     * ```\\n     */\\n    function _authorizeUpgrade(address newImplementation) internal virtual;\\n\\n    /**\\n     * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\\n     *\\n     * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\\n     * is expected to be the implementation slot in ERC-1967.\\n     *\\n     * Emits an {IERC1967-Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {\\n        try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n            if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {\\n                revert UUPSUnsupportedProxiableUUID(slot);\\n            }\\n            ERC1967Utils.upgradeToAndCall(newImplementation, data);\\n        } catch {\\n            // The implementation is not UUPS\\n            revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.20;\\nimport {Initializable} from \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,\\n * consider using {ReentrancyGuardTransient} instead.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant NOT_ENTERED = 1;\\n    uint256 private constant ENTERED = 2;\\n\\n    /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard\\n    struct ReentrancyGuardStorage {\\n        uint256 _status;\\n    }\\n\\n    // keccak256(abi.encode(uint256(keccak256(\\\"openzeppelin.storage.ReentrancyGuard\\\")) - 1)) & ~bytes32(uint256(0xff))\\n    bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\\n\\n    function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) {\\n        assembly {\\n            $.slot := ReentrancyGuardStorageLocation\\n        }\\n    }\\n\\n    /**\\n     * @dev Unauthorized reentrant call.\\n     */\\n    error ReentrancyGuardReentrantCall();\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        $._status = NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\\n        if ($._status == ENTERED) {\\n            revert ReentrancyGuardReentrantCall();\\n        }\\n\\n        // Any calls to nonReentrant after this point will fail\\n        $._status = ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        $._status = NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();\\n        return $._status == ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x361126a17677994081cd9cb69c3f50cffff6e920d25cb7e428acdb1ae41d1866\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n */\\ninterface IERC1967 {\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Emitted when the beacon is changed.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.2.0) (proxy/ERC1967/ERC1967Utils.sol)\\n\\npragma solidity ^0.8.22;\\n\\nimport {IBeacon} from \\\"../beacon/IBeacon.sol\\\";\\nimport {IERC1967} from \\\"../../interfaces/IERC1967.sol\\\";\\nimport {Address} from \\\"../../utils/Address.sol\\\";\\nimport {StorageSlot} from \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This library provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.\\n */\\nlibrary ERC1967Utils {\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev The `implementation` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidImplementation(address implementation);\\n\\n    /**\\n     * @dev The `admin` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidAdmin(address admin);\\n\\n    /**\\n     * @dev The `beacon` of the proxy is invalid.\\n     */\\n    error ERC1967InvalidBeacon(address beacon);\\n\\n    /**\\n     * @dev An upgrade function sees `msg.value > 0` that may be lost.\\n     */\\n    error ERC1967NonPayable();\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the ERC-1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        if (newImplementation.code.length == 0) {\\n            revert ERC1967InvalidImplementation(newImplementation);\\n        }\\n        StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Performs implementation upgrade with additional setup call if data is nonempty.\\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\\n     * to avoid stuck value in the contract.\\n     *\\n     * Emits an {IERC1967-Upgraded} event.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes memory data) internal {\\n        _setImplementation(newImplementation);\\n        emit IERC1967.Upgraded(newImplementation);\\n\\n        if (data.length > 0) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        } else {\\n            _checkNonPayable();\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\\n     * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the ERC-1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        if (newAdmin == address(0)) {\\n            revert ERC1967InvalidAdmin(address(0));\\n        }\\n        StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {IERC1967-AdminChanged} event.\\n     */\\n    function changeAdmin(address newAdmin) internal {\\n        emit IERC1967.AdminChanged(getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.beacon\\\" subtracted by 1.\\n     */\\n    // solhint-disable-next-line private-vars-leading-underscore\\n    bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the ERC-1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        if (newBeacon.code.length == 0) {\\n            revert ERC1967InvalidBeacon(newBeacon);\\n        }\\n\\n        StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\\n\\n        address beaconImplementation = IBeacon(newBeacon).implementation();\\n        if (beaconImplementation.code.length == 0) {\\n            revert ERC1967InvalidImplementation(beaconImplementation);\\n        }\\n    }\\n\\n    /**\\n     * @dev Change the beacon and trigger a setup call if data is nonempty.\\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\\n     * to avoid stuck value in the contract.\\n     *\\n     * Emits an {IERC1967-BeaconUpgraded} event.\\n     *\\n     * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\\n     * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\\n     * efficiency.\\n     */\\n    function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\\n        _setBeacon(newBeacon);\\n        emit IERC1967.BeaconUpgraded(newBeacon);\\n\\n        if (data.length > 0) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        } else {\\n            _checkNonPayable();\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\\n     * if an upgrade doesn't perform an initialization call.\\n     */\\n    function _checkNonPayable() private {\\n        if (msg.value > 0) {\\n            revert ERC1967NonPayable();\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {UpgradeableBeacon} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC1155/IERC1155.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC-1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[ERC].\\n */\\ninterface IERC1155 is IERC165 {\\n    /**\\n     * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\\n     */\\n    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n    /**\\n     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n     * transfers.\\n     */\\n    event TransferBatch(\\n        address indexed operator,\\n        address indexed from,\\n        address indexed to,\\n        uint256[] ids,\\n        uint256[] values\\n    );\\n\\n    /**\\n     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n     * `approved`.\\n     */\\n    event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n    /**\\n     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n     *\\n     * If an {URI} event was emitted for `id`, the standard\\n     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n     * returned by {IERC1155MetadataURI-uri}.\\n     */\\n    event URI(string value, uint256 indexed id);\\n\\n    /**\\n     * @dev Returns the value of tokens of token type `id` owned by `account`.\\n     */\\n    function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n    /**\\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n     *\\n     * Requirements:\\n     *\\n     * - `accounts` and `ids` must have the same length.\\n     */\\n    function balanceOfBatch(\\n        address[] calldata accounts,\\n        uint256[] calldata ids\\n    ) external view returns (uint256[] memory);\\n\\n    /**\\n     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n     *\\n     * Emits an {ApprovalForAll} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `operator` cannot be the zero address.\\n     */\\n    function setApprovalForAll(address operator, bool approved) external;\\n\\n    /**\\n     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n     *\\n     * See {setApprovalForAll}.\\n     */\\n    function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n    /**\\n     * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`.\\n     *\\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver.\\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\\n     * reentrancy guards when interacting with untrusted contracts.\\n     *\\n     * Emits a {TransferSingle} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n     * - `from` must have a balance of tokens of type `id` of at least `value` amount.\\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n     * acceptance magic value.\\n     */\\n    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n\\n    /**\\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n     *\\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver.\\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\\n     * reentrancy guards when interacting with untrusted contracts.\\n     *\\n     * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments.\\n     *\\n     * Requirements:\\n     *\\n     * - `ids` and `values` must have the same length.\\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n     * acceptance magic value.\\n     */\\n    function safeBatchTransferFrom(\\n        address from,\\n        address to,\\n        uint256[] calldata ids,\\n        uint256[] calldata values,\\n        bytes calldata data\\n    ) external;\\n}\\n\",\"keccak256\":\"0x1d7a05b3219532ea5ece50a80cf390cac9109dc74e07763adfa463ab5a3af0dc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n     * caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC-721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n    /**\\n     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n    /**\\n     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n     */\\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n    /**\\n     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n     */\\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n    /**\\n     * @dev Returns the number of tokens in ``owner``'s account.\\n     */\\n    function balanceOf(address owner) external view returns (uint256 balance);\\n\\n    /**\\n     * @dev Returns the owner of the `tokenId` token.\\n     *\\n     * Requirements:\\n     *\\n     * - `tokenId` must exist.\\n     */\\n    function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n    /**\\n     * @dev Safely transfers `tokenId` token from `from` to `to`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `tokenId` token must exist and be owned by `from`.\\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\\n     *   a safe transfer.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n    /**\\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `tokenId` token must exist and be owned by `from`.\\n     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or\\n     *   {setApprovalForAll}.\\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon\\n     *   a safe transfer.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n    /**\\n     * @dev Transfers `tokenId` token from `from` to `to`.\\n     *\\n     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721\\n     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n     * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `tokenId` token must be owned by `from`.\\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n    /**\\n     * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n     * The approval is cleared when the token is transferred.\\n     *\\n     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n     *\\n     * Requirements:\\n     *\\n     * - The caller must own the token or be an approved operator.\\n     * - `tokenId` must exist.\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address to, uint256 tokenId) external;\\n\\n    /**\\n     * @dev Approve or remove `operator` as an operator for the caller.\\n     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n     *\\n     * Requirements:\\n     *\\n     * - The `operator` cannot be the address zero.\\n     *\\n     * Emits an {ApprovalForAll} event.\\n     */\\n    function setApprovalForAll(address operator, bool approved) external;\\n\\n    /**\\n     * @dev Returns the account approved for `tokenId` token.\\n     *\\n     * Requirements:\\n     *\\n     * - `tokenId` must exist.\\n     */\\n    function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n    /**\\n     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n     *\\n     * See {setApprovalForAll}\\n     */\\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev There's no code at `target` (it is not a contract).\\n     */\\n    error AddressEmptyCode(address target);\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        if (address(this).balance < amount) {\\n            revert Errors.InsufficientBalance(address(this).balance, amount);\\n        }\\n\\n        (bool success, bytes memory returndata) = recipient.call{value: amount}(\\\"\\\");\\n        if (!success) {\\n            _revert(returndata);\\n        }\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason or custom error, it is bubbled\\n     * up by this function (like regular Solidity function calls). However, if\\n     * the call reverted with no returned reason, this function reverts with a\\n     * {Errors.FailedCall} error.\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        if (address(this).balance < value) {\\n            revert Errors.InsufficientBalance(address(this).balance, value);\\n        }\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n     * of an unsuccessful call.\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata\\n    ) internal view returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            // only check if target is a contract if the call was successful and the return data is empty\\n            // otherwise we already know that it was a contract\\n            if (returndata.length == 0 && target.code.length == 0) {\\n                revert AddressEmptyCode(target);\\n            }\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n     * revert reason or with a default {Errors.FailedCall} error.\\n     */\\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n        if (!success) {\\n            _revert(returndata);\\n        } else {\\n            return returndata;\\n        }\\n    }\\n\\n    /**\\n     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n     */\\n    function _revert(bytes memory returndata) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            assembly (\\\"memory-safe\\\") {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert Errors.FailedCall();\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n    /**\\n     * @dev The ETH balance of the account is not enough to perform the operation.\\n     */\\n    error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n    /**\\n     * @dev A call to an address target failed. The target may have reverted.\\n     */\\n    error FailedCall();\\n\\n    /**\\n     * @dev The deployment failed.\\n     */\\n    error FailedDeployment();\\n\\n    /**\\n     * @dev A necessary precompile is missing.\\n     */\\n    error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC-1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n *     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(newImplementation.code.length > 0);\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * TIP: Consider using this library along with {SlotDerivation}.\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    struct Int256Slot {\\n        int256 value;\\n    }\\n\\n    struct StringSlot {\\n        string value;\\n    }\\n\\n    struct BytesSlot {\\n        bytes value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `Int256Slot` with member `value` located at `slot`.\\n     */\\n    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `StringSlot` with member `value` located at `slot`.\\n     */\\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n     */\\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns a `BytesSlot` with member `value` located at `slot`.\\n     */\\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n     */\\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n        assembly (\\\"memory-safe\\\") {\\n            r.slot := store.slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n    /**\\n     * @dev Returns true if this contract implements the interface defined by\\n     * `interfaceId`. See the corresponding\\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n     * to learn more about how these ids are created.\\n     *\\n     * This function call must use less than 30 000 gas.\\n     */\\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/VideoPayment.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC721/IERC721.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\\\";\\nimport \\\"./interfaces/IVideoPayment.sol\\\";\\nimport \\\"./libraries/VideoPaymentStorage.sol\\\";\\n\\n/**\\n * @title VideoPayment\\n * @dev Main contract for video content payment and access control\\n */\\ncontract VideoPayment is\\n    Initializable,\\n    UUPSUpgradeable,\\n    ReentrancyGuardUpgradeable,\\n    IVideoPayment\\n{\\n    using VideoPaymentStorage for VideoPaymentStorage.VideoPaymentStorageStruct;\\n\\n    // Storage\\n    VideoPaymentStorage.VideoPaymentStorageStruct private _storage;\\n\\n    // Modifiers\\n    modifier onlyOwner() {\\n        if (msg.sender != _storage.owner) revert NotOwner();\\n        _;\\n    }\\n\\n    modifier onlyAdmin() {\\n        if (!_storage.isAdmin[msg.sender]) revert NotAdmin();\\n        _;\\n    }\\n\\n    modifier whenNotPaused() {\\n        if (_storage.paused) revert ContractPaused();\\n        _;\\n    }\\n\\n    modifier validContent(uint256 contentId) {\\n        if (!_storage.contentConfigs[contentId].isActive)\\n            revert InvalidContent();\\n        _;\\n    }\\n\\n    /// @custom:oz-upgrades-unsafe-allow constructor\\n    constructor() {\\n        _disableInitializers();\\n    }\\n\\n    /**\\n     * @dev Initialize the contract\\n     * @param initialOwner Initial owner address\\n     * @param initialAdmins Initial admin addresses array\\n     * @param supportedTokenAddresses Initial supported token addresses array\\n     */\\n    function initialize(\\n        address initialOwner,\\n        address[] memory initialAdmins,\\n        address[] memory supportedTokenAddresses\\n    ) public initializer {\\n        if (initialOwner == address(0)) revert ZeroAddress();\\n\\n        __UUPSUpgradeable_init();\\n        __ReentrancyGuard_init();\\n\\n        _storage.owner = initialOwner;\\n        _storage.version = 1;\\n        _storage.paused = false;\\n\\n        // Add initial admins\\n        for (uint256 i = 0; i < initialAdmins.length; i++) {\\n            if (initialAdmins[i] != address(0)) {\\n                _storage.isAdmin[initialAdmins[i]] = true;\\n                emit AdminAdded(initialAdmins[i]);\\n            }\\n        }\\n\\n        // Add initial supported tokens\\n        for (uint256 i = 0; i < supportedTokenAddresses.length; i++) {\\n            if (supportedTokenAddresses[i] != address(0)) {\\n                _storage.supportedTokens[supportedTokenAddresses[i]] = true;\\n                emit SupportedTokenAdded(supportedTokenAddresses[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Get contract version\\n     */\\n    function version() external view returns (uint256) {\\n        return _storage.version;\\n    }\\n\\n    /**\\n     * @dev Migration function for future upgrades\\n     */\\n    function migrate() external onlyOwner {\\n        // This function will be implemented in future versions if needed\\n        // Migration logic can be added here for data structure updates\\n        // No event emission needed as this is not an upgrade operation\\n    }\\n\\n    /**\\n     * @dev Authorize upgrade (required by UUPSUpgradeable)\\n     */\\n    function _authorizeUpgrade(\\n        address newImplementation\\n    ) internal override onlyOwner {}\\n\\n    // ============ Owner Management Functions ============\\n\\n    /**\\n     * @dev Add admin\\n     * @param admin Admin address to add\\n     */\\n    function addAdmin(address admin) external onlyOwner {\\n        if (admin == address(0)) revert ZeroAddress();\\n        _storage.isAdmin[admin] = true;\\n        emit AdminAdded(admin);\\n    }\\n\\n    /**\\n     * @dev Remove admin\\n     * @param admin Admin address to remove\\n     */\\n    function removeAdmin(address admin) external onlyOwner {\\n        if (admin == address(0)) revert ZeroAddress();\\n        _storage.isAdmin[admin] = false;\\n        emit AdminRemoved(admin);\\n    }\\n\\n    // ============ Content Management Functions ============\\n\\n    /**\\n     * @dev Set content configuration\\n     * @param contentId Content ID\\n     * @param nativePrice Native coin price\\n     * @param defaultViewCount Default view count\\n     * @param viewDuration View duration in seconds\\n     * @param isActive Whether content is active\\n     */\\n    function setContentConfig(\\n        uint256 contentId,\\n        uint256 nativePrice,\\n        uint256 defaultViewCount,\\n        uint256 viewDuration,\\n        bool isActive\\n    ) external onlyAdmin {\\n        _storage.contentConfigs[contentId].nativePrice = nativePrice;\\n        _storage.contentConfigs[contentId].defaultViewCount = defaultViewCount;\\n        _storage.contentConfigs[contentId].viewDuration = viewDuration;\\n        _storage.contentConfigs[contentId].isActive = isActive;\\n\\n        emit ContentConfigUpdated(contentId);\\n    }\\n\\n    /**\\n     * @dev Batch set content configurations\\n     * @param contentIds Content ID array\\n     * @param nativePrices Native price array\\n     * @param defaultViewCounts Default view count array\\n     * @param viewDurations View duration array\\n     * @param isActiveArray Active status array\\n     */\\n    function batchSetContentConfig(\\n        uint256[] memory contentIds,\\n        uint256[] memory nativePrices,\\n        uint256[] memory defaultViewCounts,\\n        uint256[] memory viewDurations,\\n        bool[] memory isActiveArray\\n    ) external onlyAdmin {\\n        if (\\n            contentIds.length != nativePrices.length ||\\n            contentIds.length != defaultViewCounts.length ||\\n            contentIds.length != viewDurations.length ||\\n            contentIds.length != isActiveArray.length\\n        ) revert ArrayLengthMismatch();\\n\\n        for (uint256 i = 0; i < contentIds.length; i++) {\\n            _storage.contentConfigs[contentIds[i]].nativePrice = nativePrices[\\n                i\\n            ];\\n            _storage\\n                .contentConfigs[contentIds[i]]\\n                .defaultViewCount = defaultViewCounts[i];\\n            _storage.contentConfigs[contentIds[i]].viewDuration = viewDurations[\\n                i\\n            ];\\n            _storage.contentConfigs[contentIds[i]].isActive = isActiveArray[i];\\n\\n            emit ContentConfigUpdated(contentIds[i]);\\n        }\\n    }\\n\\n    /**\\n     * @dev Check if content is active\\n     * @param contentId Content ID\\n     * @return Whether content is active\\n     */\\n    function isContentActive(uint256 contentId) external view returns (bool) {\\n        return _storage.contentConfigs[contentId].isActive;\\n    }\\n\\n    // ============ Price Management Functions ============\\n\\n    /**\\n     * @dev Update token price for content (address(0) for native token)\\n     * @param contentId Content ID\\n     * @param token Token address (address(0) for native)\\n     * @param price New price\\n     */\\n    function updateTokenPrice(\\n        uint256 contentId,\\n        address token,\\n        uint256 price\\n    ) external onlyAdmin {\\n        if (!_storage.supportedTokens[token]) revert UnsupportedToken();\\n\\n        _storage.contentConfigs[contentId].tokenPrices[token] = price;\\n\\n        // Sync with nativePrice for backward compatibility\\n        if (token == address(0)) {\\n            _storage.contentConfigs[contentId].nativePrice = price;\\n        }\\n\\n        emit TokenPriceUpdated(contentId, token, price);\\n    }\\n\\n    /**\\n     * @dev Batch update token prices for multiple contents (address(0) for native token)\\n     * @param contentIds Content ID array\\n     * @param token Token address (address(0) for native)\\n     * @param prices Price array\\n     */\\n    function batchUpdateTokenPrice(\\n        uint256[] memory contentIds,\\n        address token,\\n        uint256[] memory prices\\n    ) external onlyAdmin {\\n        if (contentIds.length != prices.length) revert ArrayLengthMismatch();\\n        if (!_storage.supportedTokens[token]) revert UnsupportedToken();\\n\\n        for (uint256 i = 0; i < contentIds.length; i++) {\\n            _storage.contentConfigs[contentIds[i]].tokenPrices[token] = prices[\\n                i\\n            ];\\n\\n            // Sync with nativePrice for backward compatibility\\n            if (token == address(0)) {\\n                _storage.contentConfigs[contentIds[i]].nativePrice = prices[i];\\n            }\\n\\n            emit TokenPriceUpdated(contentIds[i], token, prices[i]);\\n        }\\n    }\\n\\n    // ============ Payment Token Management Functions ============\\n\\n    /**\\n     * @dev Add supported token (address(0) for native token)\\n     * @param token Token address to add (address(0) for native)\\n     */\\n    function addSupportedToken(address token) external onlyAdmin {\\n        _storage.supportedTokens[token] = true;\\n        emit SupportedTokenAdded(token);\\n    }\\n\\n    /**\\n     * @dev Remove supported token (address(0) for native token)\\n     * @param token Token address to remove (address(0) for native)\\n     */\\n    function removeSupportedToken(address token) external onlyAdmin {\\n        _storage.supportedTokens[token] = false;\\n        emit SupportedTokenRemoved(token);\\n    }\\n\\n    /**\\n     * @dev Check if token is supported\\n     * @param token Token address to check\\n     * @return Whether token is supported\\n     */\\n    function isSupportedToken(address token) external view returns (bool) {\\n        return _storage.supportedTokens[token];\\n    }\\n\\n    // ============ Purchase Functions ============\\n\\n    /**\\n     * @dev Purchase content with token (address(0) for native token)\\n     * @param contentId Content ID\\n     * @param paymentToken Payment token address (address(0) for native)\\n     * @param amount Payment amount\\n     */\\n    function purchaseContent(\\n        uint256 contentId,\\n        address paymentToken,\\n        uint256 amount\\n    ) external payable nonReentrant whenNotPaused validContent(contentId) {\\n        if (!_storage.supportedTokens[paymentToken]) revert UnsupportedToken();\\n\\n        uint256 expectedPrice;\\n        if (paymentToken == address(0)) {\\n            // Native token payment\\n            expectedPrice = _storage.contentConfigs[contentId].nativePrice;\\n            if (msg.value != expectedPrice) revert InsufficientPayment();\\n            if (amount != msg.value) revert InsufficientPayment();\\n        } else {\\n            // ERC20 token payment\\n            expectedPrice = _storage.contentConfigs[contentId].tokenPrices[\\n                paymentToken\\n            ];\\n            if (expectedPrice != amount) revert InsufficientPayment();\\n            IERC20(paymentToken).transferFrom(\\n                msg.sender,\\n                address(this),\\n                amount\\n            );\\n        }\\n\\n        // Create view permission\\n        _updateViewPermission(msg.sender, contentId);\\n\\n        // Emit event\\n        uint256 validUntil = block.timestamp +\\n            _storage.contentConfigs[contentId].viewDuration;\\n        emit ContentPurchased(\\n            msg.sender,\\n            contentId,\\n            paymentToken,\\n            amount,\\n            _storage.contentConfigs[contentId].defaultViewCount,\\n            validUntil\\n        );\\n    }\\n\\n    /**\\n     * @dev Batch purchase content with token (address(0) for native token)\\n     * @param contentIds Content ID array\\n     * @param paymentToken Payment token address (address(0) for native)\\n     * @param totalAmount Total payment amount\\n     */\\n    function batchPurchase(\\n        uint256[] memory contentIds,\\n        address paymentToken,\\n        uint256 totalAmount\\n    ) external payable nonReentrant whenNotPaused {\\n        if (!_storage.supportedTokens[paymentToken]) revert UnsupportedToken();\\n\\n        uint256 expectedTotal = 0;\\n        for (uint256 i = 0; i < contentIds.length; i++) {\\n            if (!_storage.contentConfigs[contentIds[i]].isActive)\\n                revert InvalidContent();\\n\\n            if (paymentToken == address(0)) {\\n                expectedTotal += _storage\\n                    .contentConfigs[contentIds[i]]\\n                    .nativePrice;\\n            } else {\\n                expectedTotal += _storage\\n                    .contentConfigs[contentIds[i]]\\n                    .tokenPrices[paymentToken];\\n            }\\n        }\\n\\n        if (totalAmount != expectedTotal) revert InsufficientPayment();\\n\\n        if (paymentToken == address(0)) {\\n            // Native token payment\\n            if (msg.value != totalAmount) revert InsufficientPayment();\\n        } else {\\n            // ERC20 token payment\\n            IERC20(paymentToken).transferFrom(\\n                msg.sender,\\n                address(this),\\n                totalAmount\\n            );\\n        }\\n\\n        // Create view permissions\\n        for (uint256 i = 0; i < contentIds.length; i++) {\\n            _updateViewPermission(msg.sender, contentIds[i]);\\n        }\\n\\n        // Emit event\\n        emit BatchPurchased(msg.sender, contentIds, paymentToken, totalAmount);\\n    }\\n\\n    /**\\n     * @dev Purchase content with NFT\\n     * @param contentId Content ID\\n     * @param nftContract NFT contract address\\n     * @param tokenId NFT token ID\\n     */\\n    function purchaseWithNFT(\\n        uint256 contentId,\\n        address nftContract,\\n        uint256 tokenId\\n    ) external nonReentrant whenNotPaused validContent(contentId) {\\n        // Check NFT ownership\\n        if (IERC721(nftContract).ownerOf(tokenId) != msg.sender)\\n            revert NoValidPermission();\\n\\n        // Transfer NFT (burn it by transferring to this contract)\\n        IERC721(nftContract).transferFrom(msg.sender, address(this), tokenId);\\n\\n        // Create view permission\\n        _updateViewPermission(msg.sender, contentId);\\n\\n        // Emit event\\n        emit NFTPurchased(msg.sender, contentId, nftContract, tokenId);\\n    }\\n\\n    /**\\n     * @dev Internal function to update view permission\\n     * @param user User address\\n     * @param contentId Content ID\\n     */\\n    function _updateViewPermission(address user, uint256 contentId) internal {\\n        VideoPaymentStorage.ViewPermission storage existing = _storage\\n            .userPermissions[user][contentId];\\n        uint256 defaultViews = _storage\\n            .contentConfigs[contentId]\\n            .defaultViewCount;\\n        uint256 duration = _storage.contentConfigs[contentId].viewDuration;\\n\\n        if (defaultViews == 0) {\\n            // One-time purchase: Check if already purchased and still valid\\n            if (\\n                existing.isValid &&\\n                block.timestamp <= existing.purchaseTime + duration\\n            ) {\\n                // User already has valid permission, no need to do anything\\n                // This allows the purchase to succeed without duplicate payment\\n                return;\\n            }\\n            // Create new permission for unlimited viewing or refresh expired permission\\n            existing.purchaseTime = block.timestamp;\\n            existing.remainingViews = 0; // 0 means unlimited\\n            existing.isValid = true;\\n        } else {\\n            // View-count based: Add to existing or create new\\n            if (\\n                existing.isValid &&\\n                block.timestamp <= existing.purchaseTime + duration\\n            ) {\\n                // Existing permission is still valid, accumulate view count\\n                existing.remainingViews += defaultViews;\\n                emit ViewCountAdded(\\n                    user,\\n                    contentId,\\n                    defaultViews,\\n                    existing.remainingViews\\n                );\\n            } else {\\n                // No existing permission or expired, create new\\n                existing.purchaseTime = block.timestamp;\\n                existing.remainingViews = defaultViews;\\n                existing.isValid = true;\\n            }\\n        }\\n    }\\n\\n    // ============ Permission Verification Functions ============\\n\\n    /**\\n     * @dev Check if user has valid view permission\\n     * @param user User address\\n     * @param contentId Content ID\\n     * @return Whether user has valid permission\\n     */\\n    function hasViewPermission(\\n        address user,\\n        uint256 contentId\\n    ) external view returns (bool) {\\n        VideoPaymentStorage.ViewPermission memory permission = _storage\\n            .userPermissions[user][contentId];\\n\\n        if (!permission.isValid) {\\n            return false;\\n        }\\n\\n        // Check if permission has expired\\n        if (\\n            block.timestamp >\\n            permission.purchaseTime +\\n                _storage.contentConfigs[contentId].viewDuration\\n        ) {\\n            return false;\\n        }\\n\\n        // Get default view count to determine content type\\n        uint256 defaultViews = _storage\\n            .contentConfigs[contentId]\\n            .defaultViewCount;\\n\\n        if (defaultViews == 0) {\\n            // One-time purchase: valid if not expired (remainingViews should be 0)\\n            return true;\\n        } else {\\n            // View-count based: valid if there are remaining views\\n            return permission.remainingViews > 0;\\n        }\\n    }\\n\\n    /**\\n     * @dev Get user permissions for multiple contents\\n     * @param user User address\\n     * @param contentIds Content ID array\\n     * @return Permission array\\n     */\\n    function getUserPermissions(\\n        address user,\\n        uint256[] memory contentIds\\n    ) external view returns (VideoPaymentStorage.ViewPermission[] memory) {\\n        VideoPaymentStorage.ViewPermission[]\\n            memory permissions = new VideoPaymentStorage.ViewPermission[](\\n                contentIds.length\\n            );\\n\\n        for (uint256 i = 0; i < contentIds.length; i++) {\\n            permissions[i] = _storage.userPermissions[user][contentIds[i]];\\n        }\\n\\n        return permissions;\\n    }\\n\\n    /**\\n     * @dev Get detailed permission info\\n     * @param user User address\\n     * @param contentId Content ID\\n     * @return Permission details\\n     */\\n    function getPermissionDetails(\\n        address user,\\n        uint256 contentId\\n    ) external view returns (VideoPaymentStorage.ViewPermission memory) {\\n        return _storage.userPermissions[user][contentId];\\n    }\\n\\n    /**\\n     * @dev Consume one view for user\\n     * @param user User address\\n     * @param contentId Content ID\\n     * @return Success status\\n     */\\n    function consumeView(\\n        address user,\\n        uint256 contentId\\n    ) external onlyAdmin returns (bool) {\\n        VideoPaymentStorage.ViewPermission storage permission = _storage\\n            .userPermissions[user][contentId];\\n\\n        if (!permission.isValid) {\\n            revert NoValidPermission();\\n        }\\n\\n        // Check if permission has expired\\n        if (\\n            block.timestamp >\\n            permission.purchaseTime +\\n                _storage.contentConfigs[contentId].viewDuration\\n        ) {\\n            revert NoValidPermission();\\n        }\\n\\n        // Get default view count to determine if this is unlimited or count-based\\n        uint256 defaultViews = _storage\\n            .contentConfigs[contentId]\\n            .defaultViewCount;\\n\\n        if (defaultViews == 0) {\\n            // One-time purchase with unlimited viewing - don't decrement\\n            emit ViewConsumed(user, contentId, 0); // 0 indicates unlimited\\n            return true;\\n        } else {\\n            // View-count based purchase - check and decrement\\n            if (permission.remainingViews == 0) {\\n                revert NoValidPermission();\\n            }\\n\\n            // Consume one view\\n            permission.remainingViews--;\\n\\n            emit ViewConsumed(user, contentId, permission.remainingViews);\\n\\n            // Mark as invalid if no views remaining\\n            if (permission.remainingViews == 0) {\\n                permission.isValid = false;\\n                emit PermissionExpired(user, contentId);\\n            }\\n\\n            return true;\\n        }\\n    }\\n\\n    /**\\n     * @dev Batch consume views for multiple users\\n     * @param users User address array\\n     * @param contentIds Content ID array\\n     * @return Success status array\\n     */\\n    function batchConsumeView(\\n        address[] memory users,\\n        uint256[] memory contentIds\\n    ) external onlyAdmin returns (bool[] memory) {\\n        if (users.length != contentIds.length) revert ArrayLengthMismatch();\\n\\n        bool[] memory results = new bool[](users.length);\\n\\n        for (uint256 i = 0; i < users.length; i++) {\\n            VideoPaymentStorage.ViewPermission storage permission = _storage\\n                .userPermissions[users[i]][contentIds[i]];\\n\\n            if (!permission.isValid) {\\n                results[i] = false;\\n                continue;\\n            }\\n\\n            // Check if permission has expired\\n            if (\\n                block.timestamp >\\n                permission.purchaseTime +\\n                    _storage.contentConfigs[contentIds[i]].viewDuration\\n            ) {\\n                results[i] = false;\\n                continue;\\n            }\\n\\n            // Get default view count to determine if this is unlimited or count-based\\n            uint256 defaultViews = _storage\\n                .contentConfigs[contentIds[i]]\\n                .defaultViewCount;\\n\\n            if (defaultViews == 0) {\\n                // One-time purchase with unlimited viewing - don't decrement\\n                emit ViewConsumed(users[i], contentIds[i], 0); // 0 indicates unlimited\\n                results[i] = true;\\n            } else {\\n                // View-count based purchase - check and decrement\\n                if (permission.remainingViews == 0) {\\n                    results[i] = false;\\n                    continue;\\n                }\\n\\n                // Consume one view\\n                permission.remainingViews--;\\n                emit ViewConsumed(\\n                    users[i],\\n                    contentIds[i],\\n                    permission.remainingViews\\n                );\\n\\n                // Mark as invalid if no views remaining\\n                if (permission.remainingViews == 0) {\\n                    permission.isValid = false;\\n                    emit PermissionExpired(users[i], contentIds[i]);\\n                }\\n\\n                results[i] = true;\\n            }\\n        }\\n\\n        return results;\\n    }\\n\\n    // ============ Content Query Functions ============\\n\\n    /**\\n     * @dev Get content purchase information\\n     * @param contentId Content ID\\n     * @return Purchase information including supported tokens and prices\\n     */\\n    function getContentPurchaseInfo(\\n        uint256 contentId\\n    ) external view returns (IVideoPayment.ContentPurchaseInfo memory) {\\n        VideoPaymentStorage.ContentConfig storage config = _storage\\n            .contentConfigs[contentId];\\n\\n        // Get supported tokens for this content\\n        (\\n            address[] memory supportedTokens,\\n            uint256[] memory prices\\n        ) = _getSupportedTokensForContent(contentId);\\n\\n        return\\n            IVideoPayment.ContentPurchaseInfo({\\n                defaultViewCount: config.defaultViewCount,\\n                viewDuration: config.viewDuration,\\n                isActive: config.isActive,\\n                supportedTokens: supportedTokens,\\n                tokenPrices: prices,\\n                isUnlimitedViewing: config.defaultViewCount == 0\\n            });\\n    }\\n\\n    /**\\n     * @dev Internal function to get supported tokens and prices for content\\n     * @param contentId Content ID\\n     * @return supportedTokens Array of supported token addresses\\n     * @return prices Array of corresponding prices\\n     */\\n    function _getSupportedTokensForContent(\\n        uint256 contentId\\n    )\\n        internal\\n        view\\n        returns (address[] memory supportedTokens, uint256[] memory prices)\\n    {\\n        // Count supported tokens\\n        uint256 count = 0;\\n\\n        // Check native token\\n        if (\\n            _storage.supportedTokens[address(0)] &&\\n            _storage.contentConfigs[contentId].nativePrice > 0\\n        ) {\\n            count++;\\n        }\\n\\n        // This is a simplified approach - in practice, you'd need to iterate through known tokens\\n        // For now, we'll create arrays for known supported tokens from the contract state\\n        // This requires tracking supported tokens in a more efficient way\\n\\n        supportedTokens = new address[](count);\\n        prices = new uint256[](count);\\n\\n        uint256 index = 0;\\n\\n        // Add native token if supported and has price\\n        if (\\n            _storage.supportedTokens[address(0)] &&\\n            _storage.contentConfigs[contentId].nativePrice > 0\\n        ) {\\n            supportedTokens[index] = address(0);\\n            prices[index] = _storage.contentConfigs[contentId].nativePrice;\\n            index++;\\n        }\\n\\n        // Note: For ERC20 tokens, we'd need to iterate through known tokens\\n        // This implementation is simplified for the upgrade\\n    }\\n\\n    // ============ Emergency Control Functions ============\\n\\n    /**\\n     * @dev Pause contract\\n     */\\n    function pause() external onlyOwner {\\n        _storage.paused = true;\\n        emit Paused();\\n    }\\n\\n    /**\\n     * @dev Unpause contract\\n     */\\n    function unpause() external onlyOwner {\\n        _storage.paused = false;\\n        emit Unpaused();\\n    }\\n}\\n\",\"keccak256\":\"0x4ec116c4291700b24b3a68baaaa1144996f0d2806fb505745fc655d99ae0ef01\",\"license\":\"MIT\"},\"contracts/interfaces/IVideoPayment.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"../libraries/VideoPaymentStorage.sol\\\";\\n\\n/**\\n * @title IVideoPayment\\n * @dev Interface for VideoPayment contract\\n */\\ninterface IVideoPayment {\\n    // Content purchase information structure\\n    struct ContentPurchaseInfo {\\n        uint256 defaultViewCount; // Default view count (0=unlimited, >0=limited)\\n        uint256 viewDuration; // View validity duration in seconds\\n        bool isActive; // Whether content is purchasable\\n        address[] supportedTokens; // Supported payment tokens (address(0)=native)\\n        uint256[] tokenPrices; // Corresponding token prices\\n        bool isUnlimitedViewing; // Whether unlimited viewing is allowed\\n    }\\n    // Custom errors\\n    error NotOwner();\\n    error NotAdmin();\\n    error ContractPaused();\\n    error InvalidContent();\\n    error UnsupportedToken();\\n    error InsufficientPayment();\\n    error NoValidPermission();\\n    error ArrayLengthMismatch();\\n    error ZeroAddress();\\n    error InvalidAmount();\\n    error AlreadyPurchased();\\n\\n    // Events - Purchase related\\n    event ContentPurchased(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        address paymentToken,\\n        uint256 amount,\\n        uint256 viewCount,\\n        uint256 validUntil\\n    );\\n\\n    event BatchPurchased(\\n        address indexed user,\\n        uint256[] contentIds,\\n        address paymentToken,\\n        uint256 totalAmount\\n    );\\n\\n    event NFTPurchased(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        address nftContract,\\n        uint256 tokenId\\n    );\\n\\n    // Events - Permission related\\n    event ViewConsumed(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        uint256 remainingViews\\n    );\\n\\n    event PermissionExpired(address indexed user, uint256 indexed contentId);\\n\\n    event ViewCountAdded(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        uint256 addedCount,\\n        uint256 totalRemaining\\n    );\\n\\n    // Events - Management related\\n    event AdminAdded(address indexed admin);\\n    event AdminRemoved(address indexed admin);\\n    event ContentConfigUpdated(uint256 indexed contentId);\\n    event TokenPriceUpdated(\\n        uint256 indexed contentId,\\n        address indexed token,\\n        uint256 price\\n    );\\n    event SupportedTokenAdded(address indexed token);\\n    event SupportedTokenRemoved(address indexed token);\\n    event Paused();\\n    event Unpaused();\\n\\n    // Owner management functions\\n    function addAdmin(address admin) external;\\n    function removeAdmin(address admin) external;\\n\\n    // Content management functions\\n    function setContentConfig(\\n        uint256 contentId,\\n        uint256 nativePrice,\\n        uint256 defaultViewCount,\\n        uint256 viewDuration,\\n        bool isActive\\n    ) external;\\n    function batchSetContentConfig(\\n        uint256[] memory contentIds,\\n        uint256[] memory nativePrices,\\n        uint256[] memory defaultViewCounts,\\n        uint256[] memory viewDurations,\\n        bool[] memory isActiveArray\\n    ) external;\\n    function isContentActive(uint256 contentId) external view returns (bool);\\n\\n    // Price management functions\\n    function updateTokenPrice(\\n        uint256 contentId,\\n        address token,\\n        uint256 price\\n    ) external;\\n    function batchUpdateTokenPrice(\\n        uint256[] memory contentIds,\\n        address token,\\n        uint256[] memory prices\\n    ) external;\\n\\n    // Payment token management functions\\n    function addSupportedToken(address token) external;\\n    function removeSupportedToken(address token) external;\\n    function isSupportedToken(address token) external view returns (bool);\\n\\n    // Purchase functions\\n    function purchaseContent(\\n        uint256 contentId,\\n        address paymentToken,\\n        uint256 amount\\n    ) external payable;\\n    function batchPurchase(\\n        uint256[] memory contentIds,\\n        address paymentToken,\\n        uint256 totalAmount\\n    ) external payable;\\n    function purchaseWithNFT(\\n        uint256 contentId,\\n        address nftContract,\\n        uint256 tokenId\\n    ) external;\\n\\n    // Permission verification functions\\n    function hasViewPermission(\\n        address user,\\n        uint256 contentId\\n    ) external view returns (bool);\\n    function getUserPermissions(\\n        address user,\\n        uint256[] memory contentIds\\n    ) external view returns (VideoPaymentStorage.ViewPermission[] memory);\\n    function getPermissionDetails(\\n        address user,\\n        uint256 contentId\\n    ) external view returns (VideoPaymentStorage.ViewPermission memory);\\n    function consumeView(\\n        address user,\\n        uint256 contentId\\n    ) external returns (bool);\\n    function batchConsumeView(\\n        address[] memory users,\\n        uint256[] memory contentIds\\n    ) external returns (bool[] memory);\\n\\n    // Emergency control functions\\n    function pause() external;\\n    function unpause() external;\\n\\n    // Content query functions\\n    function getContentPurchaseInfo(\\n        uint256 contentId\\n    ) external view returns (ContentPurchaseInfo memory);\\n\\n    // Upgrade functions\\n    function version() external view returns (uint256);\\n    function migrate() external;\\n}\\n\",\"keccak256\":\"0x37d910503f0f8956a600e3025222c2902f0f481854eddb2a2e9180c89b861c06\",\"license\":\"MIT\"},\"contracts/libraries/VideoPaymentStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\n/**\\n * @title VideoPaymentStorage\\n * @dev Storage layout for VideoPayment contract to ensure upgrade compatibility\\n */\\nlibrary VideoPaymentStorage {\\n    // Storage layout version for upgrade compatibility\\n    uint256 constant STORAGE_VERSION = 1;\\n\\n    struct ContentConfig {\\n        mapping(address => uint256) tokenPrices; // ERC20 token prices\\n        uint256 nativePrice; // Native coin price\\n        uint256 defaultViewCount; // Default view count when purchased\\n        uint256 viewDuration; // View validity duration in seconds\\n        bool isActive; // Whether content is purchasable\\n    }\\n\\n    struct ViewPermission {\\n        uint256 purchaseTime; // Purchase timestamp\\n        uint256 remainingViews; // Remaining view count\\n        bool isValid; // Whether permission is valid\\n    }\\n\\n    struct VideoPaymentStorageStruct {\\n        // Owner and admin management\\n        address owner;\\n        mapping(address => bool) isAdmin;\\n        // Content management\\n        mapping(uint256 => ContentConfig) contentConfigs;\\n        // User permissions\\n        mapping(address => mapping(uint256 => ViewPermission)) userPermissions;\\n        // Supported payment tokens\\n        mapping(address => bool) supportedTokens;\\n        // Emergency pause\\n        bool paused;\\n        // Contract version\\n        uint256 version;\\n        // Reserved storage slots for future upgrades\\n        uint256[50] __gap;\\n    }\\n}\\n\",\"keccak256\":\"0x039f47df083413b22a6a07bbcd73eae115935d4dba5b14e307ba78831fa8d640\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1675,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"_storage","offset":0,"slot":"0","type":"t_struct(VideoPaymentStorageStruct)3798_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"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_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_uint256,t_struct(ViewPermission)3767_storage))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => struct VideoPaymentStorage.ViewPermission))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(ViewPermission)3767_storage)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_struct(ContentConfig)3760_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct VideoPaymentStorage.ContentConfig)","numberOfBytes":"32","value":"t_struct(ContentConfig)3760_storage"},"t_mapping(t_uint256,t_struct(ViewPermission)3767_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct VideoPaymentStorage.ViewPermission)","numberOfBytes":"32","value":"t_struct(ViewPermission)3767_storage"},"t_struct(ContentConfig)3760_storage":{"encoding":"inplace","label":"struct VideoPaymentStorage.ContentConfig","members":[{"astId":3751,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"tokenPrices","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":3753,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"nativePrice","offset":0,"slot":"1","type":"t_uint256"},{"astId":3755,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"defaultViewCount","offset":0,"slot":"2","type":"t_uint256"},{"astId":3757,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"viewDuration","offset":0,"slot":"3","type":"t_uint256"},{"astId":3759,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"isActive","offset":0,"slot":"4","type":"t_bool"}],"numberOfBytes":"160"},"t_struct(VideoPaymentStorageStruct)3798_storage":{"encoding":"inplace","label":"struct VideoPaymentStorage.VideoPaymentStorageStruct","members":[{"astId":3769,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"owner","offset":0,"slot":"0","type":"t_address"},{"astId":3773,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"isAdmin","offset":0,"slot":"1","type":"t_mapping(t_address,t_bool)"},{"astId":3778,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"contentConfigs","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_struct(ContentConfig)3760_storage)"},{"astId":3785,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"userPermissions","offset":0,"slot":"3","type":"t_mapping(t_address,t_mapping(t_uint256,t_struct(ViewPermission)3767_storage))"},{"astId":3789,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"supportedTokens","offset":0,"slot":"4","type":"t_mapping(t_address,t_bool)"},{"astId":3791,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"paused","offset":0,"slot":"5","type":"t_bool"},{"astId":3793,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"version","offset":0,"slot":"6","type":"t_uint256"},{"astId":3797,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"__gap","offset":0,"slot":"7","type":"t_array(t_uint256)50_storage"}],"numberOfBytes":"1824"},"t_struct(ViewPermission)3767_storage":{"encoding":"inplace","label":"struct VideoPaymentStorage.ViewPermission","members":[{"astId":3762,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"purchaseTime","offset":0,"slot":"0","type":"t_uint256"},{"astId":3764,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"remainingViews","offset":0,"slot":"1","type":"t_uint256"},{"astId":3766,"contract":"contracts/VideoPayment.sol:VideoPayment","label":"isValid","offset":0,"slot":"2","type":"t_bool"}],"numberOfBytes":"96"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/interfaces/IVideoPayment.sol":{"IVideoPayment":{"abi":[{"inputs":[],"name":"AlreadyPurchased","type":"error"},{"inputs":[],"name":"ArrayLengthMismatch","type":"error"},{"inputs":[],"name":"ContractPaused","type":"error"},{"inputs":[],"name":"InsufficientPayment","type":"error"},{"inputs":[],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"InvalidContent","type":"error"},{"inputs":[],"name":"NoValidPermission","type":"error"},{"inputs":[],"name":"NotAdmin","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"UnsupportedToken","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"BatchPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"ContentConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"viewCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"validUntil","type":"uint256"}],"name":"ContentPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"address","name":"nftContract","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTPurchased","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"PermissionExpired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"SupportedTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"SupportedTokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"TokenPriceUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingViews","type":"uint256"}],"name":"ViewConsumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"contentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"addedCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalRemaining","type":"uint256"}],"name":"ViewCountAdded","type":"event"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"}],"name":"batchConsumeView","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"batchPurchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"internalType":"uint256[]","name":"nativePrices","type":"uint256[]"},{"internalType":"uint256[]","name":"defaultViewCounts","type":"uint256[]"},{"internalType":"uint256[]","name":"viewDurations","type":"uint256[]"},{"internalType":"bool[]","name":"isActiveArray","type":"bool[]"}],"name":"batchSetContentConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"batchUpdateTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"consumeView","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"getContentPurchaseInfo","outputs":[{"components":[{"internalType":"uint256","name":"defaultViewCount","type":"uint256"},{"internalType":"uint256","name":"viewDuration","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"address[]","name":"supportedTokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenPrices","type":"uint256[]"},{"internalType":"bool","name":"isUnlimitedViewing","type":"bool"}],"internalType":"struct IVideoPayment.ContentPurchaseInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"getPermissionDetails","outputs":[{"components":[{"internalType":"uint256","name":"purchaseTime","type":"uint256"},{"internalType":"uint256","name":"remainingViews","type":"uint256"},{"internalType":"bool","name":"isValid","type":"bool"}],"internalType":"struct VideoPaymentStorage.ViewPermission","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"contentIds","type":"uint256[]"}],"name":"getUserPermissions","outputs":[{"components":[{"internalType":"uint256","name":"purchaseTime","type":"uint256"},{"internalType":"uint256","name":"remainingViews","type":"uint256"},{"internalType":"bool","name":"isValid","type":"bool"}],"internalType":"struct VideoPaymentStorage.ViewPermission[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"hasViewPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"}],"name":"isContentActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isSupportedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"purchaseContent","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"purchaseWithNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"uint256","name":"nativePrice","type":"uint256"},{"internalType":"uint256","name":"defaultViewCount","type":"uint256"},{"internalType":"uint256","name":"viewDuration","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setContentConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contentId","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updateTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Interface for VideoPayment contract","kind":"dev","methods":{},"title":"IVideoPayment","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"addAdmin(address)":"70480275","addSupportedToken(address)":"6d69fcaf","batchConsumeView(address[],uint256[])":"529e2b32","batchPurchase(uint256[],address,uint256)":"99ea24fe","batchSetContentConfig(uint256[],uint256[],uint256[],uint256[],bool[])":"09b952be","batchUpdateTokenPrice(uint256[],address,uint256[])":"8f0ff11b","consumeView(address,uint256)":"05059571","getContentPurchaseInfo(uint256)":"b8e8f98e","getPermissionDetails(address,uint256)":"8d13660e","getUserPermissions(address,uint256[])":"b303f53f","hasViewPermission(address,uint256)":"caae24b3","isContentActive(uint256)":"40033b3d","isSupportedToken(address)":"240028e8","migrate()":"8fd3ab80","pause()":"8456cb59","purchaseContent(uint256,address,uint256)":"b6f1d140","purchaseWithNFT(uint256,address,uint256)":"86778641","removeAdmin(address)":"1785f53c","removeSupportedToken(address)":"76319190","setContentConfig(uint256,uint256,uint256,uint256,bool)":"b1b105fe","unpause()":"3f4ba83a","updateTokenPrice(uint256,address,uint256)":"3428cebb","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyPurchased\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ArrayLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientPayment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoValidPermission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AdminRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"}],\"name\":\"BatchPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"ContentConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"viewCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validUntil\",\"type\":\"uint256\"}],\"name\":\"ContentPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"NFTPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"PermissionExpired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SupportedTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SupportedTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"TokenPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingViews\",\"type\":\"uint256\"}],\"name\":\"ViewConsumed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addedCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalRemaining\",\"type\":\"uint256\"}],\"name\":\"ViewCountAdded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addSupportedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"users\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"}],\"name\":\"batchConsumeView\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"}],\"name\":\"batchPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"nativePrices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"defaultViewCounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"viewDurations\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"isActiveArray\",\"type\":\"bool[]\"}],\"name\":\"batchSetContentConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"prices\",\"type\":\"uint256[]\"}],\"name\":\"batchUpdateTokenPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"consumeView\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"getContentPurchaseInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"defaultViewCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"viewDuration\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"supportedTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrices\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"isUnlimitedViewing\",\"type\":\"bool\"}],\"internalType\":\"struct IVideoPayment.ContentPurchaseInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"getPermissionDetails\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"purchaseTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingViews\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct VideoPaymentStorage.ViewPermission\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"contentIds\",\"type\":\"uint256[]\"}],\"name\":\"getUserPermissions\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"purchaseTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingViews\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct VideoPaymentStorage.ViewPermission[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"hasViewPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"}],\"name\":\"isContentActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"purchaseContent\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"nftContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"purchaseWithNFT\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"removeSupportedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nativePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultViewCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"viewDuration\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"name\":\"setContentConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"contentId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"updateTokenPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for VideoPayment contract\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IVideoPayment\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IVideoPayment.sol\":\"IVideoPayment\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IVideoPayment.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"../libraries/VideoPaymentStorage.sol\\\";\\n\\n/**\\n * @title IVideoPayment\\n * @dev Interface for VideoPayment contract\\n */\\ninterface IVideoPayment {\\n    // Content purchase information structure\\n    struct ContentPurchaseInfo {\\n        uint256 defaultViewCount; // Default view count (0=unlimited, >0=limited)\\n        uint256 viewDuration; // View validity duration in seconds\\n        bool isActive; // Whether content is purchasable\\n        address[] supportedTokens; // Supported payment tokens (address(0)=native)\\n        uint256[] tokenPrices; // Corresponding token prices\\n        bool isUnlimitedViewing; // Whether unlimited viewing is allowed\\n    }\\n    // Custom errors\\n    error NotOwner();\\n    error NotAdmin();\\n    error ContractPaused();\\n    error InvalidContent();\\n    error UnsupportedToken();\\n    error InsufficientPayment();\\n    error NoValidPermission();\\n    error ArrayLengthMismatch();\\n    error ZeroAddress();\\n    error InvalidAmount();\\n    error AlreadyPurchased();\\n\\n    // Events - Purchase related\\n    event ContentPurchased(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        address paymentToken,\\n        uint256 amount,\\n        uint256 viewCount,\\n        uint256 validUntil\\n    );\\n\\n    event BatchPurchased(\\n        address indexed user,\\n        uint256[] contentIds,\\n        address paymentToken,\\n        uint256 totalAmount\\n    );\\n\\n    event NFTPurchased(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        address nftContract,\\n        uint256 tokenId\\n    );\\n\\n    // Events - Permission related\\n    event ViewConsumed(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        uint256 remainingViews\\n    );\\n\\n    event PermissionExpired(address indexed user, uint256 indexed contentId);\\n\\n    event ViewCountAdded(\\n        address indexed user,\\n        uint256 indexed contentId,\\n        uint256 addedCount,\\n        uint256 totalRemaining\\n    );\\n\\n    // Events - Management related\\n    event AdminAdded(address indexed admin);\\n    event AdminRemoved(address indexed admin);\\n    event ContentConfigUpdated(uint256 indexed contentId);\\n    event TokenPriceUpdated(\\n        uint256 indexed contentId,\\n        address indexed token,\\n        uint256 price\\n    );\\n    event SupportedTokenAdded(address indexed token);\\n    event SupportedTokenRemoved(address indexed token);\\n    event Paused();\\n    event Unpaused();\\n\\n    // Owner management functions\\n    function addAdmin(address admin) external;\\n    function removeAdmin(address admin) external;\\n\\n    // Content management functions\\n    function setContentConfig(\\n        uint256 contentId,\\n        uint256 nativePrice,\\n        uint256 defaultViewCount,\\n        uint256 viewDuration,\\n        bool isActive\\n    ) external;\\n    function batchSetContentConfig(\\n        uint256[] memory contentIds,\\n        uint256[] memory nativePrices,\\n        uint256[] memory defaultViewCounts,\\n        uint256[] memory viewDurations,\\n        bool[] memory isActiveArray\\n    ) external;\\n    function isContentActive(uint256 contentId) external view returns (bool);\\n\\n    // Price management functions\\n    function updateTokenPrice(\\n        uint256 contentId,\\n        address token,\\n        uint256 price\\n    ) external;\\n    function batchUpdateTokenPrice(\\n        uint256[] memory contentIds,\\n        address token,\\n        uint256[] memory prices\\n    ) external;\\n\\n    // Payment token management functions\\n    function addSupportedToken(address token) external;\\n    function removeSupportedToken(address token) external;\\n    function isSupportedToken(address token) external view returns (bool);\\n\\n    // Purchase functions\\n    function purchaseContent(\\n        uint256 contentId,\\n        address paymentToken,\\n        uint256 amount\\n    ) external payable;\\n    function batchPurchase(\\n        uint256[] memory contentIds,\\n        address paymentToken,\\n        uint256 totalAmount\\n    ) external payable;\\n    function purchaseWithNFT(\\n        uint256 contentId,\\n        address nftContract,\\n        uint256 tokenId\\n    ) external;\\n\\n    // Permission verification functions\\n    function hasViewPermission(\\n        address user,\\n        uint256 contentId\\n    ) external view returns (bool);\\n    function getUserPermissions(\\n        address user,\\n        uint256[] memory contentIds\\n    ) external view returns (VideoPaymentStorage.ViewPermission[] memory);\\n    function getPermissionDetails(\\n        address user,\\n        uint256 contentId\\n    ) external view returns (VideoPaymentStorage.ViewPermission memory);\\n    function consumeView(\\n        address user,\\n        uint256 contentId\\n    ) external returns (bool);\\n    function batchConsumeView(\\n        address[] memory users,\\n        uint256[] memory contentIds\\n    ) external returns (bool[] memory);\\n\\n    // Emergency control functions\\n    function pause() external;\\n    function unpause() external;\\n\\n    // Content query functions\\n    function getContentPurchaseInfo(\\n        uint256 contentId\\n    ) external view returns (ContentPurchaseInfo memory);\\n\\n    // Upgrade functions\\n    function version() external view returns (uint256);\\n    function migrate() external;\\n}\\n\",\"keccak256\":\"0x37d910503f0f8956a600e3025222c2902f0f481854eddb2a2e9180c89b861c06\",\"license\":\"MIT\"},\"contracts/libraries/VideoPaymentStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\n/**\\n * @title VideoPaymentStorage\\n * @dev Storage layout for VideoPayment contract to ensure upgrade compatibility\\n */\\nlibrary VideoPaymentStorage {\\n    // Storage layout version for upgrade compatibility\\n    uint256 constant STORAGE_VERSION = 1;\\n\\n    struct ContentConfig {\\n        mapping(address => uint256) tokenPrices; // ERC20 token prices\\n        uint256 nativePrice; // Native coin price\\n        uint256 defaultViewCount; // Default view count when purchased\\n        uint256 viewDuration; // View validity duration in seconds\\n        bool isActive; // Whether content is purchasable\\n    }\\n\\n    struct ViewPermission {\\n        uint256 purchaseTime; // Purchase timestamp\\n        uint256 remainingViews; // Remaining view count\\n        bool isValid; // Whether permission is valid\\n    }\\n\\n    struct VideoPaymentStorageStruct {\\n        // Owner and admin management\\n        address owner;\\n        mapping(address => bool) isAdmin;\\n        // Content management\\n        mapping(uint256 => ContentConfig) contentConfigs;\\n        // User permissions\\n        mapping(address => mapping(uint256 => ViewPermission)) userPermissions;\\n        // Supported payment tokens\\n        mapping(address => bool) supportedTokens;\\n        // Emergency pause\\n        bool paused;\\n        // Contract version\\n        uint256 version;\\n        // Reserved storage slots for future upgrades\\n        uint256[50] __gap;\\n    }\\n}\\n\",\"keccak256\":\"0x039f47df083413b22a6a07bbcd73eae115935d4dba5b14e307ba78831fa8d640\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/libraries/VideoPaymentStorage.sol":{"VideoPaymentStorage":{"abi":[],"devdoc":{"details":"Storage layout for VideoPayment contract to ensure upgrade compatibility","kind":"dev","methods":{},"title":"VideoPaymentStorage","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203c52adfb39181c1ebe7e93fbefd56adf13583105e7bca53bccffb8df7557cba764736f6c634300081c0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 EXTCODECOPY MSTORE 0xAD 0xFB CODECOPY XOR SHR 0x1E 0xBE PUSH31 0x93FBEFD56ADF13583105E7BCA53BCCFFB8DF7557CBA764736F6C634300081C STOP CALLER ","sourceMap":"177:1288:16:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;177:1288:16;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203c52adfb39181c1ebe7e93fbefd56adf13583105e7bca53bccffb8df7557cba764736f6c634300081c0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODECOPY MSTORE 0xAD 0xFB CODECOPY XOR SHR 0x1E 0xBE PUSH31 0x93FBEFD56ADF13583105E7BCA53BCCFFB8DF7557CBA764736F6C634300081C STOP CALLER ","sourceMap":"177:1288:16:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Storage layout for VideoPayment contract to ensure upgrade compatibility\",\"kind\":\"dev\",\"methods\":{},\"title\":\"VideoPaymentStorage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/VideoPaymentStorage.sol\":\"VideoPaymentStorage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/VideoPaymentStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\n/**\\n * @title VideoPaymentStorage\\n * @dev Storage layout for VideoPayment contract to ensure upgrade compatibility\\n */\\nlibrary VideoPaymentStorage {\\n    // Storage layout version for upgrade compatibility\\n    uint256 constant STORAGE_VERSION = 1;\\n\\n    struct ContentConfig {\\n        mapping(address => uint256) tokenPrices; // ERC20 token prices\\n        uint256 nativePrice; // Native coin price\\n        uint256 defaultViewCount; // Default view count when purchased\\n        uint256 viewDuration; // View validity duration in seconds\\n        bool isActive; // Whether content is purchasable\\n    }\\n\\n    struct ViewPermission {\\n        uint256 purchaseTime; // Purchase timestamp\\n        uint256 remainingViews; // Remaining view count\\n        bool isValid; // Whether permission is valid\\n    }\\n\\n    struct VideoPaymentStorageStruct {\\n        // Owner and admin management\\n        address owner;\\n        mapping(address => bool) isAdmin;\\n        // Content management\\n        mapping(uint256 => ContentConfig) contentConfigs;\\n        // User permissions\\n        mapping(address => mapping(uint256 => ViewPermission)) userPermissions;\\n        // Supported payment tokens\\n        mapping(address => bool) supportedTokens;\\n        // Emergency pause\\n        bool paused;\\n        // Contract version\\n        uint256 version;\\n        // Reserved storage slots for future upgrades\\n        uint256[50] __gap;\\n    }\\n}\\n\",\"keccak256\":\"0x039f47df083413b22a6a07bbcd73eae115935d4dba5b14e307ba78831fa8d640\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}}}}}