false
true
0

Contract Address Details

0xe0DE149FacF51aeB4b48a8b94A3c388F6720eD70

Token
CEO of CryptoPunks (CEO)
Creator
0xc43473–14b2c8 at 0xf8407a–2e3467
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
26041109
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
NonFungibleCEO




Optimization enabled
true
Compiler version
v0.8.11+commit.d7f03943




Optimization runs
2000000
EVM Version
london




Verified at
2026-03-16T18:59:40.110570Z

Constructor Arguments

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535333756d64726144463567773372693562315a685a39644b6e39695359386251566b734c716a76557148572f00000000000000000000

Arg [0] (string) : ipfs://QmSS3umdraDF5gw3ri5b1ZhZ9dKn9iSY8bQVksLqjvUqHW/

              

NonFungibleCEO.sol

// SPDX-License-Identifier: MIT
// Author: 0xTycoon
// Repo: github.com/0xTycoon/punksceo

pragma solidity ^0.8.11;

//import "./safemath.sol"; // don't need it
/**
* "Non fungible CEO"
* This is a NFT that gets transferred to the address that hold the CEO title.
* Think of it as a "title belt" in boxing.
* The purpose is so that the NFT will show up in CEOs gallery, so that everyone will be able to see it!
*
* Properties:
* - There is only 1 NFT, NFT ID is 0
* - Only the CIG token contract has permission to transfer it
* - Admin key only used for deployment
*
*/
contract NonFungibleCEO {
    ICigToken private cigToken;
    address public owner;
    string private metadataURI;

    constructor(string memory _uri) {
        metadataURI = _uri;
        emit BaseURI(_uri);
        _transferOwnership(msg.sender);
    }

    modifier onlyOwner {
        require(
            msg.sender == owner,
            "only admin can call this"
        );
        _;
    }
    /**
    * @dev onlyCig ensures only the cig token contract can use it
    */
    modifier onlyCig {
        require(address(cigToken) == msg.sender, 'must be called from cigtoken');
        _;
    }

    /**
    * @dev onlyCEO ensures that only the CEO can use it
    */
    modifier onlyCEO {
        require(cigToken.The_CEO() == msg.sender, 'must be called by CEO');
        _;
    }

    function baseTokenURI() public view returns (string memory) {
        return metadataURI;
    }


    /**
    * @dev renounceOwnership burns the admin key
    */
    function renounceOwnership() external onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) external  onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = owner;
        owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
    /**
    * @dev setCigToken sets the address to the cig token
    * @param _addr address to the cig token
    */
    function setCigToken(address _addr) external onlyOwner {
        cigToken = ICigToken(_addr);
    }

    /***
    * ERC721 stuff
    */
    address private holder; // the NFT owner
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event BaseURI(string);
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    function totalSupply() external pure returns (uint256) {
        return 1;
    }

    function tokenByIndex(uint256 _index) external pure returns (uint256) {
        if (_index == 0) {return 0; }
        revert("404");
    }

    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256) {
        if (_owner == holder) {
            return 0;
        }
        revert("404");
    }

    function balanceOf(address _holder) public view returns (uint256) {
        if (_holder == holder) {
            return 1;
        }
        return 0;
    }

    function name() public pure returns (string memory) {
        return "CEO of CryptoPunks";
    }

    function symbol() public pure returns (string memory) {
        return "CEO";
    }

    /**
    * @dev setBaseURI sets the baseURI value
    */
    function setBaseURI(string memory _uri) external onlyCEO {
        metadataURI = _uri;
        emit BaseURI(_uri);
    }

    function tokenURI(uint256 _tokenId) public view returns (string memory) {
        if (_tokenId != 0) revert("404");
        return string(abi.encodePacked(metadataURI, "0.json"));
    }

    function ownerOf(uint256 _tokenId) public view returns (address) {
        if (_tokenId != 0) revert("404");
        return holder;
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external onlyCig {
        _transfer(_from, _to, _tokenId);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external onlyCig {
        _transfer(_from, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) external onlyCig {
        _transfer(_from, _to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) external onlyCig {
    }

    function setApprovalForAll(address _operator, bool _approved) external onlyCig {
    }

    function getApproved(uint256 _tokenId) public view returns (address) {
        return address(cigToken);
    }

    function isApprovedForAll(address _owner, address _operator) public pure returns (bool) {

        return false;
    }

    function supportsInterface(bytes4 interfaceId) public pure returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        interfaceId == type(IERC165).interfaceId ||
        interfaceId == type(ERC721Enumerable).interfaceId ||
        interfaceId == type(ERC721TokenReceiver).interfaceId;
    }

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        require(_tokenId == 0, "404");
        holder = _to;
        emit Transfer(_from, _to, _tokenId);
    }

    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external pure returns (bytes4) {
        revert("nope");
        return bytes4(keccak256("nope"));
    }


}


/**
 * @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);
}


/**
 * @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;
}

/**
 * @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);
}

interface ERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the
    /// recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return
    /// of other than the magic value MUST result in the transaction being reverted.
    /// @notice The contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    /// unless throwing
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external returns (bytes4);
}

/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x780e9d63.
interface ERC721Enumerable /* is ERC721 */ {
    /// @notice Count NFTs tracked by this contract
    /// @return A count of valid NFTs tracked by this contract, where each one of
    ///  them has an assigned and queryable owner not equal to the zero address
    function totalSupply() external view returns (uint256);

    /// @notice Enumerate valid NFTs
    /// @dev Throws if `_index` >= `totalSupply()`.
    /// @param _index A counter less than `totalSupply()`
    /// @return The token identifier for the `_index`th NFT,
    ///  (sort order not specified)
    function tokenByIndex(uint256 _index) external view returns (uint256);

    /// @notice Enumerate NFTs assigned to an owner
    /// @dev Throws if `_index` >= `balanceOf(_owner)` or if
    ///  `_owner` is the zero address, representing invalid NFTs.
    /// @param _owner An address where we are interested in NFTs owned by them
    /// @param _index A counter less than `balanceOf(_owner)`
    /// @return The token identifier for the `_index`th NFT assigned to `_owner`,
    ///   (sort order not specified)
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
}

interface ICigToken {
    function The_CEO() external  returns (address);
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":2000000,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"london","compilationTarget":{"NonFungibleCEO.sol":"NonFungibleCEO"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"_uri","internalType":"string"}]},{"type":"event","name":"BaseURI","inputs":[{"type":"string","name":"","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"oldOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"approve","inputs":[{"type":"address","name":"_approved","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"_holder","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"baseTokenURI","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getApproved","inputs":[{"type":"uint256","name":"_tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForAll","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"_operator","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bytes4","name":"","internalType":"bytes4"}],"name":"onERC721Received","inputs":[{"type":"address","name":"_operator","internalType":"address"},{"type":"address","name":"_from","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ownerOf","inputs":[{"type":"uint256","name":"_tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setApprovalForAll","inputs":[{"type":"address","name":"_operator","internalType":"address"},{"type":"bool","name":"_approved","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBaseURI","inputs":[{"type":"string","name":"_uri","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setCigToken","inputs":[{"type":"address","name":"_addr","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenByIndex","inputs":[{"type":"uint256","name":"_index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenOfOwnerByIndex","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"uint256","name":"_index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"tokenURI","inputs":[{"type":"uint256","name":"_tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x60806040523480156200001157600080fd5b5060405162001786380380620017868339810160408190526200003491620001d6565b805162000049906002906020840190620000e7565b507f01e56a02aca7f26a28165a040851ba78f30282b55ca81c63a804cdc1e2dcea72816040516200007b91906200028e565b60405180910390a16200008e3362000095565b5062000300565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000f590620002c3565b90600052602060002090601f01602090048101928262000119576000855562000164565b82601f106200013457805160ff191683800117855562000164565b8280016001018555821562000164579182015b828111156200016457825182559160200191906001019062000147565b506200017292915062000176565b5090565b5b8082111562000172576000815560010162000177565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001c0578181015183820152602001620001a6565b83811115620001d0576000848401525b50505050565b600060208284031215620001e957600080fd5b81516001600160401b03808211156200020157600080fd5b818401915084601f8301126200021657600080fd5b8151818111156200022b576200022b6200018d565b604051601f8201601f19908116603f011681019083821181831017156200025657620002566200018d565b816040528281528760208487010111156200027057600080fd5b62000283836020830160208801620001a3565b979650505050505050565b6020815260008251806020840152620002af816040850160208701620001a3565b601f01601f19169190910160400192915050565b600181811c90821680620002d857607f821691505b60208210811415620002fa57634e487b7160e01b600052602260045260246000fd5b50919050565b61147680620003106000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80636352211e116100e3578063b88d4fde1161008c578063da509e4911610066578063da509e49146103c5578063e985e9c5146103d8578063f2fde38b146103ee57600080fd5b8063b88d4fde14610397578063c87b56dd146103aa578063d547cfb7146103bd57600080fd5b80638da5cb5b116100bd5780638da5cb5b1461033057806395d89b4114610350578063a22cb4651461038957600080fd5b80636352211e1461030257806370a0823114610315578063715018a61461032857600080fd5b806318160ddd1161014557806342842e0e1161011f57806342842e0e146102b65780634f6ccce7146102dc57806355f804b3146102ef57600080fd5b806318160ddd146102a557806323b872dd146102b65780632f745c59146102c957600080fd5b8063081812fc11610176578063081812fc146101fc578063095ea7b31461024c578063150b7a021461026157600080fd5b806301ffc9a71461019257806306fdde03146101ba575b600080fd5b6101a56101a0366004610f56565b610401565b60405190151581526020015b60405180910390f35b60408051808201909152601281527f43454f206f662043727970746f50756e6b73000000000000000000000000000060208201525b6040516101b19190610f9f565b61022761020a366004611012565b5060005473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b61025f61025a36600461104d565b61057e565b005b61027461026f36600461113c565b610608565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101b1565b60015b6040519081526020016101b1565b61025f6102c43660046111bc565b61066e565b6102a86102d736600461104d565b6106ff565b6102a86102ea366004611012565b61078f565b61025f6102fd3660046111fd565b61079e565b610227610310366004611012565b610911565b6102a861032336600461124e565b610999565b61025f6109cf565b6001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60408051808201909152600381527f43454f000000000000000000000000000000000000000000000000000000000060208201526101ef565b61025f61025a36600461126b565b61025f6103a536600461113c565b610a5c565b6101ef6103b8366004611012565b610aee565b6101ef610b80565b61025f6103d336600461124e565b610c12565b6101a56103e63660046112a9565b600092915050565b61025f6103fc36600461124e565b610cda565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061049457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806104e057507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061052c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000145b8061057857507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d7573742062652063616c6c65642066726f6d20636967746f6b656e0000000060448201526064015b60405180910390fd5b5050565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fb9060208082526004908201527f6e6f706500000000000000000000000000000000000000000000000000000000604082015260600190565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d7573742062652063616c6c65642066726f6d20636967746f6b656e0000000060448201526064016105fb565b6106fa838383610d67565b505050565b60035460009073ffffffffffffffffffffffffffffffffffffffff8481169116141561072d57506000610578565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b60008161072d57506000919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166319ad317d6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610822573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084691906112d7565b73ffffffffffffffffffffffffffffffffffffffff16146108c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6d7573742062652063616c6c65642062792043454f000000000000000000000060448201526064016105fb565b80516108d6906002906020840190610ebd565b507f01e56a02aca7f26a28165a040851ba78f30282b55ca81c63a804cdc1e2dcea72816040516109069190610f9f565b60405180910390a150565b6000811561097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b505060035473ffffffffffffffffffffffffffffffffffffffff1690565b60035460009073ffffffffffffffffffffffffffffffffffffffff838116911614156109c757506001919050565b506000919050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792061646d696e2063616e2063616c6c2074686973000000000000000060448201526064016105fb565b610a5a6000610e46565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d7573742062652063616c6c65642066726f6d20636967746f6b656e0000000060448201526064016105fb565b610ae8848484610d67565b50505050565b60608115610b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b6002604051602001610b6a9190611348565b6040516020818303038152906040529050919050565b606060028054610b8f906112f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb906112f4565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792061646d696e2063616e2063616c6c2074686973000000000000000060448201526064016105fb565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792061646d696e2063616e2063616c6c2074686973000000000000000060448201526064016105fb565b610d6481610e46565b50565b8015610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405183928616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054610ec9906112f4565b90600052602060002090601f016020900481019282610eeb5760008555610f31565b82601f10610f0457805160ff1916838001178555610f31565b82800160010185558215610f31579182015b82811115610f31578251825591602001919060010190610f16565b50610f3d929150610f41565b5090565b5b80821115610f3d5760008155600101610f42565b600060208284031215610f6857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f9857600080fd5b9392505050565b600060208083528351808285015260005b81811015610fcc57858101830151858201604001528201610fb0565b81811115610fde576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561102457600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d6457600080fd5b6000806040838503121561106057600080fd5b823561106b8161102b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156110c3576110c3611079565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561110957611109611079565b8160405280935085815286868601111561112257600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561115257600080fd5b843561115d8161102b565b9350602085013561116d8161102b565b925060408501359150606085013567ffffffffffffffff81111561119057600080fd5b8501601f810187136111a157600080fd5b6111b0878235602084016110a8565b91505092959194509250565b6000806000606084860312156111d157600080fd5b83356111dc8161102b565b925060208401356111ec8161102b565b929592945050506040919091013590565b60006020828403121561120f57600080fd5b813567ffffffffffffffff81111561122657600080fd5b8201601f8101841361123757600080fd5b611246848235602084016110a8565b949350505050565b60006020828403121561126057600080fd5b8135610f988161102b565b6000806040838503121561127e57600080fd5b82356112898161102b565b91506020830135801515811461129e57600080fd5b809150509250929050565b600080604083850312156112bc57600080fd5b82356112c78161102b565b9150602083013561129e8161102b565b6000602082840312156112e957600080fd5b8151610f988161102b565b600181811c9082168061130857607f821691505b60208210811415611342577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c91508083168061136457607f831692505b602080841082141561139d577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156113b157600181146113e05761140d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061140d565b60008a81526020902060005b868110156114055781548b8201529085019083016113ec565b505084890196505b505050505050611246817f302e6a736f6e000000000000000000000000000000000000000000000000000081526006019056fea2646970667358221220dcaf34973eebd70b61ebd9c1e86194bfda9f14848644341942e12c5ade8b621664736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535333756d64726144463567773372693562315a685a39644b6e39695359386251566b734c716a76557148572f00000000000000000000

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80636352211e116100e3578063b88d4fde1161008c578063da509e4911610066578063da509e49146103c5578063e985e9c5146103d8578063f2fde38b146103ee57600080fd5b8063b88d4fde14610397578063c87b56dd146103aa578063d547cfb7146103bd57600080fd5b80638da5cb5b116100bd5780638da5cb5b1461033057806395d89b4114610350578063a22cb4651461038957600080fd5b80636352211e1461030257806370a0823114610315578063715018a61461032857600080fd5b806318160ddd1161014557806342842e0e1161011f57806342842e0e146102b65780634f6ccce7146102dc57806355f804b3146102ef57600080fd5b806318160ddd146102a557806323b872dd146102b65780632f745c59146102c957600080fd5b8063081812fc11610176578063081812fc146101fc578063095ea7b31461024c578063150b7a021461026157600080fd5b806301ffc9a71461019257806306fdde03146101ba575b600080fd5b6101a56101a0366004610f56565b610401565b60405190151581526020015b60405180910390f35b60408051808201909152601281527f43454f206f662043727970746f50756e6b73000000000000000000000000000060208201525b6040516101b19190610f9f565b61022761020a366004611012565b5060005473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b61025f61025a36600461104d565b61057e565b005b61027461026f36600461113c565b610608565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101b1565b60015b6040519081526020016101b1565b61025f6102c43660046111bc565b61066e565b6102a86102d736600461104d565b6106ff565b6102a86102ea366004611012565b61078f565b61025f6102fd3660046111fd565b61079e565b610227610310366004611012565b610911565b6102a861032336600461124e565b610999565b61025f6109cf565b6001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60408051808201909152600381527f43454f000000000000000000000000000000000000000000000000000000000060208201526101ef565b61025f61025a36600461126b565b61025f6103a536600461113c565b610a5c565b6101ef6103b8366004611012565b610aee565b6101ef610b80565b61025f6103d336600461124e565b610c12565b6101a56103e63660046112a9565b600092915050565b61025f6103fc36600461124e565b610cda565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061049457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806104e057507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061052c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000145b8061057857507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d7573742062652063616c6c65642066726f6d20636967746f6b656e0000000060448201526064015b60405180910390fd5b5050565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fb9060208082526004908201527f6e6f706500000000000000000000000000000000000000000000000000000000604082015260600190565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d7573742062652063616c6c65642066726f6d20636967746f6b656e0000000060448201526064016105fb565b6106fa838383610d67565b505050565b60035460009073ffffffffffffffffffffffffffffffffffffffff8481169116141561072d57506000610578565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b60008161072d57506000919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166319ad317d6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610822573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084691906112d7565b73ffffffffffffffffffffffffffffffffffffffff16146108c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6d7573742062652063616c6c65642062792043454f000000000000000000000060448201526064016105fb565b80516108d6906002906020840190610ebd565b507f01e56a02aca7f26a28165a040851ba78f30282b55ca81c63a804cdc1e2dcea72816040516109069190610f9f565b60405180910390a150565b6000811561097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b505060035473ffffffffffffffffffffffffffffffffffffffff1690565b60035460009073ffffffffffffffffffffffffffffffffffffffff838116911614156109c757506001919050565b506000919050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792061646d696e2063616e2063616c6c2074686973000000000000000060448201526064016105fb565b610a5a6000610e46565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6d7573742062652063616c6c65642066726f6d20636967746f6b656e0000000060448201526064016105fb565b610ae8848484610d67565b50505050565b60608115610b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b6002604051602001610b6a9190611348565b6040516020818303038152906040529050919050565b606060028054610b8f906112f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb906112f4565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792061646d696e2063616e2063616c6c2074686973000000000000000060448201526064016105fb565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792061646d696e2063616e2063616c6c2074686973000000000000000060448201526064016105fb565b610d6481610e46565b50565b8015610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f343034000000000000000000000000000000000000000000000000000000000060448201526064016105fb565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405183928616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054610ec9906112f4565b90600052602060002090601f016020900481019282610eeb5760008555610f31565b82601f10610f0457805160ff1916838001178555610f31565b82800160010185558215610f31579182015b82811115610f31578251825591602001919060010190610f16565b50610f3d929150610f41565b5090565b5b80821115610f3d5760008155600101610f42565b600060208284031215610f6857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f9857600080fd5b9392505050565b600060208083528351808285015260005b81811015610fcc57858101830151858201604001528201610fb0565b81811115610fde576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561102457600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d6457600080fd5b6000806040838503121561106057600080fd5b823561106b8161102b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156110c3576110c3611079565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561110957611109611079565b8160405280935085815286868601111561112257600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561115257600080fd5b843561115d8161102b565b9350602085013561116d8161102b565b925060408501359150606085013567ffffffffffffffff81111561119057600080fd5b8501601f810187136111a157600080fd5b6111b0878235602084016110a8565b91505092959194509250565b6000806000606084860312156111d157600080fd5b83356111dc8161102b565b925060208401356111ec8161102b565b929592945050506040919091013590565b60006020828403121561120f57600080fd5b813567ffffffffffffffff81111561122657600080fd5b8201601f8101841361123757600080fd5b611246848235602084016110a8565b949350505050565b60006020828403121561126057600080fd5b8135610f988161102b565b6000806040838503121561127e57600080fd5b82356112898161102b565b91506020830135801515811461129e57600080fd5b809150509250929050565b600080604083850312156112bc57600080fd5b82356112c78161102b565b9150602083013561129e8161102b565b6000602082840312156112e957600080fd5b8151610f988161102b565b600181811c9082168061130857607f821691505b60208210811415611342577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600080835481600182811c91508083168061136457607f831692505b602080841082141561139d577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156113b157600181146113e05761140d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061140d565b60008a81526020902060005b868110156114055781548b8201529085019083016113ec565b505084890196505b505050505050611246817f302e6a736f6e000000000000000000000000000000000000000000000000000081526006019056fea2646970667358221220dcaf34973eebd70b61ebd9c1e86194bfda9f14848644341942e12c5ade8b621664736f6c634300080b0033