ETH Price: $1,977.68 (-4.70%)

Token

AME NFT (AMENFT)
 

Overview

Max Total Supply

756 AMENFT

Holders

10

Transfers

-
0

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

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

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2021-07-08
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;

library Strings {

    function toString(uint256 value) internal pure returns (string memory) {

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

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;

        mapping (bytes32 => uint256) _indexes;
    }

    function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex == 0) { // Equivalent to !contains(map, key)
            map._entries.push(MapEntry({ _key: key, _value: value }));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex != 0) { // Equivalent to contains(map, key)
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];

            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based

            map._entries.pop();

            delete map._indexes[key];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key) private view returns (bool) {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
        require(map._entries.length > index, "EnumerableMap: index out of bounds");

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
        return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map) internal view returns (uint256) {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

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);
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function royaltyFee(uint256 tokenId) external view returns(uint256);
    function getCreator(uint256 tokenId) external view returns(address);
    function tokenURI(uint256 tokenId) external view returns (string memory);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155MetadataURI is IERC1155 {
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
*/

library SafeMath {

    /**
    * @dev Adds two numbers, throws on overflow.
    */

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    /**
    * @dev Integer modulo of two numbers, truncating the remainder.
    */

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;
    using EnumerableMap for EnumerableMap.UintToAddressMap;

    // Mapping from token ID to account balances
    mapping (uint256 => address) private creators;
    mapping (uint256 => uint256) private _royaltyFee;
    mapping (uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping (address => mapping(address => bool)) private _operatorApprovals;
    string public tokenURIPrefix;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    EnumerableMap.UintToAddressMap private _tokenOwners;

    string private _name;

    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;

        _registerInterface(_INTERFACE_ID_ERC1155);
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
        * @dev Internal function to set the token URI for a given token.
        * Reverts if the token ID does not exist.
        * @param tokenId uint256 ID of the token to set its URI
        * @param uri string URI to assign
    */    

    function _setTokenURI(uint256 tokenId, string memory uri) public {
        _tokenURIs[tokenId] = uri;
    }

    /**
        @notice Get the royalty associated with tokenID.
        @param tokenId     ID of the Token.
        @return        royaltyFee of given ID.
     */

    function royaltyFee(uint256 tokenId) public view override returns(uint256) {
        return _royaltyFee[tokenId];
    }

    /**
        @notice Get the creator of given tokenID.
        @param tokenId     ID of the Token.
        @return        creator of given ID.
     */    

    function getCreator(uint256 tokenId) public view virtual override returns(address) {
        return creators[tokenId];
    }

    /**
        * @dev Internal function to set the token URI for all the tokens.
        * @param _tokenURIPrefix string memory _tokenURIPrefix of the tokens.
    */   

    function _setTokenURIPrefix(string memory _tokenURIPrefix) public {
        tokenURIPrefix = _tokenURIPrefix;
    }

    /**
        * @dev Returns an URI for a given token ID.
        * Throws if the token ID does not exist. May return an empty string.
        * @param tokenId uint256 ID of the token to query
    */    

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC1155Metadata: URI query for nonexistent token");
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = tokenURIPrefix;

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return string(abi.encodePacked(base, tokenId.toString()));
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    /**
        @notice Get the balance of an account's Tokens.
        @param account  The address of the token holder
        @param tokenId     ID of the Token
        @return        The owner's balance of the Token type requested
     */

    function balanceOf(address account, uint256 tokenId) public view override returns (uint256) {
        require(_exists(tokenId), "ERC1155Metadata: balance query for nonexistent token");
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[tokenId][account];
    }


    /**
        @notice Get the balance of multiple account/token pairs
        @param accounts The addresses of the token holders
        @param ids    ID of the Tokens
        @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
     */

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    )
        public
        view
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @param operator  Address to add to the set of authorized operators
        @param approved  True if the operator is approved, false to revoke approval
    */

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param account     The owner of the Tokens
        @param operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenId      ID of the token type
        @param amount   Transfer amount
        @param data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */    

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(tokenId), _asSingletonArray(amount), data);

        _balances[tokenId][from] = _balances[tokenId][from].sub(amount, "ERC1155: insufficient balance for transfer");
        _balances[tokenId][to] = _balances[tokenId][to].add(amount);

        emit TransferSingle(operator, from, to, tokenId, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, tokenId, amount, data);
    }

    /**
        @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if length of `_ids` is not the same as length of `_values`.
        MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
        MUST revert on any other error.
        MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
        Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
        After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenIds     IDs of each token type (order and length must match _values array)
        @param amounts  Transfer amounts per token type (order and length must match _ids array)
        @param data    Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
    */

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, tokenIds, amounts, data);

        for (uint256 i = 0; i < tokenIds.length; ++i) {
            uint256 tokenId = tokenIds[i];
            uint256 amount = amounts[i];

            _balances[tokenId][from] = _balances[tokenId][from].sub(
                amount,
                "ERC1155: insufficient balance for transfer"
            );
            _balances[tokenId][to] = _balances[tokenId][to].add(amount);
        }

        emit TransferBatch(operator, from, to, tokenIds, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, tokenIds, amounts, data);
    }



    /**
        * @dev Internal function to mint a new token.
        * Reverts if the given token ID already exists.
        * @param tokenId uint256 ID of the token to be minted
        * @param _supply uint256 supply of the token to be minted
        * @param _uri string memory URI of the token to be minted
        * @param _fee uint256 royalty of the token to be minted
    */

    function _mint(uint256 tokenId, uint256 _supply, string memory _uri, uint256 _fee) internal {
        require(!_exists(tokenId), "ERC1155: token already minted");
        require(_supply != 0, "Supply should be positive");
        require(bytes(_uri).length > 0, "uri should be set");

        creators[tokenId] = msg.sender;
        _tokenOwners.set(tokenId, msg.sender);
        _royaltyFee[tokenId] = _fee;
        _balances[tokenId][msg.sender] = _supply;
        _setTokenURI(tokenId, _uri);

        emit TransferSingle(msg.sender, address(0x0), msg.sender, tokenId, _supply);
        emit URI(_uri, tokenId);
    }

    /**
        * @dev version of {_mint}.
        *
        * Requirements:
        *
        * - `tokenIds` and `amounts` must have the same length.
    */

    function _mintBatch(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, tokenIds, amounts, data);

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][to] = amounts[i].add(_balances[tokenIds[i]][to]);
        }

        emit TransferBatch(operator, address(0), to, tokenIds, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, tokenIds, amounts, data);
    }

    /**
        * @dev Internal function to burn a specific token.
        * Reverts if the token does not exist.
        * Deprecated, use {ERC721-_burn} instead.
        * @param account owner of the token to burn
        * @param tokenId uint256 ID of the token being burned
        * @param amount uint256 amount of supply being burned
    */    

    function _burn(address account, uint256 tokenId, uint256 amount) internal virtual {
        require(_exists(tokenId), "ERC1155Metadata: burn query for nonexistent token");
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(tokenId), _asSingletonArray(amount), "");

        _balances[tokenId][account] = _balances[tokenId][account].sub(
            amount,
            "ERC_holderTokens1155: burn amount exceeds balance"
        );


        emit TransferSingle(operator, account, address(0), tokenId, amount);
    }


    /**
        * @dev version of {_burn}.
        * Requirements:
        * - `ids` and `amounts` must have the same length.
    */

    function _burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), tokenIds, amounts, "");

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][account] = _balances[tokenIds[i]][account].sub(
                amounts[i],
                "ERC1155: burn amount exceeds balance"
            );
        }

        emit TransferBatch(operator, account, address(0), tokenIds, amounts);
    }


    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        internal virtual
    { }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, tokenId, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, tokenIds, amounts, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

contract AMENFT is ERC1155 {

    uint256 newItemId = 1;
    address public owner;

    struct Sign {
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    constructor (string memory name, string memory symbol, string memory tokenURIPrefix) ERC1155 (name, symbol) {
        owner = msg.sender;
        _setTokenURIPrefix(tokenURIPrefix);

    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /** @dev change the Ownership from current owner to newOwner address
        @param newOwner : newOwner address */    

    function ownerTransfership(address newOwner) public onlyOwner returns(bool){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        owner = newOwner;
        return true;
    }

    /** @dev verify the tokenURI that should be verified by owner of the contract.
        *requirements: signer must be owner of the contract
        @param tokenURI string memory URI of token to be minted.
        @param sign struct combination of uint8, bytes32, bytes 32 are v, r, s.
        note : sign value must be in the order of v, r, s.

    */

    function verifySign(string memory tokenURI, Sign memory sign) internal view {
        bytes32 hash = keccak256(abi.encodePacked(this,tokenURI));
        require(owner == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s), "Owner sign verification failed");
    }

    function mint(string memory uri, uint256 supply, uint256 fee, Sign memory sign)  public {
        verifySign(uri, sign);
        _mint(newItemId, supply, uri,fee);
        newItemId = newItemId+1;
    }

    function burn(uint256 tokenId, uint256 supply) public {
        _burn(msg.sender, tokenId, supply);
    }

    function burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) public {
        _burnBatch(account, tokenIds, amounts);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"_setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURIPrefix","type":"string"}],"name":"_setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct AMENFT.Sign","name":"sign","type":"tuple"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"address","name":"newOwner","type":"address"}],"name":"ownerTransfership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"royaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526001600b553480156200001657600080fd5b5060405162002b5b38038062002b5b8339810160408190526200003991620002bb565b82826200004d6301ffc9a760e01b620000c5565b81516200006290600990602085019062000162565b5080516200007890600a90602084019062000162565b506200008b636cdb3d1360e11b620000c5565b6200009d6303a24d0760e21b620000c5565b5050600c80546001600160a01b03191633179055620000bc8162000149565b5050506200039b565b6001600160e01b03198082161415620001245760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200015e90600590602084019062000162565b5050565b828054620001709062000348565b90600052602060002090601f016020900481019282620001945760008555620001df565b82601f10620001af57805160ff1916838001178555620001df565b82800160010185558215620001df579182015b82811115620001df578251825591602001919060010190620001c2565b50620001ed929150620001f1565b5090565b5b80821115620001ed5760008155600101620001f2565b600082601f83011262000219578081fd5b81516001600160401b038082111562000236576200023662000385565b604051601f8301601f19908116603f0116810190828211818310171562000261576200026162000385565b816040528381526020925086838588010111156200027d578485fd5b8491505b83821015620002a0578582018301518183018401529082019062000281565b83821115620002b157848385830101525b9695505050505050565b600080600060608486031215620002d0578283fd5b83516001600160401b0380821115620002e7578485fd5b620002f58783880162000208565b945060208601519150808211156200030b578384fd5b620003198783880162000208565b935060408601519150808211156200032f578283fd5b506200033e8682870162000208565b9150509250925092565b600181811c908216806200035d57607f821691505b602082108114156200037f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6127b080620003ab6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c806395d89b41116100ad578063c87b56dd11610071578063c87b56dd146102aa578063ca1daf88146102bd578063d48e638a146102d0578063e985e9c5146102f9578063f242432a1461033557600080fd5b806395d89b4114610254578063a22cb4651461025c578063b390c0ab1461026f578063c0ac998314610282578063c57dc2351461028a57600080fd5b80633f564508116100f45780633f564508146101d05780634e1273f4146101e35780636b20c454146102035780636fdc202f146102165780638da5cb5b1461022957600080fd5b8062fdd58e14610130578063015388681461015657806301ffc9a71461016b57806306fdde03146101a85780632eb2c2d6146101bd575b600080fd5b61014361013e366004611f50565b610348565b6040519081526020015b60405180910390f35b610169610164366004612160565b610453565b005b610198610179366004612043565b6001600160e01b03191660009081526020819052604090205460ff1690565b604051901515815260200161014d565b6101b0610477565b60405161014d919061236c565b6101696101cb366004611d9f565b610509565b6101696101de36600461207b565b610778565b6101f66101f1366004611f79565b61078f565b60405161014d919061232b565b610169610211366004611ea6565b6109c1565b610198610224366004611d53565b6109cc565b600c5461023c906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101b0610ab2565b61016961026a366004611f16565b610ac1565b61016961027d36600461219a565b610b98565b6101b0610ba3565b610143610298366004612148565b60009081526002602052604090205490565b6101b06102b8366004612148565b610c31565b6101696102cb3660046120ad565b610e27565b61023c6102de366004612148565b6000908152600160205260409020546001600160a01b031690565b610198610307366004611d6d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b610169610343366004611e44565b610e56565b600061035382611009565b6103c15760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661042b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016103b8565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b6000828152600660209081526040909120825161047292840190611bc1565b505050565b60606009805461048690612544565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290612544565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b815183511461052a5760405162461bcd60e51b81526004016103b89061244f565b6001600160a01b0384166105505760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b03851633148061056c575061056c8533610307565b6105d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103b8565b3360005b845181101561070a57600085828151811061060257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061062e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905061069b816040518060600160405280602a8152602001612720602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106d29082611058565b60009283526003602090815260408085206001600160a01b038c1686529091529092209190915550610703816125d0565b90506105d7565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161075a92919061233e565b60405180910390a46107708187878787876110b7565b505050505050565b805161078b906005906020840190611bc1565b5050565b606081518351146107f45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103b8565b600083516001600160401b0381111561081d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610846578160200160208202803683370190505b50905060005b84518110156109b95760006001600160a01b031685828151811061088057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108f95760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b60648201526084016103b8565b6003600085838151811061091d57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061095557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061099e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526109b2816125d0565b905061084c565b509392505050565b61047283838361122b565b600c546000906001600160a01b03163314610a295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038216610a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b8565b50600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6060600a805461048690612544565b336001600160a01b0383161415610b2c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103b8565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61078b338383611413565b60058054610bb090612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc90612544565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b505050505081565b6060610c3c82611009565b610ca15760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016103b8565b60008281526006602052604081208054610cba90612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612544565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050600060058054610d4990612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7590612544565b8015610dc25780601f10610d9757610100808354040283529160200191610dc2565b820191906000526020600020905b815481529060010190602001808311610da557829003601f168201915b50505050509050805160001415610dda575092915050565b815115610e0c578082604051602001610df4929190612259565b60405160208183030381529060405292505050919050565b80610e1685611580565b604051602001610df4929190612259565b610e3184826116b2565b610e3f600b548486856117f3565b600b54610e4d9060016124ba565b600b5550505050565b6001600160a01b038416610e7c5760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b038516331480610e985750610e988533610307565b610ef65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b8565b33610f16818787610f06886119b9565b610f0f886119b9565b5050505050565b610f5d836040518060600160405280602a8152602001612720602a913960008781526003602090815260408083206001600160a01b038d168452909152902054919061101c565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f949084611058565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610770818787878787611a12565b6000611016600783611adc565b92915050565b600081848411156110405760405162461bcd60e51b81526004016103b8919061236c565b50600061104d84866124e6565b9150505b9392505050565b60008061106583856124ba565b9050838110156110515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103b8565b6001600160a01b0384163b156107705760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906110fb9089908990889088908890600401612288565b602060405180830381600087803b15801561111557600080fd5b505af1925050508015611145575060408051601f3d908101601f191682019092526111429181019061205f565b60015b6111f257611151612641565b806308c379a0141561118b5750611166612659565b80611171575061118d565b8060405162461bcd60e51b81526004016103b8919061236c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103b8565b6001600160e01b0319811663bc197c8160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b50505050505050565b6001600160a01b0383166112515760405162461bcd60e51b81526004016103b89061240c565b80518251146112725760405162461bcd60e51b81526004016103b89061244f565b604080516020810190915260009081905233905b83518110156113b4576113408382815181106112b257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060600160405280602481526020016126fc60249139600360008886815181106112f757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b6003600086848151811061136457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806113ac906125d0565b915050611286565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161140592919061233e565b60405180910390a450505050565b61141c82611009565b6114825760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016103b8565b6001600160a01b0383166114a85760405162461bcd60e51b81526004016103b89061240c565b336114d8818560006114b9876119b9565b6114c2876119b9565b5050604080516020810190915260009052505050565b61151f8260405180606001604052806031815260200161274a6031913960008681526003602090815260408083206001600160a01b038b168452909152902054919061101c565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611405565b6060816115a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ce57806115b8816125d0565b91506115c79050600a836124d2565b91506115a8565b6000816001600160401b038111156115f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611620576020820181803683370190505b50905060006116306001846124e6565b90508593505b83156116a957611647600a856125eb565b6116529060306124ba565b60f81b82826116608161252d565b93508151811061168057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116a2600a856124d2565b9350611636565b50949350505050565b600030836040516020016116c7929190612221565b60405160208183030381529060405280519060200120905060018160405160200161171e91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa15801561178a573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506104725760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c6564000060448201526064016103b8565b6117fc84611009565b156118495760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016103b8565b826118965760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f7369746976650000000000000060448201526064016103b8565b60008251116118db5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b60448201526064016103b8565b600084815260016020526040902080546001600160a01b0319163390811790915561190a906007908690611af4565b50600084815260026020908152604080832084905560038252808320338452909152902083905561193b8483610453565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119ab919061236c565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a0157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107705760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611a5690899089908890889088906004016122e6565b602060405180830381600087803b158015611a7057600080fd5b505af1925050508015611aa0575060408051601f3d908101601f19168201909252611a9d9181019061205f565b60015b611aac57611151612641565b6001600160e01b0319811663f23a6e6160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b60008181526001830160205260408120541515611051565b6000611b0a84846001600160a01b038516611b12565b949350505050565b600082815260018401602052604081205480611b77575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611051565b8285611b846001846124e6565b81548110611ba257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611051565b828054611bcd90612544565b90600052602060002090601f016020900481019282611bef5760008555611c35565b82601f10611c0857805160ff1916838001178555611c35565b82800160010185558215611c35579182015b82811115611c35578251825591602001919060010190611c1a565b50611c41929150611c45565b5090565b5b80821115611c415760008155600101611c46565b80356001600160a01b0381168114610aad57600080fd5b600082601f830112611c81578081fd5b81356020611c8e82612497565b604051611c9b82826125a4565b8381528281019150858301600585901b87018401881015611cba578586fd5b855b85811015611cd857813584529284019290840190600101611cbc565b5090979650505050505050565b600082601f830112611cf5578081fd5b81356001600160401b03811115611d0e57611d0e61262b565b604051611d25601f8301601f1916602001826125a4565b818152846020838601011115611d39578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611d64578081fd5b61105182611c5a565b60008060408385031215611d7f578081fd5b611d8883611c5a565b9150611d9660208401611c5a565b90509250929050565b600080600080600060a08688031215611db6578081fd5b611dbf86611c5a565b9450611dcd60208701611c5a565b935060408601356001600160401b0380821115611de8578283fd5b611df489838a01611c71565b94506060880135915080821115611e09578283fd5b611e1589838a01611c71565b93506080880135915080821115611e2a578283fd5b50611e3788828901611ce5565b9150509295509295909350565b600080600080600060a08688031215611e5b578081fd5b611e6486611c5a565b9450611e7260208701611c5a565b9350604086013592506060860135915060808601356001600160401b03811115611e9a578182fd5b611e3788828901611ce5565b600080600060608486031215611eba578283fd5b611ec384611c5a565b925060208401356001600160401b0380821115611ede578384fd5b611eea87838801611c71565b93506040860135915080821115611eff578283fd5b50611f0c86828701611c71565b9150509250925092565b60008060408385031215611f28578182fd5b611f3183611c5a565b915060208301358015158114611f45578182fd5b809150509250929050565b60008060408385031215611f62578182fd5b611f6b83611c5a565b946020939093013593505050565b60008060408385031215611f8b578182fd5b82356001600160401b0380821115611fa1578384fd5b818501915085601f830112611fb4578384fd5b81356020611fc182612497565b604051611fce82826125a4565b8381528281019150858301600585901b870184018b1015611fed578889fd5b8896505b848710156120165761200281611c5a565b835260019690960195918301918301611ff1565b509650508601359250508082111561202c578283fd5b5061203985828601611c71565b9150509250929050565b600060208284031215612054578081fd5b8135611051816126e2565b600060208284031215612070578081fd5b8151611051816126e2565b60006020828403121561208c578081fd5b81356001600160401b038111156120a1578182fd5b611b0a84828501611ce5565b60008060008084860360c08112156120c3578283fd5b85356001600160401b038111156120d8578384fd5b6120e488828901611ce5565b95505060208601359350604086013592506060605f1982011215612106578182fd5b506040516121138161257f565b606086013560ff81168114612126578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b600060208284031215612159578081fd5b5035919050565b60008060408385031215612172578182fd5b8235915060208301356001600160401b0381111561218e578182fd5b61203985828601611ce5565b600080604083850312156121ac578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156121ea578151875295820195908201906001016121ce565b509495945050505050565b6000815180845261220d8160208601602086016124fd565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198360601b1681526000825161224b8160148501602087016124fd565b919091016014019392505050565b6000835161226b8184602088016124fd565b83519083019061227f8183602088016124fd565b01949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122b4908301866121bb565b82810360608401526122c681866121bb565b905082810360808401526122da81856121f5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612320908301846121f5565b979650505050505050565b60208152600061105160208301846121bb565b60408152600061235160408301856121bb565b828103602084015261236381856121bb565b95945050505050565b60208152600061105160208301846121f5565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156124b0576124b061262b565b5060051b60200190565b600082198211156124cd576124cd6125ff565b500190565b6000826124e1576124e1612615565b500490565b6000828210156124f8576124f86125ff565b500390565b60005b83811015612518578181015183820152602001612500565b83811115612527576000848401525b50505050565b60008161253c5761253c6125ff565b506000190190565b600181811c9082168061255857607f821691505b6020821081141561257957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561259e5761259e61262b565b60405250565b601f8201601f191681016001600160401b03811182821017156125c9576125c961262b565b6040525050565b60006000198214156125e4576125e46125ff565b5060010190565b6000826125fa576125fa612615565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561265657600481823e5160e01c5b90565b600060443d10156126675790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561269657505050505090565b82850191508151818111156126ae5750505050505090565b843d87010160208285010111156126c85750505050505090565b6126d7602082860101876125a4565b509095945050505050565b6001600160e01b0319811681146126f857600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007414d45204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414d454e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012b5760003560e01c806395d89b41116100ad578063c87b56dd11610071578063c87b56dd146102aa578063ca1daf88146102bd578063d48e638a146102d0578063e985e9c5146102f9578063f242432a1461033557600080fd5b806395d89b4114610254578063a22cb4651461025c578063b390c0ab1461026f578063c0ac998314610282578063c57dc2351461028a57600080fd5b80633f564508116100f45780633f564508146101d05780634e1273f4146101e35780636b20c454146102035780636fdc202f146102165780638da5cb5b1461022957600080fd5b8062fdd58e14610130578063015388681461015657806301ffc9a71461016b57806306fdde03146101a85780632eb2c2d6146101bd575b600080fd5b61014361013e366004611f50565b610348565b6040519081526020015b60405180910390f35b610169610164366004612160565b610453565b005b610198610179366004612043565b6001600160e01b03191660009081526020819052604090205460ff1690565b604051901515815260200161014d565b6101b0610477565b60405161014d919061236c565b6101696101cb366004611d9f565b610509565b6101696101de36600461207b565b610778565b6101f66101f1366004611f79565b61078f565b60405161014d919061232b565b610169610211366004611ea6565b6109c1565b610198610224366004611d53565b6109cc565b600c5461023c906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101b0610ab2565b61016961026a366004611f16565b610ac1565b61016961027d36600461219a565b610b98565b6101b0610ba3565b610143610298366004612148565b60009081526002602052604090205490565b6101b06102b8366004612148565b610c31565b6101696102cb3660046120ad565b610e27565b61023c6102de366004612148565b6000908152600160205260409020546001600160a01b031690565b610198610307366004611d6d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b610169610343366004611e44565b610e56565b600061035382611009565b6103c15760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661042b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016103b8565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b6000828152600660209081526040909120825161047292840190611bc1565b505050565b60606009805461048690612544565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290612544565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b815183511461052a5760405162461bcd60e51b81526004016103b89061244f565b6001600160a01b0384166105505760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b03851633148061056c575061056c8533610307565b6105d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103b8565b3360005b845181101561070a57600085828151811061060257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061062e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905061069b816040518060600160405280602a8152602001612720602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106d29082611058565b60009283526003602090815260408085206001600160a01b038c1686529091529092209190915550610703816125d0565b90506105d7565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161075a92919061233e565b60405180910390a46107708187878787876110b7565b505050505050565b805161078b906005906020840190611bc1565b5050565b606081518351146107f45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103b8565b600083516001600160401b0381111561081d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610846578160200160208202803683370190505b50905060005b84518110156109b95760006001600160a01b031685828151811061088057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108f95760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b60648201526084016103b8565b6003600085838151811061091d57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061095557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061099e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526109b2816125d0565b905061084c565b509392505050565b61047283838361122b565b600c546000906001600160a01b03163314610a295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038216610a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b8565b50600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6060600a805461048690612544565b336001600160a01b0383161415610b2c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103b8565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61078b338383611413565b60058054610bb090612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc90612544565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b505050505081565b6060610c3c82611009565b610ca15760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016103b8565b60008281526006602052604081208054610cba90612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612544565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050600060058054610d4990612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7590612544565b8015610dc25780601f10610d9757610100808354040283529160200191610dc2565b820191906000526020600020905b815481529060010190602001808311610da557829003601f168201915b50505050509050805160001415610dda575092915050565b815115610e0c578082604051602001610df4929190612259565b60405160208183030381529060405292505050919050565b80610e1685611580565b604051602001610df4929190612259565b610e3184826116b2565b610e3f600b548486856117f3565b600b54610e4d9060016124ba565b600b5550505050565b6001600160a01b038416610e7c5760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b038516331480610e985750610e988533610307565b610ef65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b8565b33610f16818787610f06886119b9565b610f0f886119b9565b5050505050565b610f5d836040518060600160405280602a8152602001612720602a913960008781526003602090815260408083206001600160a01b038d168452909152902054919061101c565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f949084611058565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610770818787878787611a12565b6000611016600783611adc565b92915050565b600081848411156110405760405162461bcd60e51b81526004016103b8919061236c565b50600061104d84866124e6565b9150505b9392505050565b60008061106583856124ba565b9050838110156110515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103b8565b6001600160a01b0384163b156107705760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906110fb9089908990889088908890600401612288565b602060405180830381600087803b15801561111557600080fd5b505af1925050508015611145575060408051601f3d908101601f191682019092526111429181019061205f565b60015b6111f257611151612641565b806308c379a0141561118b5750611166612659565b80611171575061118d565b8060405162461bcd60e51b81526004016103b8919061236c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103b8565b6001600160e01b0319811663bc197c8160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b50505050505050565b6001600160a01b0383166112515760405162461bcd60e51b81526004016103b89061240c565b80518251146112725760405162461bcd60e51b81526004016103b89061244f565b604080516020810190915260009081905233905b83518110156113b4576113408382815181106112b257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060600160405280602481526020016126fc60249139600360008886815181106112f757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b6003600086848151811061136457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806113ac906125d0565b915050611286565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161140592919061233e565b60405180910390a450505050565b61141c82611009565b6114825760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016103b8565b6001600160a01b0383166114a85760405162461bcd60e51b81526004016103b89061240c565b336114d8818560006114b9876119b9565b6114c2876119b9565b5050604080516020810190915260009052505050565b61151f8260405180606001604052806031815260200161274a6031913960008681526003602090815260408083206001600160a01b038b168452909152902054919061101c565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611405565b6060816115a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ce57806115b8816125d0565b91506115c79050600a836124d2565b91506115a8565b6000816001600160401b038111156115f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611620576020820181803683370190505b50905060006116306001846124e6565b90508593505b83156116a957611647600a856125eb565b6116529060306124ba565b60f81b82826116608161252d565b93508151811061168057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116a2600a856124d2565b9350611636565b50949350505050565b600030836040516020016116c7929190612221565b60405160208183030381529060405280519060200120905060018160405160200161171e91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa15801561178a573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506104725760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c6564000060448201526064016103b8565b6117fc84611009565b156118495760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016103b8565b826118965760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f7369746976650000000000000060448201526064016103b8565b60008251116118db5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b60448201526064016103b8565b600084815260016020526040902080546001600160a01b0319163390811790915561190a906007908690611af4565b50600084815260026020908152604080832084905560038252808320338452909152902083905561193b8483610453565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119ab919061236c565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a0157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107705760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611a5690899089908890889088906004016122e6565b602060405180830381600087803b158015611a7057600080fd5b505af1925050508015611aa0575060408051601f3d908101601f19168201909252611a9d9181019061205f565b60015b611aac57611151612641565b6001600160e01b0319811663f23a6e6160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b60008181526001830160205260408120541515611051565b6000611b0a84846001600160a01b038516611b12565b949350505050565b600082815260018401602052604081205480611b77575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611051565b8285611b846001846124e6565b81548110611ba257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611051565b828054611bcd90612544565b90600052602060002090601f016020900481019282611bef5760008555611c35565b82601f10611c0857805160ff1916838001178555611c35565b82800160010185558215611c35579182015b82811115611c35578251825591602001919060010190611c1a565b50611c41929150611c45565b5090565b5b80821115611c415760008155600101611c46565b80356001600160a01b0381168114610aad57600080fd5b600082601f830112611c81578081fd5b81356020611c8e82612497565b604051611c9b82826125a4565b8381528281019150858301600585901b87018401881015611cba578586fd5b855b85811015611cd857813584529284019290840190600101611cbc565b5090979650505050505050565b600082601f830112611cf5578081fd5b81356001600160401b03811115611d0e57611d0e61262b565b604051611d25601f8301601f1916602001826125a4565b818152846020838601011115611d39578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611d64578081fd5b61105182611c5a565b60008060408385031215611d7f578081fd5b611d8883611c5a565b9150611d9660208401611c5a565b90509250929050565b600080600080600060a08688031215611db6578081fd5b611dbf86611c5a565b9450611dcd60208701611c5a565b935060408601356001600160401b0380821115611de8578283fd5b611df489838a01611c71565b94506060880135915080821115611e09578283fd5b611e1589838a01611c71565b93506080880135915080821115611e2a578283fd5b50611e3788828901611ce5565b9150509295509295909350565b600080600080600060a08688031215611e5b578081fd5b611e6486611c5a565b9450611e7260208701611c5a565b9350604086013592506060860135915060808601356001600160401b03811115611e9a578182fd5b611e3788828901611ce5565b600080600060608486031215611eba578283fd5b611ec384611c5a565b925060208401356001600160401b0380821115611ede578384fd5b611eea87838801611c71565b93506040860135915080821115611eff578283fd5b50611f0c86828701611c71565b9150509250925092565b60008060408385031215611f28578182fd5b611f3183611c5a565b915060208301358015158114611f45578182fd5b809150509250929050565b60008060408385031215611f62578182fd5b611f6b83611c5a565b946020939093013593505050565b60008060408385031215611f8b578182fd5b82356001600160401b0380821115611fa1578384fd5b818501915085601f830112611fb4578384fd5b81356020611fc182612497565b604051611fce82826125a4565b8381528281019150858301600585901b870184018b1015611fed578889fd5b8896505b848710156120165761200281611c5a565b835260019690960195918301918301611ff1565b509650508601359250508082111561202c578283fd5b5061203985828601611c71565b9150509250929050565b600060208284031215612054578081fd5b8135611051816126e2565b600060208284031215612070578081fd5b8151611051816126e2565b60006020828403121561208c578081fd5b81356001600160401b038111156120a1578182fd5b611b0a84828501611ce5565b60008060008084860360c08112156120c3578283fd5b85356001600160401b038111156120d8578384fd5b6120e488828901611ce5565b95505060208601359350604086013592506060605f1982011215612106578182fd5b506040516121138161257f565b606086013560ff81168114612126578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b600060208284031215612159578081fd5b5035919050565b60008060408385031215612172578182fd5b8235915060208301356001600160401b0381111561218e578182fd5b61203985828601611ce5565b600080604083850312156121ac578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156121ea578151875295820195908201906001016121ce565b509495945050505050565b6000815180845261220d8160208601602086016124fd565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198360601b1681526000825161224b8160148501602087016124fd565b919091016014019392505050565b6000835161226b8184602088016124fd565b83519083019061227f8183602088016124fd565b01949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122b4908301866121bb565b82810360608401526122c681866121bb565b905082810360808401526122da81856121f5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612320908301846121f5565b979650505050505050565b60208152600061105160208301846121bb565b60408152600061235160408301856121bb565b828103602084015261236381856121bb565b95945050505050565b60208152600061105160208301846121f5565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156124b0576124b061262b565b5060051b60200190565b600082198211156124cd576124cd6125ff565b500190565b6000826124e1576124e1612615565b500490565b6000828210156124f8576124f86125ff565b500390565b60005b83811015612518578181015183820152602001612500565b83811115612527576000848401525b50505050565b60008161253c5761253c6125ff565b506000190190565b600181811c9082168061255857607f821691505b6020821081141561257957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561259e5761259e61262b565b60405250565b601f8201601f191681016001600160401b03811182821017156125c9576125c961262b565b6040525050565b60006000198214156125e4576125e46125ff565b5060010190565b6000826125fa576125fa612615565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561265657600481823e5160e01c5b90565b600060443d10156126675790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561269657505050505090565b82850191508151818111156126ae5750505050505090565b843d87010160208285010111156126c85750505050505090565b6126d7602082860101876125a4565b509095945050505050565b6001600160e01b0319811681146126f857600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007414d45204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414d454e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): AME NFT
Arg [1] : symbol (string): AMENFT
Arg [2] : tokenURIPrefix (string): https://gateway.pinata.cloud/ipfs/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 414d45204e465400000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 414d454e46540000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

33972:2030:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20538:325;;;;;;:::i;:::-;;:::i;:::-;;;22601:25:1;;;22589:2;22574:18;20538:325:0;;;;;;;;18359:109;;;;;;:::i;:::-;;:::i;:::-;;12109:142;;;;;;:::i;:::-;-1:-1:-1;;;;;;12210:33:0;12186:4;12210:33;;;;;;;;;;;;;;12109:142;;;;13476:14:1;;13469:22;13451:41;;13439:2;13424:18;12109:142:0;13406:92:1;17883:100:0;;;:::i;:::-;;;;;;;:::i;26707:1280::-;;;;;;:::i;:::-;;:::i;19251:117::-;;;;;;:::i;:::-;;:::i;21173:634::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35846:153::-;;;;;;:::i;:::-;;:::i;34602:216::-;;;;;;:::i;:::-;;:::i;34036:20::-;;;;;-1:-1:-1;;;;;34036:20:0;;;;;;-1:-1:-1;;;;;11135:32:1;;;11117:51;;11105:2;11090:18;34036:20:0;11072:102:1;17991:104:0;;;:::i;22169:311::-;;;;;;:::i;:::-;;:::i;35731:107::-;;;;;;:::i;:::-;;:::i;17241:28::-;;;:::i;18647:121::-;;;;;;:::i;:::-;18713:7;18740:20;;;:11;:20;;;;;;;18647:121;19589:556;;;;;;:::i;:::-;;:::i;35517:206::-;;;;;;:::i;:::-;;:::i;18941:126::-;;;;;;:::i;:::-;19015:7;19042:17;;;:8;:17;;;;;;-1:-1:-1;;;;;19042:17:0;;18941:126;22769:160;;;;;;:::i;:::-;-1:-1:-1;;;;;22884:27:0;;;22860:4;22884:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22769:160;24092:964;;;;;;:::i;:::-;;:::i;20538:325::-;20621:7;20649:16;20657:7;20649;:16::i;:::-;20641:81;;;;-1:-1:-1;;;20641:81:0;;18767:2:1;20641:81:0;;;18749:21:1;18806:2;18786:18;;;18779:30;18845:34;18825:18;;;18818:62;-1:-1:-1;;;18896:18:1;;;18889:50;18956:19;;20641:81:0;;;;;;;;;-1:-1:-1;;;;;20741:21:0;;20733:77;;;;-1:-1:-1;;;20733:77:0;;15162:2:1;20733:77:0;;;15144:21:1;15201:2;15181:18;;;15174:30;15240:34;15220:18;;;15213:62;-1:-1:-1;;;15291:18:1;;;15284:41;15342:19;;20733:77:0;15134:233:1;20733:77:0;-1:-1:-1;20828:18:0;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;20828:27:0;;;;;;;;;;;;20538:325::o;18359:109::-;18435:19;;;;:10;:19;;;;;;;;:25;;;;;;;;:::i;:::-;;18359:109;;:::o;17883:100::-;17937:13;17970:5;17963:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:100;:::o;26707:1280::-;26982:7;:14;26963:8;:15;:33;26955:86;;;;-1:-1:-1;;;26955:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27060:16:0;;27052:66;;;;-1:-1:-1;;;27052:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27151:20:0;;11601:10;27151:20;;:60;;-1:-1:-1;27175:36:0;27192:4;11601:10;22769:160;:::i;27175:36::-;27129:160;;;;-1:-1:-1;;;27129:160:0;;17989:2:1;27129:160:0;;;17971:21:1;18028:2;18008:18;;;18001:30;18067:34;18047:18;;;18040:62;-1:-1:-1;;;18118:18:1;;;18111:48;18176:19;;27129:160:0;17961:240:1;27129:160:0;11601:10;27302:16;27424:393;27448:8;:15;27444:1;:19;27424:393;;;27485:15;27503:8;27512:1;27503:11;;;;;;-1:-1:-1;;;27503:11:0;;;;;;;;;;;;;;;27485:29;;27529:14;27546:7;27554:1;27546:10;;;;;;-1:-1:-1;;;27546:10:0;;;;;;;;;;;;;;;27529:27;;27600:131;27647:6;27600:131;;;;;;;;;;;;;;;;;:9;:18;27610:7;27600:18;;;;;;;;;;;:24;27619:4;-1:-1:-1;;;;;27600:24:0;-1:-1:-1;;;;;27600:24:0;;;;;;;;;;;;;:28;;:131;;;;;:::i;:::-;27573:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27573:24:0;;;;;;;;;;:158;;;;27771:22;;;;;;:34;;27798:6;27771:26;:34::i;:::-;27746:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27746:22:0;;;;;;;;;;:59;;;;-1:-1:-1;27465:3:0;;;:::i;:::-;;;27424:393;;;;27864:2;-1:-1:-1;;;;;27834:52:0;27858:4;-1:-1:-1;;;;;27834:52:0;27848:8;-1:-1:-1;;;;;27834:52:0;;27868:8;27878:7;27834:52;;;;;;;:::i;:::-;;;;;;;;27899:80;27935:8;27945:4;27951:2;27955:8;27965:7;27974:4;27899:35;:80::i;:::-;26707:1280;;;;;;:::o;19251:117::-;19328:32;;;;:14;;:32;;;;;:::i;:::-;;19251:117;:::o;21173:634::-;21337:16;21398:3;:10;21379:8;:15;:29;21371:83;;;;-1:-1:-1;;;21371:83:0;;21134:2:1;21371:83:0;;;21116:21:1;21173:2;21153:18;;;21146:30;21212:34;21192:18;;;21185:62;-1:-1:-1;;;21263:18:1;;;21256:39;21312:19;;21371:83:0;21106:231:1;21371:83:0;21467:30;21514:8;:15;-1:-1:-1;;;;;21500:30:0;;;;;-1:-1:-1;;;21500:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21500:30:0;;21467:63;;21548:9;21543:224;21567:8;:15;21563:1;:19;21543:224;;;21635:1;-1:-1:-1;;;;;21612:25:0;:8;21621:1;21612:11;;;;;;-1:-1:-1;;;21612:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21612:25:0;;;21604:87;;;;-1:-1:-1;;;21604:87:0;;15574:2:1;21604:87:0;;;15556:21:1;15613:2;15593:18;;;15586:30;15652:34;15632:18;;;15625:62;-1:-1:-1;;;15703:18:1;;;15696:47;15760:19;;21604:87:0;15546:239:1;21604:87:0;21725:9;:17;21735:3;21739:1;21735:6;;;;;;-1:-1:-1;;;21735:6:0;;;;;;;;;;;;;;;21725:17;;;;;;;;;;;:30;21743:8;21752:1;21743:11;;;;;;-1:-1:-1;;;21743:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21725:30:0;-1:-1:-1;;;;;21725:30:0;;;;;;;;;;;;;21706:13;21720:1;21706:16;;;;;;-1:-1:-1;;;21706:16:0;;;;;;;;;;;;;;;;;;:49;21584:3;;;:::i;:::-;;;21543:224;;;-1:-1:-1;21786:13:0;21173:634;-1:-1:-1;;;21173:634:0:o;35846:153::-;35953:38;35964:7;35973:8;35983:7;35953:10;:38::i;34602:216::-;34391:5;;34672:4;;-1:-1:-1;;;;;34391:5:0;34400:10;34391:19;34383:64;;;;-1:-1:-1;;;34383:64:0;;19592:2:1;34383:64:0;;;19574:21:1;;;19611:18;;;19604:30;19670:34;19650:18;;;19643:62;19722:18;;34383:64:0;19564:182:1;34383:64:0;-1:-1:-1;;;;;34696:22:0;::::1;34688:73;;;::::0;-1:-1:-1;;;34688:73:0;;15992:2:1;34688:73:0::1;::::0;::::1;15974:21:1::0;16031:2;16011:18;;;16004:30;16070:34;16050:18;;;16043:62;-1:-1:-1;;;16121:18:1;;;16114:36;16167:19;;34688:73:0::1;15964:228:1::0;34688:73:0::1;-1:-1:-1::0;34772:5:0::1;:16:::0;;-1:-1:-1;;;;;;34772:16:0::1;-1:-1:-1::0;;;;;34772:16:0;::::1;;::::0;;-1:-1:-1;34458:1:0::1;34602:216:::0;;;:::o;17991:104::-;18047:13;18080:7;18073:14;;;;;:::i;22169:311::-;11601:10;-1:-1:-1;;;;;22272:24:0;;;;22264:78;;;;-1:-1:-1;;;22264:78:0;;20724:2:1;22264:78:0;;;20706:21:1;20763:2;20743:18;;;20736:30;20802:34;20782:18;;;20775:62;-1:-1:-1;;;20853:18:1;;;20846:39;20902:19;;22264:78:0;20696:231:1;22264:78:0;11601:10;22355:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22355:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22355:53:0;;;;;;;;;;22424:48;;13451:41:1;;;22355:42:0;;11601:10;22424:48;;13424:18:1;22424:48:0;;;;;;;22169:311;;:::o;35731:107::-;35796:34;35802:10;35814:7;35823:6;35796:5;:34::i;17241:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19589:556::-;19662:13;19696:16;19704:7;19696;:16::i;:::-;19688:77;;;;-1:-1:-1;;;19688:77:0;;19953:2:1;19688:77:0;;;19935:21:1;19992:2;19972:18;;;19965:30;20031:34;20011:18;;;20004:62;-1:-1:-1;;;20082:18:1;;;20075:46;20138:19;;19688:77:0;19925:238:1;19688:77:0;19776:23;19802:19;;;:10;:19;;;;;19776:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19832:18;19853:14;19832:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19890:4;19884:18;19906:1;19884:23;19880:72;;;-1:-1:-1;19931:9:0;19589:556;-1:-1:-1;;19589:556:0:o;19880:72::-;19966:23;;:27;19962:108;;20041:4;20047:9;20024:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20010:48;;;;19589:556;;;:::o;19962:108::-;20111:4;20117:18;:7;:16;:18::i;:::-;20094:42;;;;;;;;;:::i;35517:206::-;35616:21;35627:3;35632:4;35616:10;:21::i;:::-;35648:33;35654:9;;35665:6;35673:3;35677;35648:5;:33::i;:::-;35704:9;;:11;;35714:1;35704:11;:::i;:::-;35692:9;:23;-1:-1:-1;;;;35517:206:0:o;24092:964::-;-1:-1:-1;;;;;24323:16:0;;24315:66;;;;-1:-1:-1;;;24315:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24414:20:0;;11601:10;24414:20;;:60;;-1:-1:-1;24438:36:0;24455:4;11601:10;22769:160;:::i;24438:36::-;24392:151;;;;-1:-1:-1;;;24392:151:0;;16755:2:1;24392:151:0;;;16737:21:1;16794:2;16774:18;;;16767:30;16833:34;16813:18;;;16806:62;-1:-1:-1;;;16884:18:1;;;16877:39;16933:19;;24392:151:0;16727:231:1;24392:151:0;11601:10;24600:101;11601:10;24631:4;24637:2;24641:26;24659:7;24641:17;:26::i;:::-;24669:25;24687:6;24669:17;:25::i;:::-;26707:1280;;;;;;24600:101;24741:82;24770:6;24741:82;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24741:24:0;;;;;;;;;;;:82;:28;:82::i;:::-;24714:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24714:24:0;;;;;;;;;;:109;;;;24859:22;;;;;;:34;;24886:6;24859:26;:34::i;:::-;24834:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24834:22:0;;;;;;;;;;;;;:59;;;;24911:51;;22811:25:1;;;22852:18;;;22845:34;;;24911:51:0;;;;;;;;;22784:18:1;24911:51:0;;;;;;;24975:73;25006:8;25016:4;25022:2;25026:7;25035:6;25043:4;24975:30;:73::i;20153:127::-;20218:4;20242:30;:12;20264:7;20242:21;:30::i;:::-;20235:37;20153:127;-1:-1:-1;;20153:127:0:o;13109:192::-;13195:7;13231:12;13223:6;;;;13215:29;;;;-1:-1:-1;;;13215:29:0;;;;;;;;:::i;:::-;-1:-1:-1;13255:9:0;13267:5;13271:1;13267;:5;:::i;:::-;13255:17;-1:-1:-1;;13109:192:0;;;;;;:::o;12657:181::-;12715:7;;12747:5;12751:1;12747;:5;:::i;:::-;12735:17;;12776:1;12771;:6;;12763:46;;;;-1:-1:-1;;;12763:46:0;;16399:2:1;12763:46:0;;;16381:21:1;16438:2;16418:18;;;16411:30;16477:29;16457:18;;;16450:57;16524:18;;12763:46:0;16371:177:1;32950:809:0;-1:-1:-1;;;;;33209:13:0;;14611:20;14650:8;33205:547;;33245:84;;-1:-1:-1;;;33245:84:0;;-1:-1:-1;;;;;33245:43:0;;;;;:84;;33289:8;;33299:4;;33305:8;;33315:7;;33324:4;;33245:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33245:84:0;;;;;;;;-1:-1:-1;;33245:84:0;;;;;;;;;;;;:::i;:::-;;;33241:500;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33614:6;33607:14;;-1:-1:-1;;;33607:14:0;;;;;;;;:::i;33241:500::-;;;33663:62;;-1:-1:-1;;;33663:62:0;;14332:2:1;33663:62:0;;;14314:21:1;14371:2;14351:18;;;14344:30;14410:34;14390:18;;;14383:62;-1:-1:-1;;;14461:18:1;;;14454:50;14521:19;;33663:62:0;14304:242:1;33241:500:0;-1:-1:-1;;;;;;33379:64:0;;-1:-1:-1;;;33379:64:0;33375:163;;33468:50;;-1:-1:-1;;;33468:50:0;;;;;;;:::i;33375:163::-;33330:223;32950:809;;;;;;:::o;31155:756::-;-1:-1:-1;;;;;31281:21:0;;31273:69;;;;-1:-1:-1;;;31273:69:0;;;;;;;:::i;:::-;31380:7;:14;31361:8;:15;:33;31353:86;;;;-1:-1:-1;;;31353:86:0;;;;;;;:::i;:::-;31496:74;;;;;;;;;31452:16;31496:74;;;;11601:10;;31583:240;31604:8;:15;31600:1;:19;31583:240;;;31675:136;31729:7;31737:1;31729:10;;;;;;-1:-1:-1;;;31729:10:0;;;;;;;;;;;;;;;31675:136;;;;;;;;;;;;;;;;;:9;:22;31685:8;31694:1;31685:11;;;;;;-1:-1:-1;;;31685:11:0;;;;;;;;;;;;;;;31675:22;;;;;;;;;;;:31;31698:7;-1:-1:-1;;;;;31675:31:0;-1:-1:-1;;;;;31675:31:0;;;;;;;;;;;;;:35;;:136;;;;;:::i;:::-;31641:9;:22;31651:8;31660:1;31651:11;;;;;;-1:-1:-1;;;31651:11:0;;;;;;;;;;;;;;;31641:22;;;;;;;;;;;:31;31664:7;-1:-1:-1;;;;;31641:31:0;-1:-1:-1;;;;;31641:31:0;;;;;;;;;;;;:170;;;;31621:3;;;;;:::i;:::-;;;;31583:240;;;;31881:1;-1:-1:-1;;;;;31840:63:0;31864:7;-1:-1:-1;;;;;31840:63:0;31854:8;-1:-1:-1;;;;;31840:63:0;;31885:8;31895:7;31840:63;;;;;;;:::i;:::-;;;;;;;;31155:756;;;;:::o;30325:680::-;30426:16;30434:7;30426;:16::i;:::-;30418:78;;;;-1:-1:-1;;;30418:78:0;;17165:2:1;30418:78:0;;;17147:21:1;17204:2;17184:18;;;17177:30;17243:34;17223:18;;;17216:62;-1:-1:-1;;;17294:18:1;;;17287:47;17351:19;;30418:78:0;17137:239:1;30418:78:0;-1:-1:-1;;;;;30515:21:0;;30507:69;;;;-1:-1:-1;;;30507:69:0;;;;;;;:::i;:::-;11601:10;30633:110;11601:10;30664:7;30589:16;30685:26;30703:7;30685:17;:26::i;:::-;30713:25;30731:6;30713:17;:25::i;:::-;-1:-1:-1;;30633:110:0;;;;;;;;;-1:-1:-1;30633:110:0;;-1:-1:-1;;;26707:1280:0;30633:110;30786:129;30832:6;30786:129;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30786:27:0;;;;;;;;;;;:129;:31;:129::i;:::-;30756:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30756:27:0;;;;;;;;;;;;:159;;;;30935:62;;22811:25:1;;;22852:18;;;22845:34;;;30756:18:0;;30935:62;;;;;22784:18:1;30935:62:0;22766:119:1;92:557:0;148:13;180:10;176:53;;-1:-1:-1;;207:10:0;;;;;;;;;;;;-1:-1:-1;;;207:10:0;;;;;92:557::o;176:53::-;254:5;239:12;295:78;302:9;;295:78;;328:8;;;;:::i;:::-;;-1:-1:-1;351:10:0;;-1:-1:-1;359:2:0;351:10;;:::i;:::-;;;295:78;;;383:19;415:6;-1:-1:-1;;;;;405:17:0;;;;;-1:-1:-1;;;405:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;405:17:0;-1:-1:-1;383:39:0;-1:-1:-1;433:13:0;449:10;458:1;449:6;:10;:::i;:::-;433:26;;477:5;470:12;;493:117;500:9;;493:117;;562:9;569:2;562:4;:9;:::i;:::-;557:14;;:2;:14;:::i;:::-;544:29;;526:6;533:7;;;;:::i;:::-;;;526:15;;;;;;-1:-1:-1;;;526:15:0;;;;;;;;;;;;:47;-1:-1:-1;;;;;526:47:0;;;;;;;;-1:-1:-1;588:10:0;596:2;588:10;;:::i;:::-;;;493:117;;;-1:-1:-1;634:6:0;92:557;-1:-1:-1;;;;92:557:0:o;35190:319::-;35277:12;35319:4;35324:8;35302:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35292:42;;;;;;35277:57;;35362:104;35435:4;35382:58;;;;;;;10828:66:1;10816:79;;10920:2;10911:12;;10904:28;;;;10957:2;10948:12;;10806:160;35382:58:0;;;;-1:-1:-1;;35382:58:0;;;;;;;;;35372:69;;35382:58;35372:69;;;;35443:6;;35451;;;;35459;;;;35443;35362:104;;;;;;;;13730:25:1;;;;13803:4;13791:17;13771:18;;;13764:45;;;;13825:18;;;13818:34;;;;13868:18;;;13861:34;13702:19;;35362:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35362:104:0;;-1:-1:-1;;35362:104:0;;35353:5;;-1:-1:-1;;;;;35353:5:0;;;:113;;;;-1:-1:-1;35345:156:0;;;;-1:-1:-1;;;35345:156:0;;18408:2:1;35345:156:0;;;18390:21:1;18447:2;18427:18;;;18420:30;18486:32;18466:18;;;18459:60;18536:18;;35345:156:0;18380:180:1;28392:634:0;28504:16;28512:7;28504;:16::i;:::-;28503:17;28495:59;;;;-1:-1:-1;;;28495:59:0;;21953:2:1;28495:59:0;;;21935:21:1;21992:2;21972:18;;;21965:30;22031:31;22011:18;;;22004:59;22080:18;;28495:59:0;21925:179:1;28495:59:0;28573:12;28565:50;;;;-1:-1:-1;;;28565:50:0;;20370:2:1;28565:50:0;;;20352:21:1;20409:2;20389:18;;;20382:30;20448:27;20428:18;;;20421:55;20493:18;;28565:50:0;20342:175:1;28565:50:0;28655:1;28640:4;28634:18;:22;28626:52;;;;-1:-1:-1;;;28626:52:0;;22311:2:1;28626:52:0;;;22293:21:1;22350:2;22330:18;;;22323:30;-1:-1:-1;;;22369:18:1;;;22362:47;22426:18;;28626:52:0;22283:167:1;28626:52:0;28691:17;;;;:8;:17;;;;;:30;;-1:-1:-1;;;;;;28691:30:0;28711:10;28691:30;;;;;;28732:37;;:12;;28700:7;;28732:16;:37::i;:::-;-1:-1:-1;28780:20:0;;;;:11;:20;;;;;;;;:27;;;28818:9;:18;;;;;28837:10;28818:30;;;;;;;:40;;;28869:27;28792:7;28891:4;28869:12;:27::i;:::-;28914:70;;;22811:25:1;;;22867:2;22852:18;;22845:34;;;28955:10:0;;28949:3;;28955:10;;28914:70;;22784:18:1;28914:70:0;;;;;;;29010:7;29000:18;29004:4;29000:18;;;;;;:::i;:::-;;;;;;;;28392:634;;;;:::o;33767:198::-;33887:16;;;33901:1;33887:16;;;;;;;;;33833;;33862:22;;33887:16;;;;;;;;;;;;-1:-1:-1;33887:16:0;33862:41;;33925:7;33914:5;33920:1;33914:8;;;;;;-1:-1:-1;;;33914:8:0;;;;;;;;;;;;;;;;;;:18;33952:5;33767:198;-1:-1:-1;;33767:198:0:o;32170:772::-;-1:-1:-1;;;;;32404:13:0;;14611:20;14650:8;32400:535;;32440:77;;-1:-1:-1;;;32440:77:0;;-1:-1:-1;;;;;32440:38:0;;;;;:77;;32479:8;;32489:4;;32495:7;;32504:6;;32512:4;;32440:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32440:77:0;;;;;;;;-1:-1:-1;;32440:77:0;;;;;;;;;;;;:::i;:::-;;;32436:488;;;;:::i;:::-;-1:-1:-1;;;;;;32567:59:0;;-1:-1:-1;;;32567:59:0;32563:158;;32651:50;;-1:-1:-1;;;32651:50:0;;;;;;;:::i;3939:151::-;4023:4;2130:17;;;:12;;;:17;;;;;;:22;;4047:35;2035:125;3596:185;3685:4;3709:64;3714:3;3734;-1:-1:-1;;;;;3748:23:0;;3709:4;:64::i;:::-;3702:71;3596:185;-1:-1:-1;;;;3596:185:0:o;874:470::-;950:4;986:17;;;:12;;;:17;;;;;;1020:13;1016:321;;-1:-1:-1;;1105:38:0;;;;;;;;;;;;;;;;;;1087:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;1179:19;;1159:17;;;:12;;;:17;;;;;;;:39;1213:11;;1016:321;1293:5;1257:3;1270:12;1281:1;1270:8;:12;:::i;:::-;1257:26;;;;;;-1:-1:-1;;;1257:26:0;;;;;;;;;;;;;;;;;;;:33;;:41;;;;1320:5;1313:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:755;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;321:5;314;307:20;266:2;361:6;348:20;387:4;410:43;450:2;410:43;:::i;:::-;482:2;476:9;494:31;522:2;514:6;494:31;:::i;:::-;560:18;;;594:15;;;;-1:-1:-1;629:15:1;;;679:1;675:10;;;663:23;;659:32;;656:41;-1:-1:-1;653:2:1;;;714:5;707;700:20;653:2;740:5;754:163;768:2;765:1;762:9;754:163;;;825:17;;813:30;;863:12;;;;895;;;;786:1;779:9;754:163;;;-1:-1:-1;935:6:1;;256:691;-1:-1:-1;;;;;;;256:691:1:o;952:575::-;994:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1069:5;1062;1055:20;1014:2;1109:6;1096:20;-1:-1:-1;;;;;1131:2:1;1128:26;1125:2;;;1157:18;;:::i;:::-;1206:2;1200:9;1218:67;1273:2;1254:13;;-1:-1:-1;;1250:27:1;1279:4;1246:38;1200:9;1218:67;:::i;:::-;1309:2;1301:6;1294:18;1355:3;1348:4;1343:2;1335:6;1331:15;1327:26;1324:35;1321:2;;;1376:5;1369;1362:20;1321:2;1444;1437:4;1429:6;1425:17;1418:4;1410:6;1406:17;1393:54;1467:15;;;1484:4;1463:26;1456:41;;;;1471:6;1004:523;-1:-1:-1;;1004:523:1:o;1532:196::-;1591:6;1644:2;1632:9;1623:7;1619:23;1615:32;1612:2;;;1665:6;1657;1650:22;1612:2;1693:29;1712:9;1693:29;:::i;1733:270::-;1801:6;1809;1862:2;1850:9;1841:7;1837:23;1833:32;1830:2;;;1883:6;1875;1868:22;1830:2;1911:29;1930:9;1911:29;:::i;:::-;1901:39;;1959:38;1993:2;1982:9;1978:18;1959:38;:::i;:::-;1949:48;;1820:183;;;;;:::o;2008:983::-;2162:6;2170;2178;2186;2194;2247:3;2235:9;2226:7;2222:23;2218:33;2215:2;;;2269:6;2261;2254:22;2215:2;2297:29;2316:9;2297:29;:::i;:::-;2287:39;;2345:38;2379:2;2368:9;2364:18;2345:38;:::i;:::-;2335:48;;2434:2;2423:9;2419:18;2406:32;-1:-1:-1;;;;;2498:2:1;2490:6;2487:14;2484:2;;;2519:6;2511;2504:22;2484:2;2547:61;2600:7;2591:6;2580:9;2576:22;2547:61;:::i;:::-;2537:71;;2661:2;2650:9;2646:18;2633:32;2617:48;;2690:2;2680:8;2677:16;2674:2;;;2711:6;2703;2696:22;2674:2;2739:63;2794:7;2783:8;2772:9;2768:24;2739:63;:::i;:::-;2729:73;;2855:3;2844:9;2840:19;2827:33;2811:49;;2885:2;2875:8;2872:16;2869:2;;;2906:6;2898;2891:22;2869:2;;2934:51;2977:7;2966:8;2955:9;2951:24;2934:51;:::i;:::-;2924:61;;;2205:786;;;;;;;;:::o;2996:626::-;3100:6;3108;3116;3124;3132;3185:3;3173:9;3164:7;3160:23;3156:33;3153:2;;;3207:6;3199;3192:22;3153:2;3235:29;3254:9;3235:29;:::i;:::-;3225:39;;3283:38;3317:2;3306:9;3302:18;3283:38;:::i;:::-;3273:48;;3368:2;3357:9;3353:18;3340:32;3330:42;;3419:2;3408:9;3404:18;3391:32;3381:42;;3474:3;3463:9;3459:19;3446:33;-1:-1:-1;;;;;3494:6:1;3491:30;3488:2;;;3539:6;3531;3524:22;3488:2;3567:49;3608:7;3599:6;3588:9;3584:22;3567:49;:::i;3627:699::-;3754:6;3762;3770;3823:2;3811:9;3802:7;3798:23;3794:32;3791:2;;;3844:6;3836;3829:22;3791:2;3872:29;3891:9;3872:29;:::i;:::-;3862:39;;3952:2;3941:9;3937:18;3924:32;-1:-1:-1;;;;;4016:2:1;4008:6;4005:14;4002:2;;;4037:6;4029;4022:22;4002:2;4065:61;4118:7;4109:6;4098:9;4094:22;4065:61;:::i;:::-;4055:71;;4179:2;4168:9;4164:18;4151:32;4135:48;;4208:2;4198:8;4195:16;4192:2;;;4229:6;4221;4214:22;4192:2;;4257:63;4312:7;4301:8;4290:9;4286:24;4257:63;:::i;:::-;4247:73;;;3781:545;;;;;:::o;4331:367::-;4396:6;4404;4457:2;4445:9;4436:7;4432:23;4428:32;4425:2;;;4478:6;4470;4463:22;4425:2;4506:29;4525:9;4506:29;:::i;:::-;4496:39;;4585:2;4574:9;4570:18;4557:32;4632:5;4625:13;4618:21;4611:5;4608:32;4598:2;;4659:6;4651;4644:22;4598:2;4687:5;4677:15;;;4415:283;;;;;:::o;4703:264::-;4771:6;4779;4832:2;4820:9;4811:7;4807:23;4803:32;4800:2;;;4853:6;4845;4838:22;4800:2;4881:29;4900:9;4881:29;:::i;:::-;4871:39;4957:2;4942:18;;;;4929:32;;-1:-1:-1;;;4790:177:1:o;4972:1274::-;5090:6;5098;5151:2;5139:9;5130:7;5126:23;5122:32;5119:2;;;5172:6;5164;5157:22;5119:2;5217:9;5204:23;-1:-1:-1;;;;;5287:2:1;5279:6;5276:14;5273:2;;;5308:6;5300;5293:22;5273:2;5351:6;5340:9;5336:22;5326:32;;5396:7;5389:4;5385:2;5381:13;5377:27;5367:2;;5423:6;5415;5408:22;5367:2;5464;5451:16;5486:4;5509:43;5549:2;5509:43;:::i;:::-;5581:2;5575:9;5593:31;5621:2;5613:6;5593:31;:::i;:::-;5659:18;;;5693:15;;;;-1:-1:-1;5728:11:1;;;5770:1;5766:10;;;5758:19;;5754:28;;5751:41;-1:-1:-1;5748:2:1;;;5810:6;5802;5795:22;5748:2;5837:6;5828:15;;5852:169;5866:2;5863:1;5860:9;5852:169;;;5923:23;5942:3;5923:23;:::i;:::-;5911:36;;5884:1;5877:9;;;;;5967:12;;;;5999;;5852:169;;;-1:-1:-1;6040:6:1;-1:-1:-1;;6084:18:1;;6071:32;;-1:-1:-1;;6115:16:1;;;6112:2;;;6149:6;6141;6134:22;6112:2;;6177:63;6232:7;6221:8;6210:9;6206:24;6177:63;:::i;:::-;6167:73;;;5109:1137;;;;;:::o;6251:255::-;6309:6;6362:2;6350:9;6341:7;6337:23;6333:32;6330:2;;;6383:6;6375;6368:22;6330:2;6427:9;6414:23;6446:30;6470:5;6446:30;:::i;6511:259::-;6580:6;6633:2;6621:9;6612:7;6608:23;6604:32;6601:2;;;6654:6;6646;6639:22;6601:2;6691:9;6685:16;6710:30;6734:5;6710:30;:::i;6775:341::-;6844:6;6897:2;6885:9;6876:7;6872:23;6868:32;6865:2;;;6918:6;6910;6903:22;6865:2;6963:9;6950:23;-1:-1:-1;;;;;6988:6:1;6985:30;6982:2;;;7033:6;7025;7018:22;6982:2;7061:49;7102:7;7093:6;7082:9;7078:22;7061:49;:::i;7121:992::-;7239:6;7247;7255;7263;7307:9;7298:7;7294:23;7337:3;7333:2;7329:12;7326:2;;;7359:6;7351;7344:22;7326:2;7404:9;7391:23;-1:-1:-1;;;;;7429:6:1;7426:30;7423:2;;;7474:6;7466;7459:22;7423:2;7502:49;7543:7;7534:6;7523:9;7519:22;7502:49;:::i;:::-;7492:59;-1:-1:-1;;7598:2:1;7583:18;;7570:32;;-1:-1:-1;7649:2:1;7634:18;;7621:32;;-1:-1:-1;7687:2:1;-1:-1:-1;;7669:16:1;;7665:25;7662:2;;;7708:6;7700;7693:22;7662:2;;7746;7740:9;7758:32;7783:6;7758:32;:::i;:::-;7840:2;7829:9;7825:18;7812:32;7884:4;7877:5;7873:16;7866:5;7863:27;7853:2;;7909:6;7901;7894:22;7853:2;7927:21;;8009:3;7994:19;;7981:33;7976:2;7964:15;;7957:58;8076:3;8061:19;;;8048:33;8043:2;8031:15;;8024:58;-1:-1:-1;7274:839:1;;;;-1:-1:-1;7274:839:1;;7934:6;7274:839::o;8118:190::-;8177:6;8230:2;8218:9;8209:7;8205:23;8201:32;8198:2;;;8251:6;8243;8236:22;8198:2;-1:-1:-1;8279:23:1;;8188:120;-1:-1:-1;8188:120:1:o;8313:409::-;8391:6;8399;8452:2;8440:9;8431:7;8427:23;8423:32;8420:2;;;8473:6;8465;8458:22;8420:2;8514:9;8501:23;8491:33;;8575:2;8564:9;8560:18;8547:32;-1:-1:-1;;;;;8594:6:1;8591:30;8588:2;;;8639:6;8631;8624:22;8588:2;8667:49;8708:7;8699:6;8688:9;8684:22;8667:49;:::i;8727:258::-;8795:6;8803;8856:2;8844:9;8835:7;8831:23;8827:32;8824:2;;;8877:6;8869;8862:22;8824:2;-1:-1:-1;;8905:23:1;;;8975:2;8960:18;;;8947:32;;-1:-1:-1;8814:171:1:o;8990:437::-;9043:3;9081:5;9075:12;9108:6;9103:3;9096:19;9134:4;9163:2;9158:3;9154:12;9147:19;;9200:2;9193:5;9189:14;9221:3;9233:169;9247:6;9244:1;9241:13;9233:169;;;9308:13;;9296:26;;9342:12;;;;9377:15;;;;9269:1;9262:9;9233:169;;;-1:-1:-1;9418:3:1;;9051:376;-1:-1:-1;;;;;9051:376:1:o;9432:257::-;9473:3;9511:5;9505:12;9538:6;9533:3;9526:19;9554:63;9610:6;9603:4;9598:3;9594:14;9587:4;9580:5;9576:16;9554:63;:::i;:::-;9671:2;9650:15;-1:-1:-1;;9646:29:1;9637:39;;;;9678:4;9633:50;;9481:208;-1:-1:-1;;9481:208:1:o;9694:412::-;9923:26;9919:31;9910:6;9906:2;9902:15;9898:53;9893:3;9886:66;9868:3;9981:6;9975:13;9997:62;10052:6;10047:2;10042:3;10038:12;10031:4;10023:6;10019:17;9997:62;:::i;:::-;10079:16;;;;10097:2;10075:25;;9876:230;-1:-1:-1;;;9876:230:1:o;10111:470::-;10290:3;10328:6;10322:13;10344:53;10390:6;10385:3;10378:4;10370:6;10366:17;10344:53;:::i;:::-;10460:13;;10419:16;;;;10482:57;10460:13;10419:16;10516:4;10504:17;;10482:57;:::i;:::-;10555:20;;10298:283;-1:-1:-1;;;;10298:283:1:o;11179:826::-;-1:-1:-1;;;;;11576:15:1;;;11558:34;;11628:15;;11623:2;11608:18;;11601:43;11538:3;11675:2;11660:18;;11653:31;;;11501:4;;11707:57;;11744:19;;11736:6;11707:57;:::i;:::-;11812:9;11804:6;11800:22;11795:2;11784:9;11780:18;11773:50;11846:44;11883:6;11875;11846:44;:::i;:::-;11832:58;;11939:9;11931:6;11927:22;11921:3;11910:9;11906:19;11899:51;11967:32;11992:6;11984;11967:32;:::i;:::-;11959:40;11510:495;-1:-1:-1;;;;;;;;11510:495:1:o;12010:560::-;-1:-1:-1;;;;;12307:15:1;;;12289:34;;12359:15;;12354:2;12339:18;;12332:43;12406:2;12391:18;;12384:34;;;12449:2;12434:18;;12427:34;;;12269:3;12492;12477:19;;12470:32;;;12232:4;;12519:45;;12544:19;;12536:6;12519:45;:::i;:::-;12511:53;12241:329;-1:-1:-1;;;;;;;12241:329:1:o;12575:261::-;12754:2;12743:9;12736:21;12717:4;12774:56;12826:2;12815:9;12811:18;12803:6;12774:56;:::i;12841:465::-;13098:2;13087:9;13080:21;13061:4;13124:56;13176:2;13165:9;13161:18;13153:6;13124:56;:::i;:::-;13228:9;13220:6;13216:22;13211:2;13200:9;13196:18;13189:50;13256:44;13293:6;13285;13256:44;:::i;:::-;13248:52;13070:236;-1:-1:-1;;;;;13070:236:1:o;13906:219::-;14055:2;14044:9;14037:21;14018:4;14075:44;14115:2;14104:9;14100:18;14092:6;14075:44;:::i;14551:404::-;14753:2;14735:21;;;14792:2;14772:18;;;14765:30;14831:34;14826:2;14811:18;;14804:62;-1:-1:-1;;;14897:2:1;14882:18;;14875:38;14945:3;14930:19;;14725:230::o;17381:401::-;17583:2;17565:21;;;17622:2;17602:18;;;17595:30;17661:34;17656:2;17641:18;;17634:62;-1:-1:-1;;;17727:2:1;17712:18;;17705:35;17772:3;17757:19;;17555:227::o;18986:399::-;19188:2;19170:21;;;19227:2;19207:18;;;19200:30;19266:34;19261:2;19246:18;;19239:62;-1:-1:-1;;;19332:2:1;19317:18;;19310:33;19375:3;19360:19;;19160:225::o;21342:404::-;21544:2;21526:21;;;21583:2;21563:18;;;21556:30;21622:34;21617:2;21602:18;;21595:62;-1:-1:-1;;;21688:2:1;21673:18;;21666:38;21736:3;21721:19;;21516:230::o;22890:183::-;22950:4;-1:-1:-1;;;;;22975:6:1;22972:30;22969:2;;;23005:18;;:::i;:::-;-1:-1:-1;23050:1:1;23046:14;23062:4;23042:25;;22959:114::o;23078:128::-;23118:3;23149:1;23145:6;23142:1;23139:13;23136:2;;;23155:18;;:::i;:::-;-1:-1:-1;23191:9:1;;23126:80::o;23211:120::-;23251:1;23277;23267:2;;23282:18;;:::i;:::-;-1:-1:-1;23316:9:1;;23257:74::o;23336:125::-;23376:4;23404:1;23401;23398:8;23395:2;;;23409:18;;:::i;:::-;-1:-1:-1;23446:9:1;;23385:76::o;23466:258::-;23538:1;23548:113;23562:6;23559:1;23556:13;23548:113;;;23638:11;;;23632:18;23619:11;;;23612:39;23584:2;23577:10;23548:113;;;23679:6;23676:1;23673:13;23670:2;;;23714:1;23705:6;23700:3;23696:16;23689:27;23670:2;;23519:205;;;:::o;23729:136::-;23768:3;23796:5;23786:2;;23805:18;;:::i;:::-;-1:-1:-1;;;23841:18:1;;23776:89::o;23870:380::-;23949:1;23945:12;;;;23992;;;24013:2;;24067:4;24059:6;24055:17;24045:27;;24013:2;24120;24112:6;24109:14;24089:18;24086:38;24083:2;;;24166:10;24161:3;24157:20;24154:1;24147:31;24201:4;24198:1;24191:15;24229:4;24226:1;24219:15;24083:2;;23925:325;;;:::o;24255:223::-;24341:2;24333:6;24329:15;24410:6;24398:10;24395:22;-1:-1:-1;;;;;24362:10:1;24359:34;24356:62;24353:2;;;24421:18;;:::i;:::-;24457:2;24450:22;-1:-1:-1;24301:177:1:o;24483:249::-;24593:2;24574:13;;-1:-1:-1;;24570:27:1;24558:40;;-1:-1:-1;;;;;24613:34:1;;24649:22;;;24610:62;24607:2;;;24675:18;;:::i;:::-;24711:2;24704:22;-1:-1:-1;;24530:202:1:o;24737:135::-;24776:3;-1:-1:-1;;24797:17:1;;24794:2;;;24817:18;;:::i;:::-;-1:-1:-1;24864:1:1;24853:13;;24784:88::o;24877:112::-;24909:1;24935;24925:2;;24940:18;;:::i;:::-;-1:-1:-1;24974:9:1;;24915:74::o;24994:127::-;25055:10;25050:3;25046:20;25043:1;25036:31;25086:4;25083:1;25076:15;25110:4;25107:1;25100:15;25126:127;25187:10;25182:3;25178:20;25175:1;25168:31;25218:4;25215:1;25208:15;25242:4;25239:1;25232:15;25258:127;25319:10;25314:3;25310:20;25307:1;25300:31;25350:4;25347:1;25340:15;25374:4;25371:1;25364:15;25390:185;25425:3;25467:1;25449:16;25446:23;25443:2;;;25517:1;25512:3;25507;25492:27;25548:10;25543:3;25539:20;25443:2;25433:142;:::o;25580:671::-;25619:3;25661:4;25643:16;25640:26;25637:2;;;25627:624;:::o;25637:2::-;25703;25697:9;-1:-1:-1;;25768:16:1;25764:25;;25761:1;25697:9;25740:50;25819:4;25813:11;25843:16;-1:-1:-1;;;;;25949:2:1;25942:4;25934:6;25930:17;25927:25;25922:2;25914:6;25911:14;25908:45;25905:2;;;25956:5;;;;;25627:624;:::o;25905:2::-;25993:6;25987:4;25983:17;25972:28;;26029:3;26023:10;26056:2;26048:6;26045:14;26042:2;;;26062:5;;;;;;25627:624;:::o;26042:2::-;26146;26127:16;26121:4;26117:27;26113:36;26106:4;26097:6;26092:3;26088:16;26084:27;26081:69;26078:2;;;26153:5;;;;;;25627:624;:::o;26078:2::-;26169:57;26220:4;26211:6;26203;26199:19;26195:30;26189:4;26169:57;:::i;:::-;-1:-1:-1;26242:3:1;;25627:624;-1:-1:-1;;;;;25627:624:1:o;26256:131::-;-1:-1:-1;;;;;;26330:32:1;;26320:43;;26310:2;;26377:1;26374;26367:12;26310:2;26300:87;:::o

Swarm Source

ipfs://f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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