Contract 0x3956c81a51feaed98d7a678d53f44b9166c8ed66 6

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1a260fdf5d3e7faca261924a7868ab8e4116325984fe9c8e9ebe2155b6240a98Safe Transfer Fr...51199512022-01-27 7:54:5433 mins ago0x259f962e77262ee8d97cc6a112d0e0321323ea0d IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001117169046 ETH
0x9f029ae9aa6516f494089c9997e489c5a4ffbfc46d61b8d44407146ac862cd46Set Approval For...51197702022-01-27 7:48:5339 mins ago0x259f962e77262ee8d97cc6a112d0e0321323ea0d IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000666229754 ETH
0xc409764e96ffb004282e872d10db6e2e36d48ccb03284f6eca741122f5feb9ccSafe Transfer Fr...51188842022-01-27 7:16:591 hr 11 mins ago0xbd16ea350f19025ad2b92c3325a4d90e1205c7be IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001125214116 ETH
0x8ace3a4ce7599bad2872b6d282cda7c3ac5fd0f1e70d7ba0356ae1fd1e864c62Set Approval For...51188672022-01-27 7:16:131 hr 11 mins ago0xa9b74aa8916aa109dc4734c3909cfac5b07646d9 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000666624344 ETH
0x9cdbb12607de05462b700d2183a3b33d40432c7d3d216c1e6bbcf3486ef4076eSafe Transfer Fr...51186502022-01-27 7:07:511 hr 20 mins ago0x40d3c10d56cc8d90a570fac04daa9fc50da3e1db IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001059797767 ETH
0xd8b0263448e1ce02dc277ef6a94c453688a1429d1b707c1c918b004963fcb0f8Safe Transfer Fr...51186372022-01-27 7:07:511 hr 20 mins ago0x40d3c10d56cc8d90a570fac04daa9fc50da3e1db IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.00111938309 ETH
0x0d65b231b4e8452443159208b8c3492f56f227c15ffb7a81131b3ceef3d3ed21Safe Transfer Fr...51184662022-01-27 7:00:401 hr 27 mins ago0x97e009cb2553b9d753ee9e08acff8f32903edd28 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.00074196276 ETH
0x9951a69232f6185ab6df7a7205a7455513e87862f13c103a795880c9e8902151Safe Transfer Fr...51184242022-01-27 6:58:281 hr 29 mins ago0x97e009cb2553b9d753ee9e08acff8f32903edd28 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000743701485 ETH
0x9947a65a9e10ff853297819188bdb5866c2e5c7480f767a7483ed529cd90bc37Set Approval For...51183012022-01-27 6:54:231 hr 33 mins ago0x7baf191cfaa4a0b08991fb728179baaf3917836a IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000671279841 ETH
0x9cba3bc0229f1ef9eb8dcbafa8d9610569e0d94792ad5578c4af0bfdcfec03f3Set Approval For...51158642022-01-27 5:16:323 hrs 11 mins ago0xd44d89259a2bbff300f4c50ebe0b555ce1c213c7 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.00067704869 ETH
0xa4f841858f2c2ab1b6455b6d84a6f9b7a2311d2738563b92cac4b109b91856baSet Approval For...51153762022-01-27 4:55:523 hrs 32 mins ago0xfebeef0f5f0419b85b6da1961416915e2d3a109a IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000679642605 ETH
0x9d04e013c1a5f3bc7834039553d84b832b028144549dac83b8aea1495a9d053aSafe Transfer Fr...51153492022-01-27 4:55:523 hrs 32 mins ago0x8bc0cdbf6f45cc79895e4c5cb9bcd7cfe8da74dd IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001142577478 ETH
0x919649d76108e0d4a6848969c181708ec2d84d533e0660af6e3d4767863a28c3Set Approval For...51144982022-01-27 4:22:074 hrs 5 mins ago0xcd6be20b20748c3d507001ec48619b892b534839 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000681999688 ETH
0xf033639721db71ec9fb405ecbd5511e9c52d1b62e27c52b44222f78eaaec302fSafe Transfer Fr...51127082022-01-27 3:31:514 hrs 56 mins ago0x6c0cf880cb20eefabfb09341fba9e2bd29ad3dfa IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000762733161 ETH
0xce63b92d39ae5a84eda7003a48684c6fe04fdfbe99db19ce8d040f3d4dfa7bb4Safe Transfer Fr...51115182022-01-27 2:55:225 hrs 32 mins ago0x7caa9f43822e288782e3e8797c8a16774c689b3d IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001146551493 ETH
0x62bc37dec718403f770a8af41af827c38a83d32ba9a0a78b9525de9778699de8Set Approval For...51114602022-01-27 2:54:365 hrs 33 mins ago0xec84c617c4a6f99cbb5e4d249cbf9de1559b436f IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000679881213 ETH
0x7642fcd02e531847f7168b7386b3bbf3daa5d68664d0796db92de33e9fe25083Safe Transfer Fr...51114352022-01-27 2:52:095 hrs 35 mins ago0x403a5a6afd8c1f7857bc9f90386f6412da0cd104 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001138342054 ETH
0x96b1e0163f1cf6ccb504a2719d7acbd9de2008e873c0713405f678a44e359e60Set Approval For...51095772022-01-27 1:59:416 hrs 28 mins ago0xf63b9d007013a850f9ad628d9268865070721dfd IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000682251799 ETH
0x242b8c841076abbbf9b760bf61893a94c96a78627703e60ea89e970e99ce6a79Set Approval For...51091852022-01-27 1:50:316 hrs 37 mins ago0x03d0c10f8bdc400ffe6203e281650f1b4a9278e9 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000689048918 ETH
0x5d994a1f6ff41cef68f61f49e8d34a629e8b5a8dc5471954897b5e24f6260613Set Approval For...51076622022-01-27 1:09:397 hrs 18 mins ago0x1a0e1a6024805c5f49c4031f5000fa4fcb7e4afb IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000626659362 ETH
0xc2b4e30873e161829cfefe0096291b79b709ab85871bf75613284631bacc5c62Set Approval For...51071322022-01-27 0:54:157 hrs 33 mins ago0x067d20b09d653e512b5874ea19c2700be5fa821b IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000690337434 ETH
0x7000a0b0c7021e07d9f93a1f8fd439c6ce25d59bf5bd988fc74accff43febc46Safe Transfer Fr...51063722022-01-27 0:31:117 hrs 56 mins ago0x7b2dcadceac7b472409eceeca489fee8b5db2de4 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001166453238 ETH
0xd9dda349e9bac816acad36c2a7bc0c1ed24d6aeb4708e7027dbcaa152834ae23Safe Transfer Fr...51049292022-01-26 23:36:238 hrs 51 mins ago0x414533f66a8359db22c3b74733826fdfe7fcc72f IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.001168219275 ETH
0x785df8a7299a4a96b01742d22c923d3f9f211fa3f3e6b9990759f37e5daf1788Set Approval For...51048902022-01-26 23:36:238 hrs 51 mins ago0x0b9dfd38542cc9f69a69c65cada77ac24dbcfab0 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000692155798 ETH
0x8dc0825f065e689f9594d6fb5133422d86f2ed84c0791ca78f08480a96b015efSet Approval For...51045762022-01-26 23:23:379 hrs 4 mins ago0x1801edf1e4b83e1590ffc1aefd9782ce521cba27 IN  0x3956c81a51feaed98d7a678d53f44b9166c8ed660 ETH0.000682293953 ETH
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CardsProxy

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 24 : CardsProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import '@solidstate/contracts/introspection/ERC165Storage.sol';
import '@solidstate/contracts/proxy/diamond/Diamond.sol';
import '@solidstate/contracts/token/ERC1155/IERC1155.sol';
import '@solidstate/contracts/token/ERC1155/metadata/ERC1155MetadataStorage.sol';

import './CardsMintStorage.sol';

contract CardsProxy is Diamond {
    using ERC165Storage for ERC165Storage.Layout;

    constructor(address merkleProofClaim, string memory baseURI) {
        ERC165Storage.layout().setSupportedInterface(
            type(IERC1155).interfaceId,
            true
        );
        CardsMintStorage.layout().minters[merkleProofClaim] = true;
        ERC1155MetadataStorage.layout().baseURI = baseURI;
    }
}

File 2 of 24 : ERC165Storage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library ERC165Storage {
    struct Layout {
        mapping(bytes4 => bool) supportedInterfaces;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.ERC165');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function isSupportedInterface(Layout storage l, bytes4 interfaceId)
        internal
        view
        returns (bool)
    {
        return l.supportedInterfaces[interfaceId];
    }

    function setSupportedInterface(
        Layout storage l,
        bytes4 interfaceId,
        bool status
    ) internal {
        require(interfaceId != 0xffffffff, 'ERC165: invalid interface id');
        l.supportedInterfaces[interfaceId] = status;
    }
}

File 3 of 24 : Diamond.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { SafeOwnable, OwnableStorage, Ownable } from '../../access/SafeOwnable.sol';
import { IERC173 } from '../../access/IERC173.sol';
import { ERC165, IERC165, ERC165Storage } from '../../introspection/ERC165.sol';
import { DiamondBase, DiamondBaseStorage } from './DiamondBase.sol';
import { DiamondCuttable, IDiamondCuttable } from './DiamondCuttable.sol';
import { DiamondLoupe, IDiamondLoupe } from './DiamondLoupe.sol';

/**
 * @notice SolidState "Diamond" proxy reference implementation
 */
abstract contract Diamond is
    DiamondBase,
    DiamondCuttable,
    DiamondLoupe,
    SafeOwnable,
    ERC165
{
    using DiamondBaseStorage for DiamondBaseStorage.Layout;
    using ERC165Storage for ERC165Storage.Layout;
    using OwnableStorage for OwnableStorage.Layout;

    constructor() {
        ERC165Storage.Layout storage erc165 = ERC165Storage.layout();
        bytes4[] memory selectors = new bytes4[](12);

        // register DiamondCuttable

        selectors[0] = IDiamondCuttable.diamondCut.selector;

        erc165.setSupportedInterface(type(IDiamondCuttable).interfaceId, true);

        // register DiamondLoupe

        selectors[1] = IDiamondLoupe.facets.selector;
        selectors[2] = IDiamondLoupe.facetFunctionSelectors.selector;
        selectors[3] = IDiamondLoupe.facetAddresses.selector;
        selectors[4] = IDiamondLoupe.facetAddress.selector;

        erc165.setSupportedInterface(type(IDiamondLoupe).interfaceId, true);

        // register ERC165

        selectors[5] = IERC165.supportsInterface.selector;

        erc165.setSupportedInterface(type(IERC165).interfaceId, true);

        // register SafeOwnable

        selectors[6] = Ownable.owner.selector;
        selectors[7] = SafeOwnable.nomineeOwner.selector;
        selectors[8] = SafeOwnable.transferOwnership.selector;
        selectors[9] = SafeOwnable.acceptOwnership.selector;

        erc165.setSupportedInterface(type(IERC173).interfaceId, true);

        // register Diamond

        selectors[10] = Diamond.getFallbackAddress.selector;
        selectors[11] = Diamond.setFallbackAddress.selector;

        // diamond cut

        FacetCut[] memory facetCuts = new FacetCut[](1);

        facetCuts[0] = FacetCut({
            target: address(this),
            action: IDiamondCuttable.FacetCutAction.ADD,
            selectors: selectors
        });

        DiamondBaseStorage.layout().diamondCut(facetCuts, address(0), '');

        // set owner

        OwnableStorage.layout().setOwner(msg.sender);
    }

    receive() external payable {}

    /**
     * @notice get the address of the fallback contract
     * @return fallback address
     */
    function getFallbackAddress() external view returns (address) {
        return DiamondBaseStorage.layout().fallbackAddress;
    }

    /**
     * @notice set the address of the fallback contract
     * @param fallbackAddress fallback address
     */
    function setFallbackAddress(address fallbackAddress) external onlyOwner {
        DiamondBaseStorage.layout().fallbackAddress = fallbackAddress;
    }
}

File 4 of 24 : IERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC1155Internal } from './IERC1155Internal.sol';
import { IERC165 } from '../../introspection/IERC165.sol';

/**
 * @notice ERC1155 interface
 * @dev see https://github.com/ethereum/EIPs/issues/1155
 */
interface IERC1155 is IERC1155Internal, IERC165 {
    /**
     * @notice query the balance of given token held by given address
     * @param account address to query
     * @param id token to query
     * @return token balance
     */
    function balanceOf(address account, uint256 id)
        external
        view
        returns (uint256);

    /**
     * @notice query the balances of given tokens held by given addresses
     * @param accounts addresss to query
     * @param ids tokens to query
     * @return token balances
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @notice query approval status of given operator with respect to given address
     * @param account address to query for approval granted
     * @param operator address to query for approval received
     * @return whether operator is approved to spend tokens held by account
     */
    function isApprovedForAll(address account, address operator)
        external
        view
        returns (bool);

    /**
     * @notice grant approval to or revoke approval from given operator to spend held tokens
     * @param operator address whose approval status to update
     * @param status whether operator should be considered approved
     */
    function setApprovalForAll(address operator, bool status) external;

    /**
     * @notice transfer tokens between given addresses, checking for ERC1155Receiver implementation if applicable
     * @param from sender of tokens
     * @param to receiver of tokens
     * @param id token ID
     * @param amount quantity of tokens to transfer
     * @param data data payload
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @notice transfer batch of tokens between given addresses, checking for ERC1155Receiver implementation if applicable
     * @param from sender of tokens
     * @param to receiver of tokens
     * @param ids list of token IDs
     * @param amounts list of quantities of tokens to transfer
     * @param data data payload
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 5 of 24 : ERC1155MetadataStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @notice ERC1155 metadata extensions
 */
library ERC1155MetadataStorage {
    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.ERC1155Metadata');

    struct Layout {
        string baseURI;
        mapping(uint256 => string) tokenURIs;
    }

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }
}

File 6 of 24 : CardsMintStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library CardsMintStorage {
    struct Layout {
        mapping(address => bool) minters;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('treasure.contracts.storage.CardsMint');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }
}

File 7 of 24 : SafeOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { Ownable, OwnableStorage } from './Ownable.sol';
import { SafeOwnableInternal } from './SafeOwnableInternal.sol';
import { SafeOwnableStorage } from './SafeOwnableStorage.sol';

/**
 * @title Ownership access control based on ERC173 with ownership transfer safety check
 */
abstract contract SafeOwnable is Ownable, SafeOwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;
    using SafeOwnableStorage for SafeOwnableStorage.Layout;

    function nomineeOwner() public view virtual returns (address) {
        return SafeOwnableStorage.layout().nomineeOwner;
    }

    /**
     * @inheritdoc Ownable
     * @dev ownership transfer must be accepted by beneficiary before transfer is complete
     */
    function transferOwnership(address account)
        public
        virtual
        override
        onlyOwner
    {
        SafeOwnableStorage.layout().setNomineeOwner(account);
    }

    /**
     * @notice accept transfer of contract ownership
     */
    function acceptOwnership() public virtual onlyNomineeOwner {
        OwnableStorage.Layout storage l = OwnableStorage.layout();
        emit OwnershipTransferred(l.owner, msg.sender);
        l.setOwner(msg.sender);
        SafeOwnableStorage.layout().setNomineeOwner(address(0));
    }
}

File 8 of 24 : IERC173.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Contract ownership standard interface
 * @dev see https://eips.ethereum.org/EIPS/eip-173
 */
interface IERC173 {
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @notice get the ERC173 contract owner
     * @return conract owner
     */
    function owner() external view returns (address);

    /**
     * @notice transfer contract ownership to new account
     * @param account address of new owner
     */
    function transferOwnership(address account) external;
}

File 9 of 24 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC165 } from './IERC165.sol';
import { ERC165Storage } from './ERC165Storage.sol';

/**
 * @title ERC165 implementation
 */
abstract contract ERC165 is IERC165 {
    using ERC165Storage for ERC165Storage.Layout;

    /**
     * @inheritdoc IERC165
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        override
        returns (bool)
    {
        return ERC165Storage.layout().isSupportedInterface(interfaceId);
    }
}

File 10 of 24 : DiamondBase.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { Proxy } from '../Proxy.sol';
import { DiamondBaseStorage } from './DiamondBaseStorage.sol';
import { IDiamondLoupe } from './IDiamondLoupe.sol';
import { IDiamondCuttable } from './IDiamondCuttable.sol';

/**
 * @title EIP-2535 "Diamond" proxy base contract
 * @dev see https://eips.ethereum.org/EIPS/eip-2535
 */
abstract contract DiamondBase is Proxy {
    /**
     * @inheritdoc Proxy
     */
    function _getImplementation() internal view override returns (address) {
        // inline storage layout retrieval uses less gas
        DiamondBaseStorage.Layout storage l;
        bytes32 slot = DiamondBaseStorage.STORAGE_SLOT;
        assembly {
            l.slot := slot
        }

        address implementation = address(bytes20(l.facets[msg.sig]));

        if (implementation == address(0)) {
            implementation = l.fallbackAddress;
            require(
                implementation != address(0),
                'DiamondBase: no facet found for function signature'
            );
        }

        return implementation;
    }
}

File 11 of 24 : DiamondCuttable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { OwnableInternal } from '../../access/OwnableInternal.sol';
import { IDiamondCuttable } from './IDiamondCuttable.sol';
import { DiamondBaseStorage } from './DiamondBaseStorage.sol';

/**
 * @title EIP-2535 "Diamond" proxy update contract
 */
abstract contract DiamondCuttable is IDiamondCuttable, OwnableInternal {
    using DiamondBaseStorage for DiamondBaseStorage.Layout;

    /**
     * @notice update functions callable on Diamond proxy
     * @param facetCuts array of structured Diamond facet update data
     * @param target optional recipient of initialization delegatecall
     * @param data optional initialization call data
     */
    function diamondCut(
        FacetCut[] calldata facetCuts,
        address target,
        bytes calldata data
    ) external override onlyOwner {
        DiamondBaseStorage.layout().diamondCut(facetCuts, target, data);
    }
}

File 12 of 24 : DiamondLoupe.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { DiamondBaseStorage } from './DiamondBaseStorage.sol';
import { IDiamondLoupe } from './IDiamondLoupe.sol';

/**
 * @title EIP-2535 "Diamond" proxy introspection contract
 * @dev derived from https://github.com/mudgen/diamond-2 (MIT license)
 */
abstract contract DiamondLoupe is IDiamondLoupe {
    /**
     * @inheritdoc IDiamondLoupe
     */
    function facets()
        external
        view
        override
        returns (Facet[] memory diamondFacets)
    {
        DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout();

        diamondFacets = new Facet[](l.selectorCount);

        uint8[] memory numFacetSelectors = new uint8[](l.selectorCount);
        uint256 numFacets;
        uint256 selectorIndex;

        // loop through function selectors
        for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) {
            bytes32 slot = l.selectorSlots[slotIndex];

            for (
                uint256 selectorSlotIndex;
                selectorSlotIndex < 8;
                selectorSlotIndex++
            ) {
                selectorIndex++;

                if (selectorIndex > l.selectorCount) {
                    break;
                }

                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));
                address facet = address(bytes20(l.facets[selector]));

                bool continueLoop;

                for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
                    if (diamondFacets[facetIndex].target == facet) {
                        diamondFacets[facetIndex].selectors[
                            numFacetSelectors[facetIndex]
                        ] = selector;
                        // probably will never have more than 256 functions from one facet contract
                        require(numFacetSelectors[facetIndex] < 255);
                        numFacetSelectors[facetIndex]++;
                        continueLoop = true;
                        break;
                    }
                }

                if (continueLoop) {
                    continue;
                }

                diamondFacets[numFacets].target = facet;
                diamondFacets[numFacets].selectors = new bytes4[](
                    l.selectorCount
                );
                diamondFacets[numFacets].selectors[0] = selector;
                numFacetSelectors[numFacets] = 1;
                numFacets++;
            }
        }

        for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
            uint256 numSelectors = numFacetSelectors[facetIndex];
            bytes4[] memory selectors = diamondFacets[facetIndex].selectors;

            // setting the number of selectors
            assembly {
                mstore(selectors, numSelectors)
            }
        }

        // setting the number of facets
        assembly {
            mstore(diamondFacets, numFacets)
        }
    }

    /**
     * @inheritdoc IDiamondLoupe
     */
    function facetFunctionSelectors(address facet)
        external
        view
        override
        returns (bytes4[] memory selectors)
    {
        DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout();

        selectors = new bytes4[](l.selectorCount);

        uint256 numSelectors;
        uint256 selectorIndex;

        // loop through function selectors
        for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) {
            bytes32 slot = l.selectorSlots[slotIndex];

            for (
                uint256 selectorSlotIndex;
                selectorSlotIndex < 8;
                selectorSlotIndex++
            ) {
                selectorIndex++;

                if (selectorIndex > l.selectorCount) {
                    break;
                }

                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));

                if (facet == address(bytes20(l.facets[selector]))) {
                    selectors[numSelectors] = selector;
                    numSelectors++;
                }
            }
        }

        // set the number of selectors in the array
        assembly {
            mstore(selectors, numSelectors)
        }
    }

    /**
     * @inheritdoc IDiamondLoupe
     */
    function facetAddresses()
        external
        view
        override
        returns (address[] memory addresses)
    {
        DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout();

        addresses = new address[](l.selectorCount);
        uint256 numFacets;
        uint256 selectorIndex;

        for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) {
            bytes32 slot = l.selectorSlots[slotIndex];

            for (
                uint256 selectorSlotIndex;
                selectorSlotIndex < 8;
                selectorSlotIndex++
            ) {
                selectorIndex++;

                if (selectorIndex > l.selectorCount) {
                    break;
                }

                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));
                address facet = address(bytes20(l.facets[selector]));

                bool continueLoop;

                for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
                    if (facet == addresses[facetIndex]) {
                        continueLoop = true;
                        break;
                    }
                }

                if (continueLoop) {
                    continue;
                }

                addresses[numFacets] = facet;
                numFacets++;
            }
        }

        // set the number of facet addresses in the array
        assembly {
            mstore(addresses, numFacets)
        }
    }

    /**
     * @inheritdoc IDiamondLoupe
     */
    function facetAddress(bytes4 selector)
        external
        view
        override
        returns (address facet)
    {
        facet = address(bytes20(DiamondBaseStorage.layout().facets[selector]));
    }
}

File 13 of 24 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC173 } from './IERC173.sol';
import { OwnableInternal } from './OwnableInternal.sol';
import { OwnableStorage } from './OwnableStorage.sol';

/**
 * @title Ownership access control based on ERC173
 */
abstract contract Ownable is IERC173, OwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;

    /**
     * @inheritdoc IERC173
     */
    function owner() public view virtual override returns (address) {
        return OwnableStorage.layout().owner;
    }

    /**
     * @inheritdoc IERC173
     */
    function transferOwnership(address account)
        public
        virtual
        override
        onlyOwner
    {
        OwnableStorage.layout().setOwner(account);
        emit OwnershipTransferred(msg.sender, account);
    }
}

File 14 of 24 : SafeOwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { SafeOwnableStorage } from './SafeOwnableStorage.sol';

abstract contract SafeOwnableInternal {
    using SafeOwnableStorage for SafeOwnableStorage.Layout;

    modifier onlyNomineeOwner() {
        require(
            msg.sender == SafeOwnableStorage.layout().nomineeOwner,
            'SafeOwnable: sender must be nominee owner'
        );
        _;
    }
}

File 15 of 24 : SafeOwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library SafeOwnableStorage {
    struct Layout {
        address nomineeOwner;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.SafeOwnable');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setNomineeOwner(Layout storage l, address nomineeOwner) internal {
        l.nomineeOwner = nomineeOwner;
    }
}

File 16 of 24 : OwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { OwnableStorage } from './OwnableStorage.sol';

abstract contract OwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;

    modifier onlyOwner() {
        require(
            msg.sender == OwnableStorage.layout().owner,
            'Ownable: sender must be owner'
        );
        _;
    }
}

File 17 of 24 : OwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library OwnableStorage {
    struct Layout {
        address owner;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.Ownable');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setOwner(Layout storage l, address owner) internal {
        l.owner = owner;
    }
}

File 18 of 24 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC165 interface registration interface
 * @dev see https://eips.ethereum.org/EIPS/eip-165
 */
interface IERC165 {
    /**
     * @notice query whether contract has registered support for given interface
     * @param interfaceId interface id
     * @return bool whether interface is supported
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 19 of 24 : Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { AddressUtils } from '../utils/AddressUtils.sol';

/**
 * @title Base proxy contract
 */
abstract contract Proxy {
    using AddressUtils for address;

    /**
     * @notice delegate all calls to implementation contract
     * @dev reverts if implementation address contains no code, for compatibility with metamorphic contracts
     * @dev memory location in use by assembly may be unsafe in other contexts
     */
    fallback() external payable virtual {
        address implementation = _getImplementation();

        require(
            implementation.isContract(),
            'Proxy: implementation must be contract'
        );

        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(
                gas(),
                implementation,
                0,
                calldatasize(),
                0,
                0
            )
            returndatacopy(0, 0, returndatasize())

            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @notice get logic implementation address
     * @return implementation address
     */
    function _getImplementation() internal virtual returns (address);
}

File 20 of 24 : DiamondBaseStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { AddressUtils } from '../../utils/AddressUtils.sol';
import { IDiamondCuttable } from './IDiamondCuttable.sol';

/**
 * @dev derived from https://github.com/mudgen/diamond-2 (MIT license)
 */
library DiamondBaseStorage {
    using AddressUtils for address;
    using DiamondBaseStorage for DiamondBaseStorage.Layout;

    struct Layout {
        // function selector => (facet address, selector slot position)
        mapping(bytes4 => bytes32) facets;
        // total number of selectors registered
        uint16 selectorCount;
        // array of selector slots with 8 selectors per slot
        mapping(uint256 => bytes32) selectorSlots;
        address fallbackAddress;
    }

    bytes32 constant CLEAR_ADDRESS_MASK =
        bytes32(uint256(0xffffffffffffffffffffffff));
    bytes32 constant CLEAR_SELECTOR_MASK = bytes32(uint256(0xffffffff << 224));

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.DiamondBase');

    event DiamondCut(
        IDiamondCuttable.FacetCut[] facetCuts,
        address target,
        bytes data
    );

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    /**
     * @notice update functions callable on Diamond proxy
     * @param l storage layout
     * @param facetCuts array of structured Diamond facet update data
     * @param target optional recipient of initialization delegatecall
     * @param data optional initialization call data
     */
    function diamondCut(
        Layout storage l,
        IDiamondCuttable.FacetCut[] memory facetCuts,
        address target,
        bytes memory data
    ) internal {
        unchecked {
            uint256 originalSelectorCount = l.selectorCount;
            uint256 selectorCount = originalSelectorCount;
            bytes32 selectorSlot;

            // Check if last selector slot is not full
            if (selectorCount & 7 > 0) {
                // get last selectorSlot
                selectorSlot = l.selectorSlots[selectorCount >> 3];
            }

            for (uint256 i; i < facetCuts.length; i++) {
                IDiamondCuttable.FacetCut memory facetCut = facetCuts[i];
                IDiamondCuttable.FacetCutAction action = facetCut.action;

                require(
                    facetCut.selectors.length > 0,
                    'DiamondBase: no selectors specified'
                );

                if (action == IDiamondCuttable.FacetCutAction.ADD) {
                    (selectorCount, selectorSlot) = l.addFacetSelectors(
                        selectorCount,
                        selectorSlot,
                        facetCut
                    );
                } else if (action == IDiamondCuttable.FacetCutAction.REMOVE) {
                    (selectorCount, selectorSlot) = l.removeFacetSelectors(
                        selectorCount,
                        selectorSlot,
                        facetCut
                    );
                } else if (action == IDiamondCuttable.FacetCutAction.REPLACE) {
                    l.replaceFacetSelectors(facetCut);
                }
            }

            if (selectorCount != originalSelectorCount) {
                l.selectorCount = uint16(selectorCount);
            }

            // If last selector slot is not full
            if (selectorCount & 7 > 0) {
                l.selectorSlots[selectorCount >> 3] = selectorSlot;
            }

            emit DiamondCut(facetCuts, target, data);
            initialize(target, data);
        }
    }

    function addFacetSelectors(
        Layout storage l,
        uint256 selectorCount,
        bytes32 selectorSlot,
        IDiamondCuttable.FacetCut memory facetCut
    ) internal returns (uint256, bytes32) {
        unchecked {
            require(
                facetCut.target == address(this) ||
                    facetCut.target.isContract(),
                'DiamondBase: ADD target has no code'
            );

            for (uint256 i; i < facetCut.selectors.length; i++) {
                bytes4 selector = facetCut.selectors[i];
                bytes32 oldFacet = l.facets[selector];

                require(
                    address(bytes20(oldFacet)) == address(0),
                    'DiamondBase: selector already added'
                );

                // add facet for selector
                l.facets[selector] =
                    bytes20(facetCut.target) |
                    bytes32(selectorCount);
                uint256 selectorInSlotPosition = (selectorCount & 7) << 5;

                // clear selector position in slot and add selector
                selectorSlot =
                    (selectorSlot &
                        ~(CLEAR_SELECTOR_MASK >> selectorInSlotPosition)) |
                    (bytes32(selector) >> selectorInSlotPosition);

                // if slot is full then write it to storage
                if (selectorInSlotPosition == 224) {
                    l.selectorSlots[selectorCount >> 3] = selectorSlot;
                    selectorSlot = 0;
                }

                selectorCount++;
            }

            return (selectorCount, selectorSlot);
        }
    }

    function removeFacetSelectors(
        Layout storage l,
        uint256 selectorCount,
        bytes32 selectorSlot,
        IDiamondCuttable.FacetCut memory facetCut
    ) internal returns (uint256, bytes32) {
        unchecked {
            require(
                facetCut.target == address(0),
                'DiamondBase: REMOVE target must be zero address'
            );

            uint256 selectorSlotCount = selectorCount >> 3;
            uint256 selectorInSlotIndex = selectorCount & 7;

            for (uint256 i; i < facetCut.selectors.length; i++) {
                bytes4 selector = facetCut.selectors[i];
                bytes32 oldFacet = l.facets[selector];

                require(
                    address(bytes20(oldFacet)) != address(0),
                    'DiamondBase: selector not found'
                );

                require(
                    address(bytes20(oldFacet)) != address(this),
                    'DiamondBase: selector is immutable'
                );

                if (selectorSlot == 0) {
                    selectorSlotCount--;
                    selectorSlot = l.selectorSlots[selectorSlotCount];
                    selectorInSlotIndex = 7;
                } else {
                    selectorInSlotIndex--;
                }

                bytes4 lastSelector;
                uint256 oldSelectorsSlotCount;
                uint256 oldSelectorInSlotPosition;

                // adding a block here prevents stack too deep error
                {
                    // replace selector with last selector in l.facets
                    lastSelector = bytes4(
                        selectorSlot << (selectorInSlotIndex << 5)
                    );

                    if (lastSelector != selector) {
                        // update last selector slot position info
                        l.facets[lastSelector] =
                            (oldFacet & CLEAR_ADDRESS_MASK) |
                            bytes20(l.facets[lastSelector]);
                    }

                    delete l.facets[selector];
                    uint256 oldSelectorCount = uint16(uint256(oldFacet));
                    oldSelectorsSlotCount = oldSelectorCount >> 3;
                    oldSelectorInSlotPosition = (oldSelectorCount & 7) << 5;
                }

                if (oldSelectorsSlotCount != selectorSlotCount) {
                    bytes32 oldSelectorSlot = l.selectorSlots[
                        oldSelectorsSlotCount
                    ];

                    // clears the selector we are deleting and puts the last selector in its place.
                    oldSelectorSlot =
                        (oldSelectorSlot &
                            ~(CLEAR_SELECTOR_MASK >>
                                oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);

                    // update storage with the modified slot
                    l.selectorSlots[oldSelectorsSlotCount] = oldSelectorSlot;
                } else {
                    // clears the selector we are deleting and puts the last selector in its place.
                    selectorSlot =
                        (selectorSlot &
                            ~(CLEAR_SELECTOR_MASK >>
                                oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);
                }

                if (selectorInSlotIndex == 0) {
                    delete l.selectorSlots[selectorSlotCount];
                    selectorSlot = 0;
                }
            }

            selectorCount = (selectorSlotCount << 3) | selectorInSlotIndex;

            return (selectorCount, selectorSlot);
        }
    }

    function replaceFacetSelectors(
        Layout storage l,
        IDiamondCuttable.FacetCut memory facetCut
    ) internal {
        unchecked {
            require(
                facetCut.target.isContract(),
                'DiamondBase: REPLACE target has no code'
            );

            for (uint256 i; i < facetCut.selectors.length; i++) {
                bytes4 selector = facetCut.selectors[i];
                bytes32 oldFacet = l.facets[selector];
                address oldFacetAddress = address(bytes20(oldFacet));

                require(
                    oldFacetAddress != address(0),
                    'DiamondBase: selector not found'
                );

                require(
                    oldFacetAddress != address(this),
                    'DiamondBase: selector is immutable'
                );

                require(
                    oldFacetAddress != facetCut.target,
                    'DiamondBase: REPLACE target is identical'
                );

                // replace old facet address
                l.facets[selector] =
                    (oldFacet & CLEAR_ADDRESS_MASK) |
                    bytes20(facetCut.target);
            }
        }
    }

    function initialize(address target, bytes memory data) private {
        require(
            (target == address(0)) == (data.length == 0),
            'DiamondBase: invalid initialization parameters'
        );

        if (target != address(0)) {
            if (target != address(this)) {
                require(
                    target.isContract(),
                    'DiamondBase: initialization target has no code'
                );
            }

            (bool success, ) = target.delegatecall(data);

            if (!success) {
                assembly {
                    returndatacopy(0, 0, returndatasize())
                    revert(0, returndatasize())
                }
            }
        }
    }
}

File 21 of 24 : IDiamondLoupe.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Diamond proxy introspection interface
 * @dev see https://eips.ethereum.org/EIPS/eip-2535
 */
interface IDiamondLoupe {
    struct Facet {
        address target;
        bytes4[] selectors;
    }

    /**
     * @notice get all facets and their selectors
     * @return diamondFacets array of structured facet data
     */
    function facets() external view returns (Facet[] memory diamondFacets);

    /**
     * @notice get all selectors for given facet address
     * @param facet address of facet to query
     * @return selectors array of function selectors
     */
    function facetFunctionSelectors(address facet)
        external
        view
        returns (bytes4[] memory selectors);

    /**
     * @notice get addresses of all facets used by diamond
     * @return addresses array of facet addresses
     */
    function facetAddresses()
        external
        view
        returns (address[] memory addresses);

    /**
     * @notice get the address of the facet associated with given selector
     * @param selector function selector to query
     * @return facet facet address (zero address if not found)
     */
    function facetAddress(bytes4 selector)
        external
        view
        returns (address facet);
}

File 22 of 24 : IDiamondCuttable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Diamond proxy upgrade interface
 * @dev see https://eips.ethereum.org/EIPS/eip-2535
 */
interface IDiamondCuttable {
    enum FacetCutAction {
        ADD,
        REPLACE,
        REMOVE
    }

    event DiamondCut(FacetCut[] facetCuts, address target, bytes data);

    struct FacetCut {
        address target;
        FacetCutAction action;
        bytes4[] selectors;
    }

    /**
     * @notice update diamond facets and optionally execute arbitrary initialization function
     * @param facetCuts facet addresses, actions, and function selectors
     * @param target initialization function target
     * @param data initialization function call data
     */
    function diamondCut(
        FacetCut[] calldata facetCuts,
        address target,
        bytes calldata data
    ) external;
}

File 23 of 24 : AddressUtils.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library AddressUtils {
    function toString(address account) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(uint160(account)));
        bytes memory alphabet = '0123456789abcdef';
        bytes memory chars = new bytes(42);

        chars[0] = '0';
        chars[1] = 'x';

        for (uint256 i = 0; i < 20; i++) {
            chars[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];
            chars[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];
        }

        return string(chars);
    }

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable account, uint256 amount) internal {
        (bool success, ) = account.call{ value: amount }('');
        require(success, 'AddressUtils: failed to send value');
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionCall(target, data, 'AddressUtils: failed low-level call');
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory error
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, error);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                'AddressUtils: failed low-level call with value'
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory error
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            'AddressUtils: insufficient balance for call'
        );
        return _functionCallWithValue(target, data, value, error);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory error
    ) private returns (bytes memory) {
        require(
            isContract(target),
            'AddressUtils: function call to non-contract'
        );

        (bool success, bytes memory returnData) = target.call{ value: value }(
            data
        );

        if (success) {
            return returnData;
        } else if (returnData.length > 0) {
            assembly {
                let returnData_size := mload(returnData)
                revert(add(32, returnData), returnData_size)
            }
        } else {
            revert(error);
        }
    }
}

File 24 of 24 : IERC1155Internal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC165 } from '../../introspection/IERC165.sol';

/**
 * @notice Partial ERC1155 interface needed by internal functions
 */
interface IERC1155Internal {
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    event ApprovalForAll(
        address indexed account,
        address indexed operator,
        bool approved
    );
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"merkleProofClaim","type":"address"},{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondCuttable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCuttable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondCuttable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondCuttable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"diamondFacets","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nomineeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackAddress","type":"address"}],"name":"setFallbackAddress","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":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162003630380380620036308339810160408190526200003491620012c5565b60006200004b620005e060201b62000ebe1760201c565b60408051600c8082526101a08201909252919250600091906020820161018080368337019050509050631f931c1c60e01b816000815181106200009e57634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101820152620000d89083906307e4c70760e21b9060019062000ee262000604821b17901c565b637a0ed62760e01b816001815181106200010257634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b90829060029081106200014857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060039081106200018e57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b9082906004908110620001d457634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091018201526200020e9083906348e2b09360e01b9060019062000ee262000604821b17901c565b6301ffc9a760e01b816005815181106200023857634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101820152620002729083906301ffc9a760e01b9060019062000ee262000604821b17901c565b638da5cb5b60e01b816006815181106200029c57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910190910152805163455a8a8560e11b9082906007908110620002e257634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910190910152805163f2fde38b60e01b90829060089081106200032857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516379ba509760e01b90829060099081106200036e57634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101820152620003a89083906307f5828d60e41b9060019062000ee262000604821b17901c565b632c40805960e01b81600a81518110620003d257634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051639142376560e01b908290600b9081106200041857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199290921660209283029190910190910152604080516001808252818301909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816200044957905050604080516060810190915230815290915060208101600081526020018381525081600081518110620004bb57634e487b7160e01b600052603260045260246000fd5b60200260200101819052506200050881600060405180602001604052806000815250620004f26200069260201b62000f6a1760201c565b620006b660201b62000f8e17909392919060201c565b6200053633620005226200090960201b6200119a1760201c565b6200092d60201b620011be1790919060201c565b50505062000571636cdb3d1360e11b60016200055c620005e060201b62000ebe1760201c565b6200060460201b62000ee2179092919060201c565b6001620005886200094a60201b620011db1760201c565b6001600160a01b0384166000908152602091825260409020805460ff1916921515929092179091558190620005c6906200096e811b620011ff17901c565b8151620005d792602001906200121f565b50505062001570565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083161415620006645760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615620006e75750600381901c60009081526002870160205260409020545b60005b8651811015620008775760008782815181106200071757634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816020015190506000826040015151116200078d5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b60648201526084016200065b565b6000816002811115620007b057634e487b7160e01b600052602160045260246000fd5b1415620007e057620007d58585848d6200099260201b6200122317909392919060201c565b90955093506200086c565b60028160028111156200080357634e487b7160e01b600052602160045260246000fd5b14156200082857620007d58585848d62000b7060201b620013e417909392919060201c565b60018160028111156200084b57634e487b7160e01b600052602160045260246000fd5b14156200086c576200086c828b62000e4460201b620016841790919060201c565b5050600101620006ea565b50828214620008945760018701805461ffff191661ffff84161790555b6007821615620008b757600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686604051620008ec93929190620013e7565b60405180910390a16200090085856200108a565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b7fd2fbe59115f79ec89cbdaf04053fefb85afb13a14fbcf6290cded23dd019d01d90565b7f4281b61aefbe70b3d3f684b428efca5f33077bc240e76f2808f9177c307617f490565b805160009081906001600160a01b0316301480620009ce5750620009ce83600001516001600160a01b03166200121960201b620003a41760201c565b62000a285760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b60648201526084016200065b565b60005b83604001515181101562000b635760008460400151828151811062000a6057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c1562000ae95760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b60648201526084016200065b565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c1999909916179781141562000b5357600389901c600090815260028b0160205260408120989098555b5050506001958601950162000a2b565b5093959294509192505050565b805160009081906001600160a01b03161562000be75760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b60648201526084016200065b565b600385901c6007861660005b85604001515181101562000e305760008660400151828151811062000c2857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c62000ca45760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e640060448201526064016200065b565b606081901c30141562000cf45760405162461bcd60e51b81526020600482015260226024820152600080516020620036108339815191526044820152616c6560f01b60648201526084016200065b565b8862000d1e57600019909401600081815260028c0160205260409020549850936007935062000d26565b600019909301925b600584901b89901b6000806001600160e01b03198084169086161462000d79576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166001600160601b0386161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821462000dde57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c17905562000e02565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8662000e1e57600088815260028f01602052604081208190559b505b50506001909301925062000bf3915050565b5060039190911b1796939550929350505050565b62000e6781600001516001600160a01b03166200121960201b620003a41760201c565b62000ec55760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b60648201526084016200065b565b60005b816040015151811015620010855760008260400151828151811062000efd57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8062000f7a5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e640060448201526064016200065b565b6001600160a01b03811630141562000fcf5760405162461bcd60e51b81526020600482015260226024820152600080516020620036108339815191526044820152616c6560f01b60648201526084016200065b565b84516001600160a01b03828116911614156200103f5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b60648201526084016200065b565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166001600160601b039190911617905560010162000ec8565b505050565b8051156001600160a01b0383161514620010fe5760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b60648201526084016200065b565b6001600160a01b0382161562001215576001600160a01b0382163014620011a3576200113e826001600160a01b03166200121960201b620003a41760201c565b620011a35760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b60648201526084016200065b565b6000826001600160a01b031682604051620011bf9190620013c9565b600060405180830381855af49150503d8060008114620011fc576040519150601f19603f3d011682016040523d82523d6000602084013e62001201565b606091505b505090508062001085573d6000803e3d6000fd5b5050565b3b151590565b8280546200122d906200151d565b90600052602060002090601f0160209004810192826200125157600085556200129c565b82601f106200126c57805160ff19168380011785556200129c565b828001600101855582156200129c579182015b828111156200129c5782518255916020019190600101906200127f565b50620012aa929150620012ae565b5090565b5b80821115620012aa5760008155600101620012af565b60008060408385031215620012d8578182fd5b82516001600160a01b0381168114620012ef578283fd5b60208401519092506001600160401b03808211156200130c578283fd5b818501915085601f83011262001320578283fd5b8151818111156200133557620013356200155a565b604051601f8201601f19908116603f011681019083821181831017156200136057620013606200155a565b8160405282815288602084870101111562001379578586fd5b6200138c836020830160208801620014ea565b80955050505050509250929050565b60008151808452620013b5816020860160208601620014ea565b601f01601f19169290920160200192915050565b60008251620013dd818460208701620014ea565b9190910192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b01875b84811015620014b857898403607f19018652815180516001600160a01b031685528381015189860190600381106200145557634e487b7160e01b8c52602160045260248cfd5b868601526040918201519186018a9052815190819052908401908a90898701905b80831015620014a25783516001600160e01b031916825292860192600192909201919086019062001476565b509785019795505050908201906001016200140f565b50506001600160a01b038a16908801528681036040880152620014dc81896200139b565b9a9950505050505050505050565b60005b8381101562001507578181015183820152602001620014ed565b8381111562001517576000848401525b50505050565b600181811c908216806200153257607f821691505b602082108114156200155457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61209080620015806000396000f3fe6080604052600436106100ab5760003560e01c80638ab5150a116100645780638ab5150a1461022a5780638da5cb5b1461023f5780639142376514610254578063adfca15e14610274578063cdffacc6146102a1578063f2fde38b146102c1576100b2565b806301ffc9a71461014d5780631f931c1c146101825780632c408059146101a457806352ef6b2c146101d157806379ba5097146101f35780637a0ed62714610208576100b2565b366100b257005b60006100bc6102e1565b90506001600160a01b0381163b6101295760405162461bcd60e51b815260206004820152602660248201527f50726f78793a20696d706c656d656e746174696f6e206d75737420626520636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610148573d6000f35b3d6000fd5b34801561015957600080fd5b5061016d610168366004611b34565b6103aa565b60405190151581526020015b60405180910390f35b34801561018e57600080fd5b506101a261019d366004611a88565b6103df565b005b3480156101b057600080fd5b506101b961046c565b6040516001600160a01b039091168152602001610179565b3480156101dd57600080fd5b506101e6610488565b6040516101799190611bda565b3480156101ff57600080fd5b506101a261065c565b34801561021457600080fd5b5061021d610743565b6040516101799190611d00565b34801561023657600080fd5b506101b9610c52565b34801561024b57600080fd5b506101b9610c73565b34801561026057600080fd5b506101a261026f366004611a6e565b610c7d565b34801561028057600080fd5b5061029461028f366004611a6e565b610cda565b6040516101799190611c27565b3480156102ad57600080fd5b506101b96102bc366004611b34565b610e49565b3480156102cd57600080fd5b506101a26102dc366004611a6e565b610e76565b600080356001600160e01b03191681527f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9360208190526040822054819060601c8061039d575060038201546001600160a01b03168061039d5760405162461bcd60e51b815260206004820152603260248201527f4469616d6f6e64426173653a206e6f20666163657420666f756e6420666f722060448201527166756e6374696f6e207369676e617475726560701b6064820152608401610120565b9392505050565b3b151590565b60006103d9826103b8610ebe565b906001600160e01b0319166000908152602091909152604090205460ff1690565b92915050565b6103e761119a565b546001600160a01b0316331461040f5760405162461bcd60e51b815260040161012090611d7c565b61046561041c8587611e73565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045d9250610f6a915050565b929190610f8e565b5050505050565b6000610476610f6a565b600301546001600160a01b0316919050565b60606000610494610f6a565b600181015490915061ffff1667ffffffffffffffff8111156104c657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156104ef578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610654576000818152600285016020526040812054905b600881101561063f578361052e81611fd3565b600188015490955061ffff1685111590506105485761063f565b600581901b82901b6001600160e01b0319811660009081526020889052604081205460601c90805b888110156105d4578a818151811061059857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316836001600160a01b031614156105c257600191506105d4565b806105cc81611fd3565b915050610570565b5080156105e35750505061062d565b818a898151811061060457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909216602092830291909101909101528761062681611fd3565b9850505050505b8061063781611fd3565b91505061051b565b5050808061064c90611fd3565b9150506104f8565b505082525090565b60008051602061203b833981519152546001600160a01b031633146106d55760405162461bcd60e51b815260206004820152602960248201527f536166654f776e61626c653a2073656e646572206d757374206265206e6f6d696044820152683732b29037bbb732b960b91b6064820152608401610120565b60006106df61119a565b805460405191925033916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a361072581336111be565b610740600060008051602061203b8339815191525b906111be565b50565b6060600061074f610f6a565b600181015490915061ffff1667ffffffffffffffff81111561078157634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107c757816020015b60408051808201909152600081526060602082015281526020019060019003908161079f5790505b50600182015490925060009061ffff1667ffffffffffffffff8111156107fd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610826578160200160208202803683370190505b50905060008060005b600185015461ffff16821015610bc4576000818152600286016020526040812054905b6008811015610baf578361086581611fd3565b600189015490955061ffff16851115905061087f57610baf565b600581901b82901b6001600160e01b0319811660009081526020899052604081205460601c90805b88811015610a1957826001600160a01b03168c82815181106108d957634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516001600160a01b03161415610a0757838c828151811061091557634e487b7160e01b600052603260045260246000fd5b6020026020010151602001518b838151811061094157634e487b7160e01b600052603260045260246000fd5b602002602001015160ff168151811061096a57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160e01b03191690816001600160e01b0319168152505060ff8a82815181106109ae57634e487b7160e01b600052603260045260246000fd5b602002602001015160ff16106109c357600080fd5b8981815181106109e357634e487b7160e01b600052603260045260246000fd5b6020026020010180518091906109f890611fee565b60ff1690525060019150610a19565b80610a1181611fd3565b9150506108a7565b508015610a2857505050610b9d565b818b8981518110610a4957634e487b7160e01b600052603260045260246000fd5b60209081029190910101516001600160a01b03909116905260018a015461ffff1667ffffffffffffffff811115610a9057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ab9578160200160208202803683370190505b508b8981518110610ada57634e487b7160e01b600052603260045260246000fd5b602002602001015160200181905250828b8981518110610b0a57634e487b7160e01b600052603260045260246000fd5b602002602001015160200151600081518110610b3657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160e01b03191690816001600160e01b031916815250506001898981518110610b7a57634e487b7160e01b600052603260045260246000fd5b60ff9092166020928302919091019091015287610b9681611fd3565b9850505050505b80610ba781611fd3565b915050610852565b50508080610bbc90611fd3565b91505061082f565b5060005b82811015610c47576000848281518110610bf257634e487b7160e01b600052603260045260246000fd5b602002602001015160ff1690506000878381518110610c2157634e487b7160e01b600052603260045260246000fd5b602002602001015160200151905081815250508080610c3f90611fd3565b915050610bc8565b508185525050505090565b600060008051602061203b8339815191525b546001600160a01b0316919050565b6000610c6461119a565b610c8561119a565b546001600160a01b03163314610cad5760405162461bcd60e51b815260040161012090611d7c565b80610cb6610f6a565b60030180546001600160a01b0319166001600160a01b039290921691909117905550565b60606000610ce6610f6a565b600181015490915061ffff1667ffffffffffffffff811115610d1857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d41578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610e3f576000818152600285016020526040812054905b6008811015610e2a5783610d8081611fd3565b600188015490955061ffff168511159050610d9a57610e2a565b600581901b82901b6001600160e01b0319811660009081526020889052604090205460601c6001600160a01b038a161415610e175780888781518110610df057634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015285610e1381611fd3565b9650505b5080610e2281611fd3565b915050610d6d565b50508080610e3790611fd3565b915050610d4a565b5050825250919050565b6000610e53610f6a565b6001600160e01b0319909216600090815260209290925250604090205460601c90565b610e7e61119a565b546001600160a01b03163314610ea65760405162461bcd60e51b815260040161012090611d7c565b6107408160008051602061203b83398151915261073a565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083161415610f3c5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e74657266616365206964000000006044820152606401610120565b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615610fbe5750600381901c60009081526002870160205260409020545b60005b865181101561110e576000878281518110610fec57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816020015190506000826040015151116110605760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b6064820152608401610120565b600081600281111561108257634e487b7160e01b600052602160045260246000fd5b141561109e576110948a868685611223565b9095509350611104565b60028160028111156110c057634e487b7160e01b600052602160045260246000fd5b14156110d2576110948a8686856113e4565b60018160028111156110f457634e487b7160e01b600052602160045260246000fd5b1415611104576111048a83611684565b5050600101610fc1565b5082821461112a5760018701805461ffff191661ffff84161790555b600782161561114c57600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161117f93929190611c3a565b60405180910390a16111918585611883565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b7fd2fbe59115f79ec89cbdaf04053fefb85afb13a14fbcf6290cded23dd019d01d90565b7f4281b61aefbe70b3d3f684b428efca5f33077bc240e76f2808f9177c307617f490565b805160009081906001600160a01b031630148061124a575082516001600160a01b03163b15155b6112a25760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b6064820152608401610120565b60005b8360400151518110156113d7576000846040015182815181106112d857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c1561135f5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b6064820152608401610120565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c199990991617978114156113c857600389901c600090815260028b0160205260408120989098555b505050600195860195016112a5565b5093959294509192505050565b805160009081906001600160a01b0316156114595760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b6064820152608401610120565b600385901c6007861660005b8560400151518110156116705760008660400151828151811061149857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c6115125760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b606081901c3014156115365760405162461bcd60e51b815260040161012090611db3565b8861155e57600019909401600081815260028c01602052604090205498509360079350611566565b600019909301925b600584901b89901b6000806001600160e01b0319808416908616146115bd576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166bffffffffffffffffffffffff86161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821461162057600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c179055611644565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8661165f57600088815260028f01602052604081208190559b505b505060019093019250611465915050565b5060039190911b1796939550929350505050565b80516001600160a01b03163b6116ec5760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b6064820152608401610120565b60005b81604001515181101561187e5760008260400151828151811061172257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8061179d5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b6001600160a01b0381163014156117c65760405162461bcd60e51b815260040161012090611db3565b84516001600160a01b03828116911614156118345760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b6064820152608401610120565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166bffffffffffffffffffffffff919091161790556001016116ef565b505050565b8051156001600160a01b03831615146118f55760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b6064820152608401610120565b6001600160a01b038216156119ef576001600160a01b0382163014611982576001600160a01b0382163b6119825760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b6064820152608401610120565b6000826001600160a01b03168260405161199c9190611bbe565b600060405180830381855af49150503d80600081146119d7576040519150601f19603f3d011682016040523d82523d6000602084013e6119dc565b606091505b505090508061187e573d6000803e3d6000fd5b5050565b80356001600160a01b0381168114611a0a57600080fd5b919050565b80356001600160e01b031981168114611a0a57600080fd5b60008083601f840112611a38578182fd5b50813567ffffffffffffffff811115611a4f578182fd5b602083019150836020828501011115611a6757600080fd5b9250929050565b600060208284031215611a7f578081fd5b61039d826119f3565b600080600080600060608688031215611a9f578081fd5b853567ffffffffffffffff80821115611ab6578283fd5b818801915088601f830112611ac9578283fd5b813581811115611ad7578384fd5b8960208260051b8501011115611aeb578384fd5b60208301975080965050611b01602089016119f3565b94506040880135915080821115611b16578283fd5b50611b2388828901611a27565b969995985093965092949392505050565b600060208284031215611b45578081fd5b61039d82611a0f565b6000815180845260208085019450808401835b83811015611b875781516001600160e01b03191687529582019590820190600101611b61565b509495945050505050565b60008151808452611baa816020860160208601611fa3565b601f01601f19169290920160200192915050565b60008251611bd0818460208701611fa3565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015611c1b5783516001600160a01b031683529284019291840191600101611bf6565b50909695505050505050565b60208152600061039d6020830184611b4e565b6000606080830181845280875180835260808601915060808160051b87010192506020808a01865b83811015611cd157888603607f19018552815180516001600160a01b031687528381015160038110611ca257634e487b7160e01b8a52602160045260248afd5b87850152604090810151908701889052611cbe88880182611b4e565b9650509382019390820190600101611c62565b50506001600160a01b0389169087015250508381036040850152611cf58186611b92565b979650505050505050565b60006020808301818452808551808352604092508286019150828160051b870101848801865b83811015611d6e57888303603f19018552815180516001600160a01b03168452870151878401879052611d5b87850182611b4e565b9588019593505090860190600101611d26565b509098975050505050505050565b6020808252601d908201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604082015260600190565b60208082526022908201527f4469616d6f6e64426173653a2073656c6563746f7220697320696d6d757461626040820152616c6560f01b606082015260800190565b6040516060810167ffffffffffffffff81118282101715611e1857611e18612024565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611e4757611e47612024565b604052919050565b600067ffffffffffffffff821115611e6957611e69612024565b5060051b60200190565b6000611e86611e8184611e4f565b611e1e565b838152602080820191908460053688821b83011115611ea3578586fd5b855b88811015611f9657823567ffffffffffffffff80821115611ec4578889fd5b818a01915060608236031215611ed8578889fd5b611ee0611df5565b611ee9836119f3565b81528683013560038110611efb578a8bfd5b8188015260408381013583811115611f11578b8cfd5b939093019236601f850112611f24578a8bfd5b83359250611f34611e8184611e4f565b83815288810190858a0136868a1b88018c011115611f50578d8efd5b8d96505b85871015611f7957611f6581611a0f565b835260019690960195918a01918a01611f54565b509183019190915250885250509483019491830191600101611ea5565b5092979650505050505050565b60005b83811015611fbe578181015183820152602001611fa6565b83811115611fcd576000848401525b50505050565b6000600019821415611fe757611fe761200e565b5060010190565b600060ff821660ff8114156120055761200561200e565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce6617890a26469706673582212205e055320dde7c68af7864df8aac3f8587155aca7c74d78de9a5992c61c4f813664736f6c634300080400334469616d6f6e64426173653a2073656c6563746f7220697320696d6d75746162000000000000000000000000d0ed73b33789111807bd64ae2a6e1e6f92f986f50000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d56704a556b69444842425048434a6e6a3556414b697a7870717566507541377a4a56574b774870525653564d2f000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d0ed73b33789111807bd64ae2a6e1e6f92f986f50000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d56704a556b69444842425048434a6e6a3556414b697a7870717566507541377a4a56574b774870525653564d2f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : merkleProofClaim (address): 0xd0ed73b33789111807bd64ae2a6e1e6f92f986f5
Arg [1] : baseURI (string): https://gateway.pinata.cloud/ipfs/QmVpJUkiDHBBPHCJnj5VAKizxpqufPuA7zJVWKwHpRVSVM/

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000d0ed73b33789111807bd64ae2a6e1e6f92f986f5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [3] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [4] : 732f516d56704a556b69444842425048434a6e6a3556414b697a787071756650
Arg [5] : 7541377a4a56574b774870525653564d2f000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.