ETH Price: $3,388.04 (+0.92%)

Token

404BitcoinCats (404Cats)
 

Overview

Max Total Supply

0 404Cats

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Token404

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999999 runs

Other Settings:
istanbul EvmVersion
File 1 of 8 : Token404.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC404/ERC404Pausable.sol";

contract Token404 is ERC404Pausable {
    uint256 public constant MAX_SUPPLY = 10000 * 1E18;
    string private _baseUri;

    mapping(address => bool) public whitelistTransfer;

    constructor() ERC404("404BitcoinCats", "404Cats", 18, 0, msg.sender) {
        whitelistTransfer[address(0)] = true;
        emit ERC20Transfer(address(0), msg.sender, balanceOf[msg.sender] = 0);
    }

    function mint(address to, uint256 amount) public onlyOwner {
        amount = amount * (10 ** decimals);
        require((totalSupply += amount) <= MAX_SUPPLY, 'Error: amount');
        balanceOf[to] += amount;
        emit ERC20Transfer(address(0), to, amount);
    }

    function setBaseUri(string memory newUri) public onlyOwner {
        _baseUri = newUri;
    }

    function setNameSymbol(
        string memory _name,
        string memory _symbol
    ) public onlyOwner {
        _setNameSymbol(_name, _symbol);
    }

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        if (bytes(_baseUri).length > 0) {
            return string(abi.encodePacked(_baseUri, Strings.toString((tokenId - 1) % 10000 + 1), ".json"));
        } else {
            return 'null';
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amountOrId
    ) internal virtual override {
        if (!whitelistTransfer[from]) super._beforeTokenTransfer(from, to, amountOrId);
    }

    function setWhitelistTransfer(address account, bool isAdd) public onlyOwner {
        if (whitelistTransfer[account] != isAdd) {
            whitelistTransfer[account] = isAdd;
        }
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }
}

File 2 of 8 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 8 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 5 of 8 : ERC404.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ERC721Receiver.sol";

/// @notice ERC404
///         A gas-efficient, mixed ERC20 / ERC721 implementation
///         with native liquidity and fractionalization.
///
///         This is an experimental standard designed to integrate
///         with pre-existing ERC20 / ERC721 support as smoothly as
///         possible.
///
/// @dev    In order to support full functionality of ERC20 and ERC721
///         supply assumptions are made that slightly constraint usage.
///         Ensure decimals are sufficiently large (standard 18 recommended)
///         as ids are effectively encoded in the lowest range of amounts.
///
///         NFTs are spent on ERC20 functions in a FILO queue, this is by
///         design.
///
abstract contract ERC404 is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** _decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
            (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
            (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

File 6 of 8 : ERC404Pausable.sol
pragma solidity ^0.8.0;

import "./ERC404.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

abstract contract ERC404Pausable is ERC404, Pausable {

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amountOrId
    ) internal virtual {
        require(!paused(), "ERC404Pausable: transfer paused");
    }

    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual override {
        _beforeTokenTransfer(from, to, amountOrId);
        super.transferFrom(from, to, amountOrId);
    }

    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        _beforeTokenTransfer(msg.sender, to, amount);
        return super.transfer(to, amount);
    }
}

File 7 of 8 : ERC721Receiver.sol
pragma solidity ^0.8.0;

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

File 8 of 8 : Ownable.sol
pragma solidity ^0.8.0;

abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "evmVersion": "istanbul",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isAdd","type":"bool"}],"name":"setWhitelistTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b50604080518082018252600e81526d343034426974636f696e4361747360901b602080830191909152825180840190935260078352663430344361747360c81b9083015290601260003380806200007b576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508451620000d9906001906020880190620001c8565b508351620000ef906002906020870190620001c8565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526200012783600a620002b7565b62000133908362000385565b6003555050600d805460ff199081169091557ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3758054909116600117905550503360008181526005602052604080822082905551919250907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148790620001ba9083815260200190565b60405180910390a3620003fa565b828054620001d690620003a7565b90600052602060002090601f016020900481019282620001fa576000855562000245565b82601f106200021557805160ff191683800117855562000245565b8280016001018555821562000245579182015b828111156200024557825182559160200191906001019062000228565b506200025392915062000257565b5090565b5b8082111562000253576000815560010162000258565b600181815b80851115620002af578160001904821115620002935762000293620003e4565b80851615620002a157918102915b93841c939080029062000273565b509250929050565b6000620002c860ff841683620002cf565b9392505050565b600082620002e0575060016200037f565b81620002ef575060006200037f565b8160018114620003085760028114620003135762000333565b60019150506200037f565b60ff841115620003275762000327620003e4565b50506001821b6200037f565b5060208310610133831016604e8410600b841016171562000358575081810a6200037f565b6200036483836200026e565b80600019048211156200037b576200037b620003e4565b0290505b92915050565b6000816000190483118215151615620003a257620003a2620003e4565b500290565b600181811c90821680620003bc57607f821691505b60208210811415620003de57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160f81c61298a62000427600039600081816102bf015281816108a90152611a88015261298a6000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063a0bcfc7f116100a2578063c87b56dd11610071578063c87b56dd14610474578063dd62ed3e14610487578063e985e9c5146104b2578063f2fde38b146104e057600080fd5b8063a0bcfc7f14610428578063a22cb4651461043b578063a9059cbb1461044e578063b88d4fde1461046157600080fd5b80638456cb59116100de5780638456cb59146103d55780638da5cb5b146103dd57806395d89b41146103fd5780639b19251a1461040557600080fd5b80636352211e1461036c57806366a16cad1461037f5780636c7b4ef81461039257806370a08231146103b557600080fd5b806332cb6b0c116101875780634f02c420116101565780634f02c42014610332578063504334c21461033b57806353d6fd591461034e5780635c975abb1461036157600080fd5b806332cb6b0c146102f35780633f4ba83a1461030457806340c10f191461030c57806342842e0e1461031f57600080fd5b806318160ddd116101c357806318160ddd1461028657806323b872dd1461029d5780632b968958146102b2578063313ce567146102ba57600080fd5b806306fdde03146101ea578063081812fc14610208578063095ea7b314610263575b600080fd5b6101f26104f3565b6040516101ff919061259d565b60405180910390f35b61023e6102163660046123df565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ff565b6102766102713660046122da565b610581565b60405190151581526020016101ff565b61028f60035481565b6040519081526020016101ff565b6102b06102ab3660046121c7565b610738565b005b6102b0610753565b6102e17f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101ff565b61028f69021e19e0c9bab240000081565b6102b06107f8565b6102b061031a3660046122da565b610853565b6102b061032d3660046121c7565b6109f8565b61028f60045481565b6102b061034936600461237b565b610b40565b6102b061035c36600461229e565b610b9f565b600d5460ff16610276565b61023e61037a3660046123df565b610c46565b6102b061038d36600461229e565b610ca7565b6102766103a0366004612179565b600f6020526000908152604090205460ff1681565b61028f6103c3366004612179565b60056020526000908152604090205481565b6102b0610d80565b60005461023e9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f2610dd9565b610276610413366004612179565b600c6020526000908152604090205460ff1681565b6102b0610436366004612346565b610de6565b6102b061044936600461229e565b610e4a565b61027661045c3660046122da565b610eda565b6102b061046f366004612203565b610ef8565b6101f26104823660046123df565b611035565b61028f610495366004612194565b600660209081526000928352604080842090915290825290205481565b6102766104c0366004612194565b600860209081526000928352604080842090915290825290205460ff1681565b6102b06104ee366004612179565b6110db565b60018054610500906127c8565b80601f016020809104026020016040519081016040528092919081815260200182805461052c906127c8565b80156105795780601f1061054e57610100808354040283529160200191610579565b820191906000526020600020905b81548152906001019060200180831161055c57829003601f168201915b505050505081565b600060045482111580156105955750600082115b156106c55760008281526009602052604090205473ffffffffffffffffffffffffffffffffffffffff16338114801590610600575073ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832033845290915290205460ff16155b15610637576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526007602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35061072e565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6107438383836111e9565b61074e838383611221565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107a4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b60005473ffffffffffffffffffffffffffffffffffffffff163314610849576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610851611705565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108a4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cf7f0000000000000000000000000000000000000000000000000000000000000000600a61267b565b6108d99082612744565b905069021e19e0c9bab240000081600360008282546108f891906125ee565b925050819055111561096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4572726f723a20616d6f756e740000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548392906109a09084906125ee565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487906020015b60405180910390a35050565b610a03838383610738565b73ffffffffffffffffffffffffffffffffffffffff82163b15801590610b0957506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b158015610aac57600080fd5b505af1158015610ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae49190612304565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561074e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610b91576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b9b82826117e6565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bf0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610ca2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cf8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604090205460ff16151581151514610b9b5773ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080548215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091161790555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dd1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61085161180d565b60028054610500906127c8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e37576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610b9b90600e906020840190612011565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016109ec565b6000610ee73384846111e9565b610ef183836118cd565b9392505050565b610f03858585610738565b73ffffffffffffffffffffffffffffffffffffffff84163b15801590610ff757506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063150b7a0290610f809033908a9089908990899060040161251e565b602060405180830381600087803b158015610f9a57600080fd5b505af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190612304565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561102e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60606000600e8054611046906127c8565b905011156110a257600e61107b612710611061600186612781565b61106b9190612855565b6110769060016125ee565b6118da565b60405160200161108c929190612414565b6040516020818303038152906040529050919050565b505060408051808201909152600481527f6e756c6c00000000000000000000000000000000000000000000000000000000602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff16331461112c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611179576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff1661074e5761074e838383611a14565b60045481116116665760008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461128a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166112d7576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff84161480159061132e575073ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832033845290915290205460ff16155b801561135e575060008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15611395576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139d611a81565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020526040812080549091906113d2908490612781565b909155506113e09050611a81565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832080549096019095558582526009815284822080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690941790556007815284822080549093169092559186168252600a9052908120805461146f90600190612781565b8154811061147f5761147f6128f6565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff87168352600a82526040808420868552600b909352909220548154929350839281106114d0576114d06128f6565b600091825260208083209091019290925573ffffffffffffffffffffffffffffffffffffffff86168152600a90915260409020805480611512576115126128c7565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255838252600b81526040808320548484528184205573ffffffffffffffffffffffffffffffffffffffff8616808452600a835290832080546001818101835582865293852001869055925290546115a19190612781565b6000838152600b6020526040808220929092559051839173ffffffffffffffffffffffffffffffffffffffff80871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761164f611a81565b60405190815260200160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116fa576116c88282612781565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083203384529091529020555b61102e848484611ab3565b600d5460ff16611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610962565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b81516117f9906001906020850190612011565b50805161074e906002906020840190612011565b600d5460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610962565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117bc3390565b6000610ef1338484611ab3565b60608161191a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611944578061192e8161281c565b915061193d9050600a83612606565b915061191e565b60008167ffffffffffffffff81111561195f5761195f612925565b6040519080825280601f01601f191660200182016040528015611989576020820181803683370190505b5090505b8415611a0c5761199e600183612781565b91506119ab600a86612855565b6119b69060306125ee565b60f81b8183815181106119cb576119cb6128f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a05600a86612606565b945061198d565b949350505050565b600d5460ff161561074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433430345061757361626c653a207472616e7366657220706175736564006044820152606401610962565b6000611aae7f0000000000000000000000000000000000000000000000000000000000000000600a61267b565b905090565b600080611abe611a81565b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600560205260408082208054948a1683529082205492825293945091929091869190611b078386612781565b909155505073ffffffffffffffffffffffffffffffffffffffff808716600090815260056020908152604080832080548a019055928a168252600c9052205460ff16611bbd5773ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812054611b7e908590612606565b611b888585612606565b611b929190612781565b905060005b81811015611bba57611ba889611cd0565b80611bb28161281c565b915050611b97565b50505b73ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16611c5c576000611bf68483612606565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260056020526040902054611c27908690612606565b611c319190612781565b905060005b81811015611c5957611c4788611e88565b80611c518161281c565b915050611c36565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611cbb91815260200190565b60405180910390a35060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116611d1d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604081208054611d5090600190612781565b81548110611d6057611d606128f6565b90600052602060002001549050600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611dbb57611dbb6128c7565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255828252600b815260408083208390556009825280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600790925280832080549092169091555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b73ffffffffffffffffffffffffffffffffffffffff8116611ed5576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480546001019081905560008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611f3c576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260096020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155808452600a83529083208054600181810183558286529385200185905592529054611fb99190612781565b6000828152600b6020526040808220929092559051829173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461201d906127c8565b90600052602060002090601f01602090048101928261203f5760008555612085565b82601f1061205857805160ff1916838001178555612085565b82800160010185558215612085579182015b8281111561208557825182559160200191906001019061206a565b50612091929150612095565b5090565b5b808211156120915760008155600101612096565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ca257600080fd5b600082601f8301126120df57600080fd5b813567ffffffffffffffff808211156120fa576120fa612925565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561214057612140612925565b8160405283815286602085880101111561215957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561218b57600080fd5b610ef1826120aa565b600080604083850312156121a757600080fd5b6121b0836120aa565b91506121be602084016120aa565b90509250929050565b6000806000606084860312156121dc57600080fd5b6121e5846120aa565b92506121f3602085016120aa565b9150604084013590509250925092565b60008060008060006080868803121561221b57600080fd5b612224866120aa565b9450612232602087016120aa565b935060408601359250606086013567ffffffffffffffff8082111561225657600080fd5b818801915088601f83011261226a57600080fd5b81358181111561227957600080fd5b89602082850101111561228b57600080fd5b9699959850939650602001949392505050565b600080604083850312156122b157600080fd5b6122ba836120aa565b9150602083013580151581146122cf57600080fd5b809150509250929050565b600080604083850312156122ed57600080fd5b6122f6836120aa565b946020939093013593505050565b60006020828403121561231657600080fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610ef157600080fd5b60006020828403121561235857600080fd5b813567ffffffffffffffff81111561236f57600080fd5b611a0c848285016120ce565b6000806040838503121561238e57600080fd5b823567ffffffffffffffff808211156123a657600080fd5b6123b2868387016120ce565b935060208501359150808211156123c857600080fd5b506123d5858286016120ce565b9150509250929050565b6000602082840312156123f157600080fd5b5035919050565b6000815161240a818560208601612798565b9290920192915050565b600080845481600182811c91508083168061243057607f831692505b6020808410821415612469577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561247d57600181146124ac576124d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506124d9565b60008b81526020902060005b868110156124d15781548b8201529085019083016124b8565b505084890196505b5050505050506125156124ec82866123f8565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b60208152600082518060208401526125bc816040850160208701612798565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000821982111561260157612601612869565b500190565b60008261261557612615612898565b500490565b600181815b8085111561267357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561265957612659612869565b8085161561266657918102915b93841c939080029061261f565b509250929050565b6000610ef160ff84168360008261269457506001610732565b816126a157506000610732565b81600181146126b757600281146126c1576126dd565b6001915050610732565b60ff8411156126d2576126d2612869565b50506001821b610732565b5060208310610133831016604e8410600b8410161715612700575081810a610732565b61270a838361261a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561273c5761273c612869565b029392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561277c5761277c612869565b500290565b60008282101561279357612793612869565b500390565b60005b838110156127b357818101518382015260200161279b565b838111156127c2576000848401525b50505050565b600181811c908216806127dc57607f821691505b60208210811415612816577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561284e5761284e612869565b5060010190565b60008261286457612864612898565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea264697066735822122077acfcfcab93d34dbe099b926c03f64cb25ef143d99da3b28e72f39cc923c76a64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063a0bcfc7f116100a2578063c87b56dd11610071578063c87b56dd14610474578063dd62ed3e14610487578063e985e9c5146104b2578063f2fde38b146104e057600080fd5b8063a0bcfc7f14610428578063a22cb4651461043b578063a9059cbb1461044e578063b88d4fde1461046157600080fd5b80638456cb59116100de5780638456cb59146103d55780638da5cb5b146103dd57806395d89b41146103fd5780639b19251a1461040557600080fd5b80636352211e1461036c57806366a16cad1461037f5780636c7b4ef81461039257806370a08231146103b557600080fd5b806332cb6b0c116101875780634f02c420116101565780634f02c42014610332578063504334c21461033b57806353d6fd591461034e5780635c975abb1461036157600080fd5b806332cb6b0c146102f35780633f4ba83a1461030457806340c10f191461030c57806342842e0e1461031f57600080fd5b806318160ddd116101c357806318160ddd1461028657806323b872dd1461029d5780632b968958146102b2578063313ce567146102ba57600080fd5b806306fdde03146101ea578063081812fc14610208578063095ea7b314610263575b600080fd5b6101f26104f3565b6040516101ff919061259d565b60405180910390f35b61023e6102163660046123df565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ff565b6102766102713660046122da565b610581565b60405190151581526020016101ff565b61028f60035481565b6040519081526020016101ff565b6102b06102ab3660046121c7565b610738565b005b6102b0610753565b6102e17f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016101ff565b61028f69021e19e0c9bab240000081565b6102b06107f8565b6102b061031a3660046122da565b610853565b6102b061032d3660046121c7565b6109f8565b61028f60045481565b6102b061034936600461237b565b610b40565b6102b061035c36600461229e565b610b9f565b600d5460ff16610276565b61023e61037a3660046123df565b610c46565b6102b061038d36600461229e565b610ca7565b6102766103a0366004612179565b600f6020526000908152604090205460ff1681565b61028f6103c3366004612179565b60056020526000908152604090205481565b6102b0610d80565b60005461023e9073ffffffffffffffffffffffffffffffffffffffff1681565b6101f2610dd9565b610276610413366004612179565b600c6020526000908152604090205460ff1681565b6102b0610436366004612346565b610de6565b6102b061044936600461229e565b610e4a565b61027661045c3660046122da565b610eda565b6102b061046f366004612203565b610ef8565b6101f26104823660046123df565b611035565b61028f610495366004612194565b600660209081526000928352604080842090915290825290205481565b6102766104c0366004612194565b600860209081526000928352604080842090915290825290205460ff1681565b6102b06104ee366004612179565b6110db565b60018054610500906127c8565b80601f016020809104026020016040519081016040528092919081815260200182805461052c906127c8565b80156105795780601f1061054e57610100808354040283529160200191610579565b820191906000526020600020905b81548152906001019060200180831161055c57829003601f168201915b505050505081565b600060045482111580156105955750600082115b156106c55760008281526009602052604090205473ffffffffffffffffffffffffffffffffffffffff16338114801590610600575073ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832033845290915290205460ff16155b15610637576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526007602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35061072e565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6107438383836111e9565b61074e838383611221565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107a4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b60005473ffffffffffffffffffffffffffffffffffffffff163314610849576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610851611705565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108a4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cf7f0000000000000000000000000000000000000000000000000000000000000012600a61267b565b6108d99082612744565b905069021e19e0c9bab240000081600360008282546108f891906125ee565b925050819055111561096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4572726f723a20616d6f756e740000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548392906109a09084906125ee565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487906020015b60405180910390a35050565b610a03838383610738565b73ffffffffffffffffffffffffffffffffffffffff82163b15801590610b0957506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b158015610aac57600080fd5b505af1158015610ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae49190612304565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561074e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610b91576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b9b82826117e6565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bf0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610ca2576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cf8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604090205460ff16151581151514610b9b5773ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080548215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091161790555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dd1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61085161180d565b60028054610500906127c8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e37576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610b9b90600e906020840190612011565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016109ec565b6000610ee73384846111e9565b610ef183836118cd565b9392505050565b610f03858585610738565b73ffffffffffffffffffffffffffffffffffffffff84163b15801590610ff757506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063150b7a0290610f809033908a9089908990899060040161251e565b602060405180830381600087803b158015610f9a57600080fd5b505af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190612304565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561102e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60606000600e8054611046906127c8565b905011156110a257600e61107b612710611061600186612781565b61106b9190612855565b6110769060016125ee565b6118da565b60405160200161108c929190612414565b6040516020818303038152906040529050919050565b505060408051808201909152600481527f6e756c6c00000000000000000000000000000000000000000000000000000000602082015290565b60005473ffffffffffffffffffffffffffffffffffffffff16331461112c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611179576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff1661074e5761074e838383611a14565b60045481116116665760008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461128a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166112d7576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff84161480159061132e575073ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832033845290915290205460ff16155b801561135e575060008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15611395576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139d611a81565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020526040812080549091906113d2908490612781565b909155506113e09050611a81565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832080549096019095558582526009815284822080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690941790556007815284822080549093169092559186168252600a9052908120805461146f90600190612781565b8154811061147f5761147f6128f6565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff87168352600a82526040808420868552600b909352909220548154929350839281106114d0576114d06128f6565b600091825260208083209091019290925573ffffffffffffffffffffffffffffffffffffffff86168152600a90915260409020805480611512576115126128c7565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255838252600b81526040808320548484528184205573ffffffffffffffffffffffffffffffffffffffff8616808452600a835290832080546001818101835582865293852001869055925290546115a19190612781565b6000838152600b6020526040808220929092559051839173ffffffffffffffffffffffffffffffffffffffff80871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761164f611a81565b60405190815260200160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116fa576116c88282612781565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083203384529091529020555b61102e848484611ab3565b600d5460ff16611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610962565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b81516117f9906001906020850190612011565b50805161074e906002906020840190612011565b600d5460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610962565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117bc3390565b6000610ef1338484611ab3565b60608161191a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611944578061192e8161281c565b915061193d9050600a83612606565b915061191e565b60008167ffffffffffffffff81111561195f5761195f612925565b6040519080825280601f01601f191660200182016040528015611989576020820181803683370190505b5090505b8415611a0c5761199e600183612781565b91506119ab600a86612855565b6119b69060306125ee565b60f81b8183815181106119cb576119cb6128f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a05600a86612606565b945061198d565b949350505050565b600d5460ff161561074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433430345061757361626c653a207472616e7366657220706175736564006044820152606401610962565b6000611aae7f0000000000000000000000000000000000000000000000000000000000000012600a61267b565b905090565b600080611abe611a81565b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600560205260408082208054948a1683529082205492825293945091929091869190611b078386612781565b909155505073ffffffffffffffffffffffffffffffffffffffff808716600090815260056020908152604080832080548a019055928a168252600c9052205460ff16611bbd5773ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812054611b7e908590612606565b611b888585612606565b611b929190612781565b905060005b81811015611bba57611ba889611cd0565b80611bb28161281c565b915050611b97565b50505b73ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16611c5c576000611bf68483612606565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260056020526040902054611c27908690612606565b611c319190612781565b905060005b81811015611c5957611c4788611e88565b80611c518161281c565b915050611c36565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611cbb91815260200190565b60405180910390a35060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116611d1d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604081208054611d5090600190612781565b81548110611d6057611d606128f6565b90600052602060002001549050600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611dbb57611dbb6128c7565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255828252600b815260408083208390556009825280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600790925280832080549092169091555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b73ffffffffffffffffffffffffffffffffffffffff8116611ed5576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480546001019081905560008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611f3c576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260096020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155808452600a83529083208054600181810183558286529385200185905592529054611fb99190612781565b6000828152600b6020526040808220929092559051829173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461201d906127c8565b90600052602060002090601f01602090048101928261203f5760008555612085565b82601f1061205857805160ff1916838001178555612085565b82800160010185558215612085579182015b8281111561208557825182559160200191906001019061206a565b50612091929150612095565b5090565b5b808211156120915760008155600101612096565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ca257600080fd5b600082601f8301126120df57600080fd5b813567ffffffffffffffff808211156120fa576120fa612925565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561214057612140612925565b8160405283815286602085880101111561215957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561218b57600080fd5b610ef1826120aa565b600080604083850312156121a757600080fd5b6121b0836120aa565b91506121be602084016120aa565b90509250929050565b6000806000606084860312156121dc57600080fd5b6121e5846120aa565b92506121f3602085016120aa565b9150604084013590509250925092565b60008060008060006080868803121561221b57600080fd5b612224866120aa565b9450612232602087016120aa565b935060408601359250606086013567ffffffffffffffff8082111561225657600080fd5b818801915088601f83011261226a57600080fd5b81358181111561227957600080fd5b89602082850101111561228b57600080fd5b9699959850939650602001949392505050565b600080604083850312156122b157600080fd5b6122ba836120aa565b9150602083013580151581146122cf57600080fd5b809150509250929050565b600080604083850312156122ed57600080fd5b6122f6836120aa565b946020939093013593505050565b60006020828403121561231657600080fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610ef157600080fd5b60006020828403121561235857600080fd5b813567ffffffffffffffff81111561236f57600080fd5b611a0c848285016120ce565b6000806040838503121561238e57600080fd5b823567ffffffffffffffff808211156123a657600080fd5b6123b2868387016120ce565b935060208501359150808211156123c857600080fd5b506123d5858286016120ce565b9150509250929050565b6000602082840312156123f157600080fd5b5035919050565b6000815161240a818560208601612798565b9290920192915050565b600080845481600182811c91508083168061243057607f831692505b6020808410821415612469577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b81801561247d57600181146124ac576124d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506124d9565b60008b81526020902060005b868110156124d15781548b8201529085019083016124b8565b505084890196505b5050505050506125156124ec82866123f8565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b60208152600082518060208401526125bc816040850160208701612798565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000821982111561260157612601612869565b500190565b60008261261557612615612898565b500490565b600181815b8085111561267357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561265957612659612869565b8085161561266657918102915b93841c939080029061261f565b509250929050565b6000610ef160ff84168360008261269457506001610732565b816126a157506000610732565b81600181146126b757600281146126c1576126dd565b6001915050610732565b60ff8411156126d2576126d2612869565b50506001821b610732565b5060208310610133831016604e8410600b8410161715612700575081810a610732565b61270a838361261a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561273c5761273c612869565b029392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561277c5761277c612869565b500290565b60008282101561279357612793612869565b500390565b60005b838110156127b357818101518382015260200161279b565b838111156127c2576000848401525b50505050565b600181811c908216806127dc57607f821691505b60208210811415612816577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561284e5761284e612869565b5060010190565b60008261286457612864612898565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea264697066735822122077acfcfcab93d34dbe099b926c03f64cb25ef143d99da3b28e72f39cc923c76a64736f6c63430008070033

Loading...
Loading
Loading...
Loading
[ 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.