ETH Price: $3,486.03 (+4.57%)

Token

Diamond ()
 

Overview

Max Total Supply

3,000 Diamond

Holders

1,150

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
46days.eth
Balance
1 Diamond
0xf3772aC6A4A92D74d2e20512bDf36C56Fe82a445
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Diamond

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 11 : Diamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
*
* Implementation of a diamond.
/******************************************************************************/

import { LibDiamond } from "./libraries/LibDiamond.sol";
import { IDiamondCut } from "./interfaces/IDiamondCut.sol";
import { ICustomToken } from "./interfaces/ICustomToken.sol";
import { AppStorage } from "./libraries/LibAppStorage.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "@openzeppelin/contracts/interfaces/IERC165.sol";
import "@solidstate/contracts/access/IERC173.sol";

contract Diamond {
    AppStorage internal s;

    constructor(address _contractOwner, address _diamondCutFacet, address _diamondLoupeFacet) payable {
        LibDiamond.setContractOwner(_contractOwner);

        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        ds.supportedInterfaces[type(IERC721).interfaceId] = true;
        ds.supportedInterfaces[type(IERC173).interfaceId] = true;
        ds.supportedInterfaces[type(IERC721Enumerable).interfaceId] = true;
        ds.supportedInterfaces[type(IERC721Metadata).interfaceId] = true;
        ds.supportedInterfaces[type(ICustomToken).interfaceId] = true;

        // Add the diamondCut external function from the diamondCutFacet
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](2);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IDiamondCut.diamondCut.selector;
        cut[0] = IDiamondCut.FacetCut({
            facetAddress: _diamondCutFacet,
            action: IDiamondCut.FacetCutAction.Add,
            functionSelectors: functionSelectors
        });

        // Add the IERC165.supportsInterface function
        bytes4[] memory erc165functionSelectors = new bytes4[](1);
        erc165functionSelectors[0] = IERC165.supportsInterface.selector;
        cut[1] = IDiamondCut.FacetCut({
            facetAddress: _diamondLoupeFacet,
            action: IDiamondCut.FacetCutAction.Add,
            functionSelectors: erc165functionSelectors
        });

        LibDiamond.diamondCut(cut, address(0), "");
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        // get diamond storage
        assembly {
            ds.slot := position
        }
        // get facet from function selector
        address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
        require(facet != address(0), "Diamond: Function does not exist");
        // Execute external function from facet using delegatecall and return any value.
        assembly {
            // copy function selector and any arguments
            calldatacopy(0, 0, calldatasize())
            // execute function call using the facet
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            // get any return value
            returndatacopy(0, 0, returndatasize())
            // return any return value or error back to the caller
            switch result
                case 0 {
                    revert(0, returndatasize())
                }
                default {
                    return(0, returndatasize())
                }
        }
    }

    receive() external payable {}
}

File 2 of 11 : LibDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/
import { IDiamondCut } from "../interfaces/IDiamondCut.sol";

library LibDiamond {
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct FacetAddressAndPosition {
        address facetAddress;
        uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint256 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    // Internal function version of diamondCut
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else {
                revert("LibDiamondCut: Incorrect FacetCutAction");
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();        
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);            
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists");
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function");
            removeFunction(ds, oldFacetAddress, selector);
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(ds, oldFacetAddress, selector);
        }
    }

    function addFacet(DiamondStorage storage ds, address _facetAddress) internal {
        enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
        ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;
        ds.facetAddresses.push(_facetAddress);
    }    


    function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {
        ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);
        ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;
    }

    function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal {        
        require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty");
        } else {
            require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)");
            if (_init != address(this)) {
                enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");
            }
            (bool success, bytes memory error) = _init.delegatecall(_calldata);
            if (!success) {
                if (error.length > 0) {
                    // bubble up the error
                    revert(string(error));
                } else {
                    revert("LibDiamondCut: _init function reverted");
                }
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

File 3 of 11 : IDiamondCut.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {Add, Replace, Remove}
    // Add=0, Replace=1, Remove=2

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

File 4 of 11 : ICustomToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { Trait } from "../libraries/LibAppStorage.sol";

interface ICustomToken {
    function addTraitType(uint256 _traitTypeIndex, Trait[] memory traits) external;
    function walletOfOwner(address _wallet) external view returns (uint256[] memory);
    function hashToMetadata(string memory _hash, uint256 _tokenId) external view returns (string memory);
    function hashToSVG(string memory _hash) external view returns (string memory);
    function contractURI() external view returns (string memory);
    function clearTraits() external;
    function mint() external;
}

File 5 of 11 : LibAppStorage.sol
pragma solidity ^0.8.0;

struct Trait {
    string traitName;
    string traitType;
    string[] pixels;
    uint256[] pixelCount;
}

struct AppStorage {
  mapping(uint256 => Trait[]) traitTypes;
  mapping(string => bool) hashToMinted;
  mapping(uint256 => string) tokenIdToHash;
  mapping(uint256 => string) tokenIdToName;
  mapping(uint256 => string) tokenIdToBio;
  mapping(uint256 => uint256) tokenIdToLevel;
	mapping (string => bool) nameReserved;
  uint256 LAST_MINT_TIME;
  uint256 MAX_SUPPLY;
  uint256 SEED_NONCE;
  uint16[][20] TIERS;
  string name;
  string[] LETTERS;
  address _owner;
}

library LibAppStorage {

    function diamondStorage() internal pure returns (AppStorage storage ds) {
        assembly {
            ds.slot := 0
        }
    }

    function abs(int256 x) internal pure returns (uint256) {
        return uint256(x >= 0 ? x : -x);
    }
}

File 6 of 11 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 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 be 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.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * 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.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev 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.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev 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 caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev 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.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 7 of 11 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 8 of 11 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 9 of 11 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

File 10 of 11 : 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 11 of 11 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address","name":"_diamondCutFacet","type":"address"},{"internalType":"address","name":"_diamondLoupeFacet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

608060405260405162004dc038038062004dc0833981810160405281019062000029919062001c87565b6200003f83620005f560201b620001681760201c565b600062000056620006d460201b6200023f1760201c565b905060018160030160007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f7f5828d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f022df852000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111562000334576200033362002611565b5b6040519080825280602002602001820160405280156200037157816020015b6200035d62001c24565b815260200190600190039081620003535790505b5090506000600167ffffffffffffffff81111562000394576200039362002611565b5b604051908082528060200260200182016040528015620003c35781602001602082028036833780820191505090505b509050631f931c1c60e01b81600081518110620003e557620003e4620025e2565b5b60200260200101907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152505060405180606001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001600060028111156200046f576200046e62002584565b5b815260200182815250826000815181106200048f576200048e620025e2565b5b60200260200101819052506000600167ffffffffffffffff811115620004ba57620004b962002611565b5b604051908082528060200260200182016040528015620004e95781602001602082028036833780820191505090505b5090506301ffc9a760e01b816000815181106200050b576200050a620025e2565b5b60200260200101907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152505060405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020016000600281111562000595576200059462002584565b5b81526020018281525083600181518110620005b557620005b4620025e2565b5b6020026020010181905250620005e8836000604051806020016040528060008152506200070160201b6200026c1760201c565b50505050505050620029ec565b600062000607620006d460201b60201c565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60005b835181101562000933576000848281518110620007265762000725620025e2565b5b6020026020010151602001519050600060028111156200074b576200074a62002584565b5b81600281111562000761576200076062002584565b5b1415620007c257620007bc858381518110620007825762000781620025e2565b5b602002602001015160000151868481518110620007a457620007a3620025e2565b5b6020026020010151604001516200098860201b60201c565b6200091c565b60016002811115620007d957620007d862002584565b5b816002811115620007ef57620007ee62002584565b5b141562000850576200084a85838151811062000810576200080f620025e2565b5b602002602001015160000151868481518110620008325762000831620025e2565b5b60200260200101516040015162000c2c60201b60201c565b6200091b565b60028081111562000866576200086562002584565b5b8160028111156200087c576200087b62002584565b5b1415620008dd57620008d78583815181106200089d576200089c620025e2565b5b602002602001015160000151868481518110620008bf57620008be620025e2565b5b60200260200101516040015162000ee360201b60201c565b6200091a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000911906200220e565b60405180910390fd5b5b5b5080806200092a90620024cd565b91505062000704565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620009699392919062002117565b60405180910390a16200098382826200108b60201b60201c565b505050565b6000815111620009cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c690620021ca565b60405180910390fd5b6000620009e1620006d460201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4d9062002230565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff16141562000acd5762000acc8285620012ba60201b60201c565b5b60005b835181101562000c2557600084828151811062000af25762000af1620025e2565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be09062002296565b60405180910390fd5b62000bfd8583868a6200139e60201b60201c565b838062000c0a906200251b565b9450505050808062000c1c90620024cd565b91505062000ad0565b5050505050565b600081511162000c73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6a90620021ca565b60405180910390fd5b600062000c85620006d460201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cf19062002230565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff16141562000d715762000d708285620012ba60201b60201c565b5b60005b835181101562000edc57600084828151811062000d965762000d95620025e2565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e8490620022b8565b60405180910390fd5b62000ea08582846200154b60201b60201c565b62000eb48583868a6200139e60201b60201c565b838062000ec1906200251b565b9450505050808062000ed390620024cd565b91505062000d74565b5050505050565b600081511162000f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f2190620021ca565b60405180910390fd5b600062000f3c620006d460201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fa790620022da565b60405180910390fd5b60005b82518110156200108557600083828151811062000fd55762000fd4620025e2565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506200106d8482846200154b60201b60201c565b505080806200107c90620024cd565b91505062000fb3565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200110e57600081511462001108576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010ff9062002186565b60405180910390fd5b620012b6565b600081511162001155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200114c9062002252565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620011b557620011b48260405180606001604052806028815260200162004d746028913962001bcf60201b60201c565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051620011df9190620020fe565b600060405180830381855af49150503d80600081146200121c576040519150601f19603f3d011682016040523d82523d6000602084013e62001221565b606091505b509150915081620012b3576000815111156200127657806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200126d919062002162565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012aa90620021a8565b60405180910390fd5b50505b5050565b620012e58160405180606001604052806024815260200162004d9c6024913962001bcf60201b60201c565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620015be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015b590620021ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016279062002274565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050620017099190620023b1565b9050808214620018a45760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106200176e576200176d620025e2565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018481548110620017ed57620017ec620025e2565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480620018fb57620018fa620025b3565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050600081141562001bc857600060018660020180549050620019e99190620023b1565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811462001b3157600087600201838154811062001a575762001a56620025e2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508088600201838154811062001a9e5762001a9d620025e2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b8660020180548062001b485762001b47620025b3565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b905060008111829062001c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c15919062002162565b60405180910390fd5b50505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000600281111562001c635762001c6262002584565b5b8152602001606081525090565b60008151905062001c8181620029d2565b92915050565b60008060006060848603121562001ca35762001ca262002640565b5b600062001cb38682870162001c70565b935050602062001cc68682870162001c70565b925050604062001cd98682870162001c70565b9150509250925092565b600062001cf1838362001e20565b60208301905092915050565b600062001d0b8383620020a8565b905092915050565b62001d1e81620023ec565b82525050565b62001d2f81620023ec565b82525050565b600062001d42826200231c565b62001d4e818562002362565b935062001d5b83620022fc565b8060005b8381101562001d9257815162001d76888262001ce3565b975062001d838362002348565b92505060018101905062001d5f565b5085935050505092915050565b600062001dac8262002327565b62001db8818562002373565b93508360208202850162001dcc856200230c565b8060005b8581101562001e0e578484038952815162001dec858262001cfd565b945062001df98362002355565b925060208a0199505060018101905062001dd0565b50829750879550505050505092915050565b62001e2b8162002400565b82525050565b600062001e3e8262002332565b62001e4a818562002384565b935062001e5c81856020860162002497565b62001e678162002645565b840191505092915050565b600062001e7f8262002332565b62001e8b818562002395565b935062001e9d81856020860162002497565b80840191505092915050565b62001eb48162002483565b82525050565b600062001ec7826200233d565b62001ed38185620023a0565b935062001ee581856020860162002497565b62001ef08162002645565b840191505092915050565b600062001f0a603c83620023a0565b915062001f178262002656565b604082019050919050565b600062001f31602683620023a0565b915062001f3e82620026a5565b604082019050919050565b600062001f58602b83620023a0565b915062001f6582620026f4565b604082019050919050565b600062001f7f603783620023a0565b915062001f8c8262002743565b604082019050919050565b600062001fa6602783620023a0565b915062001fb38262002792565b604082019050919050565b600062001fcd602c83620023a0565b915062001fda82620027e1565b604082019050919050565b600062001ff4603d83620023a0565b9150620020018262002830565b604082019050919050565b60006200201b602e83620023a0565b915062002028826200287f565b604082019050919050565b600062002042603583620023a0565b91506200204f82620028ce565b604082019050919050565b600062002069603883620023a0565b915062002076826200291d565b604082019050919050565b600062002090603683620023a0565b91506200209d826200296c565b604082019050919050565b6000606083016000830151620020c2600086018262001d13565b506020830151620020d7602086018262001ea9565b5060408301518482036040860152620020f1828262001d35565b9150508091505092915050565b60006200210c828462001e72565b915081905092915050565b6000606082019050818103600083015262002133818662001d9f565b905062002144602083018562001d24565b818103604083015262002158818462001e31565b9050949350505050565b600060208201905081810360008301526200217e818462001eba565b905092915050565b60006020820190508181036000830152620021a18162001efb565b9050919050565b60006020820190508181036000830152620021c38162001f22565b9050919050565b60006020820190508181036000830152620021e58162001f49565b9050919050565b60006020820190508181036000830152620022078162001f70565b9050919050565b60006020820190508181036000830152620022298162001f97565b9050919050565b600060208201905081810360008301526200224b8162001fbe565b9050919050565b600060208201905081810360008301526200226d8162001fe5565b9050919050565b600060208201905081810360008301526200228f816200200c565b9050919050565b60006020820190508181036000830152620022b18162002033565b9050919050565b60006020820190508181036000830152620022d3816200205a565b9050919050565b60006020820190508181036000830152620022f58162002081565b9050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000620023be8262002461565b9150620023cb8362002461565b925082821015620023e157620023e062002555565b5b828203905092915050565b6000620023f98262002441565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506200243c82620029bb565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b600062002490826200242c565b9050919050565b60005b83811015620024b75780820151818401526020810190506200249a565b83811115620024c7576000848401525b50505050565b6000620024da8262002461565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562002510576200250f62002555565b5b600182019050919050565b600062002528826200246b565b91506bffffffffffffffffffffffff8214156200254a576200254962002555565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b60038110620029cf57620029ce62002584565b5b50565b620029dd81620023ec565b8114620029e957600080fd5b50565b61237880620029fc6000396000f3fe60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013990611b88565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610163573d6000f35b3d6000fd5b600061017261023f565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60005b835181101561045357600084828151811061028d5761028c611f14565b5b6020026020010151602001519050600060028111156102af576102ae611eb6565b5b8160028111156102c2576102c1611eb6565b5b14156103135761030e8583815181106102de576102dd611f14565b5b6020026020010151600001518684815181106102fd576102fc611f14565b5b60200260200101516040015161049e565b61043f565b6001600281111561032757610326611eb6565b5b81600281111561033a57610339611eb6565b5b141561038b5761038685838151811061035657610355611f14565b5b60200260200101516000015186848151811061037557610374611f14565b5b602002602001015160400151610717565b61043e565b60028081111561039e5761039d611eb6565b5b8160028111156103b1576103b0611eb6565b5b1415610402576103fd8583815181106103cd576103cc611f14565b5b6020026020010151600001518684815181106103ec576103eb611f14565b5b60200260200101516040015161099b565b61043d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043490611b48565b60405180910390fd5b5b5b50808061044b90611e09565b91505061026f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161048793929190611a61565b60405180910390a16104998282610b26565b505050565b60008151116104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d990611b08565b60405180910390fd5b60006104ec61023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055590611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156105cc576105cb8285610d39565b5b60005b83518110156107105760008482815181106105ed576105ec611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611be8565b60405180910390fd5b6106ed8583868a610e14565b83806106f890611e52565b9450505050808061070890611e09565b9150506105cf565b5050505050565b600081511161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611b08565b60405180910390fd5b600061076561023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610845576108448285610d39565b5b60005b835181101561099457600084828151811061086657610865611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611c08565b60405180910390fd5b610965858284610fc1565b6109718583868a610e14565b838061097c90611e52565b9450505050808061098c90611e09565b915050610848565b5050505050565b60008151116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611b08565b60405180910390fd5b60006109e961023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190611c28565b60405180910390fd5b60005b8251811015610b20576000838281518110610a7b57610a7a611f14565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b0b848284610fc1565b50508080610b1890611e09565b915050610a5d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ba4576000815114610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690611ac8565b60405180910390fd5b610d35565b6000815111610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90611ba8565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c3e57610c3d826040518060600160405280602881526020016122f760289139611626565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c669190611a4a565b600060405180830381855af49150503d8060008114610ca1576040519150601f19603f3d011682016040523d82523d6000602084013e610ca6565b606091505b509150915081610d3257600081511115610cf757806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9190611aa6565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990611ae8565b60405180910390fd5b50505b5050565b610d5b8160405180606001604052806024815260200161231f60249139611626565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890611b28565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790611bc8565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490506111779190611cfd565b905080821461130b5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106111d8576111d7611f14565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061125457611253611f14565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180548061135f5761135e611ee5565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050600081141561161f5760006001866002018054905061144a9190611cfd565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461158b5760008760020183815481106114b4576114b3611f14565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808860020183815481106114f8576114f7611f14565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b8660020180548061159f5761159e611ee5565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699190611aa6565b60405180910390fd5b50505050565b60006116848383611795565b60208301905092915050565b600061169c83836119fa565b905092915050565b6116ad81611d31565b82525050565b6116bc81611d31565b82525050565b60006116cd82611c68565b6116d78185611cae565b93506116e283611c48565b8060005b838110156117135781516116fa8882611678565b975061170583611c94565b9250506001810190506116e6565b5085935050505092915050565b600061172b82611c73565b6117358185611cbf565b93508360208202850161174785611c58565b8060005b8581101561178357848403895281516117648582611690565b945061176f83611ca1565b925060208a0199505060018101905061174b565b50829750879550505050505092915050565b61179e81611d43565b82525050565b60006117af82611c7e565b6117b98185611cd0565b93506117c9818560208601611dd6565b6117d281611f43565b840191505092915050565b60006117e882611c7e565b6117f28185611ce1565b9350611802818560208601611dd6565b80840191505092915050565b61181781611dc4565b82525050565b600061182882611c89565b6118328185611cec565b9350611842818560208601611dd6565b61184b81611f43565b840191505092915050565b6000611863603c83611cec565b915061186e82611f54565b604082019050919050565b6000611886602683611cec565b915061189182611fa3565b604082019050919050565b60006118a9602b83611cec565b91506118b482611ff2565b604082019050919050565b60006118cc603783611cec565b91506118d782612041565b604082019050919050565b60006118ef602783611cec565b91506118fa82612090565b604082019050919050565b6000611912602c83611cec565b915061191d826120df565b604082019050919050565b6000611935602083611cec565b91506119408261212e565b602082019050919050565b6000611958603d83611cec565b915061196382612157565b604082019050919050565b600061197b602e83611cec565b9150611986826121a6565b604082019050919050565b600061199e603583611cec565b91506119a9826121f5565b604082019050919050565b60006119c1603883611cec565b91506119cc82612244565b604082019050919050565b60006119e4603683611cec565b91506119ef82612293565b604082019050919050565b6000606083016000830151611a1260008601826116a4565b506020830151611a25602086018261180e565b5060408301518482036040860152611a3d82826116c2565b9150508091505092915050565b6000611a5682846117dd565b915081905092915050565b60006060820190508181036000830152611a7b8186611720565b9050611a8a60208301856116b3565b8181036040830152611a9c81846117a4565b9050949350505050565b60006020820190508181036000830152611ac0818461181d565b905092915050565b60006020820190508181036000830152611ae181611856565b9050919050565b60006020820190508181036000830152611b0181611879565b9050919050565b60006020820190508181036000830152611b218161189c565b9050919050565b60006020820190508181036000830152611b41816118bf565b9050919050565b60006020820190508181036000830152611b61816118e2565b9050919050565b60006020820190508181036000830152611b8181611905565b9050919050565b60006020820190508181036000830152611ba181611928565b9050919050565b60006020820190508181036000830152611bc18161194b565b9050919050565b60006020820190508181036000830152611be18161196e565b9050919050565b60006020820190508181036000830152611c0181611991565b9050919050565b60006020820190508181036000830152611c21816119b4565b9050919050565b60006020820190508181036000830152611c41816119d7565b9050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611d0882611da2565b9150611d1383611da2565b925082821015611d2657611d25611e87565b5b828203905092915050565b6000611d3c82611d82565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050611d7d826122e2565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b6000611dcf82611d6f565b9050919050565b60005b83811015611df4578082015181840152602081019050611dd9565b83811115611e03576000848401525b50505050565b6000611e1482611da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e4757611e46611e87565b5b600182019050919050565b6000611e5d82611dac565b91506bffffffffffffffffffffffff821415611e7c57611e7b611e87565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374600082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b600381106122f3576122f2611eb6565b5b5056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220ea9a76729266365343bb9b118ec2ca4ca49c28c23a767dc82fde3d9b31ed47a164736f6c634300080600334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465000000000000000000000000aefacf945a5986f864585a4851293d9f4a14da9b0000000000000000000000002ea87b3ad4a9f9c015a28c7927ba8499534720dc0000000000000000000000009c0f0bd38a1fb5de569f3f937e11f1e39c16e999

Deployed Bytecode

0x60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013990611b88565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610163573d6000f35b3d6000fd5b600061017261023f565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60005b835181101561045357600084828151811061028d5761028c611f14565b5b6020026020010151602001519050600060028111156102af576102ae611eb6565b5b8160028111156102c2576102c1611eb6565b5b14156103135761030e8583815181106102de576102dd611f14565b5b6020026020010151600001518684815181106102fd576102fc611f14565b5b60200260200101516040015161049e565b61043f565b6001600281111561032757610326611eb6565b5b81600281111561033a57610339611eb6565b5b141561038b5761038685838151811061035657610355611f14565b5b60200260200101516000015186848151811061037557610374611f14565b5b602002602001015160400151610717565b61043e565b60028081111561039e5761039d611eb6565b5b8160028111156103b1576103b0611eb6565b5b1415610402576103fd8583815181106103cd576103cc611f14565b5b6020026020010151600001518684815181106103ec576103eb611f14565b5b60200260200101516040015161099b565b61043d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043490611b48565b60405180910390fd5b5b5b50808061044b90611e09565b91505061026f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161048793929190611a61565b60405180910390a16104998282610b26565b505050565b60008151116104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d990611b08565b60405180910390fd5b60006104ec61023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055590611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156105cc576105cb8285610d39565b5b60005b83518110156107105760008482815181106105ed576105ec611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611be8565b60405180910390fd5b6106ed8583868a610e14565b83806106f890611e52565b9450505050808061070890611e09565b9150506105cf565b5050505050565b600081511161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611b08565b60405180910390fd5b600061076561023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610845576108448285610d39565b5b60005b835181101561099457600084828151811061086657610865611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611c08565b60405180910390fd5b610965858284610fc1565b6109718583868a610e14565b838061097c90611e52565b9450505050808061098c90611e09565b915050610848565b5050505050565b60008151116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611b08565b60405180910390fd5b60006109e961023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190611c28565b60405180910390fd5b60005b8251811015610b20576000838281518110610a7b57610a7a611f14565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b0b848284610fc1565b50508080610b1890611e09565b915050610a5d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ba4576000815114610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690611ac8565b60405180910390fd5b610d35565b6000815111610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90611ba8565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c3e57610c3d826040518060600160405280602881526020016122f760289139611626565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c669190611a4a565b600060405180830381855af49150503d8060008114610ca1576040519150601f19603f3d011682016040523d82523d6000602084013e610ca6565b606091505b509150915081610d3257600081511115610cf757806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9190611aa6565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990611ae8565b60405180910390fd5b50505b5050565b610d5b8160405180606001604052806024815260200161231f60249139611626565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890611b28565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790611bc8565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490506111779190611cfd565b905080821461130b5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106111d8576111d7611f14565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061125457611253611f14565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180548061135f5761135e611ee5565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050600081141561161f5760006001866002018054905061144a9190611cfd565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461158b5760008760020183815481106114b4576114b3611f14565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808860020183815481106114f8576114f7611f14565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b8660020180548061159f5761159e611ee5565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699190611aa6565b60405180910390fd5b50505050565b60006116848383611795565b60208301905092915050565b600061169c83836119fa565b905092915050565b6116ad81611d31565b82525050565b6116bc81611d31565b82525050565b60006116cd82611c68565b6116d78185611cae565b93506116e283611c48565b8060005b838110156117135781516116fa8882611678565b975061170583611c94565b9250506001810190506116e6565b5085935050505092915050565b600061172b82611c73565b6117358185611cbf565b93508360208202850161174785611c58565b8060005b8581101561178357848403895281516117648582611690565b945061176f83611ca1565b925060208a0199505060018101905061174b565b50829750879550505050505092915050565b61179e81611d43565b82525050565b60006117af82611c7e565b6117b98185611cd0565b93506117c9818560208601611dd6565b6117d281611f43565b840191505092915050565b60006117e882611c7e565b6117f28185611ce1565b9350611802818560208601611dd6565b80840191505092915050565b61181781611dc4565b82525050565b600061182882611c89565b6118328185611cec565b9350611842818560208601611dd6565b61184b81611f43565b840191505092915050565b6000611863603c83611cec565b915061186e82611f54565b604082019050919050565b6000611886602683611cec565b915061189182611fa3565b604082019050919050565b60006118a9602b83611cec565b91506118b482611ff2565b604082019050919050565b60006118cc603783611cec565b91506118d782612041565b604082019050919050565b60006118ef602783611cec565b91506118fa82612090565b604082019050919050565b6000611912602c83611cec565b915061191d826120df565b604082019050919050565b6000611935602083611cec565b91506119408261212e565b602082019050919050565b6000611958603d83611cec565b915061196382612157565b604082019050919050565b600061197b602e83611cec565b9150611986826121a6565b604082019050919050565b600061199e603583611cec565b91506119a9826121f5565b604082019050919050565b60006119c1603883611cec565b91506119cc82612244565b604082019050919050565b60006119e4603683611cec565b91506119ef82612293565b604082019050919050565b6000606083016000830151611a1260008601826116a4565b506020830151611a25602086018261180e565b5060408301518482036040860152611a3d82826116c2565b9150508091505092915050565b6000611a5682846117dd565b915081905092915050565b60006060820190508181036000830152611a7b8186611720565b9050611a8a60208301856116b3565b8181036040830152611a9c81846117a4565b9050949350505050565b60006020820190508181036000830152611ac0818461181d565b905092915050565b60006020820190508181036000830152611ae181611856565b9050919050565b60006020820190508181036000830152611b0181611879565b9050919050565b60006020820190508181036000830152611b218161189c565b9050919050565b60006020820190508181036000830152611b41816118bf565b9050919050565b60006020820190508181036000830152611b61816118e2565b9050919050565b60006020820190508181036000830152611b8181611905565b9050919050565b60006020820190508181036000830152611ba181611928565b9050919050565b60006020820190508181036000830152611bc18161194b565b9050919050565b60006020820190508181036000830152611be18161196e565b9050919050565b60006020820190508181036000830152611c0181611991565b9050919050565b60006020820190508181036000830152611c21816119b4565b9050919050565b60006020820190508181036000830152611c41816119d7565b9050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611d0882611da2565b9150611d1383611da2565b925082821015611d2657611d25611e87565b5b828203905092915050565b6000611d3c82611d82565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050611d7d826122e2565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b6000611dcf82611d6f565b9050919050565b60005b83811015611df4578082015181840152602081019050611dd9565b83811115611e03576000848401525b50505050565b6000611e1482611da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e4757611e46611e87565b5b600182019050919050565b6000611e5d82611dac565b91506bffffffffffffffffffffffff821415611e7c57611e7b611e87565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374600082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b600381106122f3576122f2611eb6565b5b5056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220ea9a76729266365343bb9b118ec2ca4ca49c28c23a767dc82fde3d9b31ed47a164736f6c63430008060033

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

000000000000000000000000aefacf945a5986f864585a4851293d9f4a14da9b0000000000000000000000002ea87b3ad4a9f9c015a28c7927ba8499534720dc0000000000000000000000009c0f0bd38a1fb5de569f3f937e11f1e39c16e999

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0xAeFAcf945a5986F864585A4851293d9f4a14dA9b
Arg [1] : _diamondCutFacet (address): 0x2ea87b3AD4A9f9c015a28C7927BA8499534720dC
Arg [2] : _diamondLoupeFacet (address): 0x9c0F0BD38A1fB5dE569f3f937e11F1E39c16E999

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000aefacf945a5986f864585a4851293d9f4a14da9b
Arg [1] : 0000000000000000000000002ea87b3ad4a9f9c015a28c7927ba8499534720dc
Arg [2] : 0000000000000000000000009c0f0bd38a1fb5de569f3f937e11f1e39c16e999


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.