ETH Price: $3,496.21 (+4.14%)
Gas: 4 Gwei

Token

My Imaginary Items by Kai (IFITEM)
 

Overview

Max Total Supply

0 IFITEM

Holders

136

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xef532e2c9331b04d89979b436fcec32081586300
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:
MyImaginaryItems

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 3500 runs

Other Settings:
default evmVersion, MIT license
File 1 of 10 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 10 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        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) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

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

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

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

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

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

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

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

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

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

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

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

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.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 ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.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;
    }
}

File 3 of 10 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 4 of 10 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 5 of 10 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 6 of 10 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

File 8 of 10 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 9 of 10 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

//-----------------------------------------------------------------------------
// Author: papaver (@papaver42)
//-----------------------------------------------------------------------------

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";

//------------------------------------------------------------------------------
// My Imaginary Items by Kai
//------------------------------------------------------------------------------

/**
 * @title My Imaginary Items by Kai
 */
contract MyImaginaryItems is ERC1155,
    Ownable
{

    //-------------------------------------------------------------------------
    // structs
    //-------------------------------------------------------------------------

    struct Token {
        uint128 totalSupply;
        int128 createdTS;
    }

    //-------------------------------------------------------------------------
    // events
    //-------------------------------------------------------------------------

    /**
     * Emited when a new token is created.
     */
    event TokenCreated(uint256 tokenId, int128 createdTS);

    /**
     * Emited when a token is burned.
     */
    event Burn(address indexed owner, uint256 tokenId, uint256 amount);

    /**
     * Emited when a token is burned in batch.
     */
    event BurnBatch(address indexed owner, uint256[] tokenIds, uint256[] amounts);

    //-------------------------------------------------------------------------
    // constants
    //-------------------------------------------------------------------------

    // token name/symbol
    string constant private _name   = "My Imaginary Items by Kai";
    string constant private _symbol = "IFITEM";

    // contract info
    string public _contractUri;

    //-------------------------------------------------------------------------
    // fields
    //-------------------------------------------------------------------------

    // track tokens
    Token[] private _tokens;

    // handle token uri overrides
    mapping (uint256 => string) private _ipfsHash;

    // roles
    mapping (address => bool) private _minterAddress;

    //-------------------------------------------------------------------------
    // ctor
    //-------------------------------------------------------------------------

    constructor(
        string memory baseUri,
        string memory contractUri)
        ERC1155(baseUri)
    {
        // start token index at 1
        _tokens.push();

        // save contract uri
        _contractUri = contractUri;
    }

    //-------------------------------------------------------------------------
    // modifiers
    //-------------------------------------------------------------------------

    modifier validTokenId(uint256 tokenId) {
        require(_created(tokenId), "invalid token");
        _;
    }

    //-------------------------------------------------------------------------

	/**
     * Verify caller is authorized minter.
     */
    modifier isMinter() {
        require(_minterAddress[_msgSender()] || owner() == _msgSender(), "caller not minter");
        _;
    }

    //-------------------------------------------------------------------------
    // internal
    //-------------------------------------------------------------------------

    /**
     * @dev Returns whether the specified token was created.
     */
    function _created(uint256 id)
        internal view
        returns (bool)
    {
        return id < _tokens.length && _tokens[id].createdTS > 0;
    }

    //-------------------------------------------------------------------------
    // ERC1155
    //-------------------------------------------------------------------------

    /**
     * @dev See {ERC1155-_mint}.
     */
    function _mint(
            address account, uint256 id, uint256 amount, bytes memory data)
        internal virtual override validTokenId(id)
    {
        super._mint(account, id, amount, data);
        _tokens[id].totalSupply += uint64(amount);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev See {ERC1155-_burn}.
     */
    function _burn(address account, uint256 id, uint256 amount)
        internal virtual override
        validTokenId(id)
    {
        super._burn(account, id, amount);

        unchecked {
            _tokens[id].totalSupply -= uint64(amount);
        }

        // emit event
        emit Burn(account, id, amount);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev See {ERC1155-_burnBatch}.
     */
    function _burnBatch(
            address account, uint256[] memory ids, uint256[] memory amounts)
        internal virtual override
    {
        super._burnBatch(account, ids, amounts);

        unchecked {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                _tokens[id].totalSupply -= uint64(amounts[i]);
            }
        }

        // emit event
        emit BurnBatch(account, ids, amounts);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     *  Each token should have it's own override.
     */
    function uri(uint256 id)
        public view override
        validTokenId(id)
        returns (string memory)
    {
        // append hash or use base
        return bytes(_ipfsHash[id]).length == 0
            ? super.uri(id)
            : string(abi.encodePacked(super.uri(id), "/", _ipfsHash[id]));
    }

    //-------------------------------------------------------------------------
    // admin
    //-------------------------------------------------------------------------

    /**
     * @dev Authorize minter address.
     *
     * @param minter address Address to authorize.
     */
    function registerMinterAddress(address minter)
        public
        onlyOwner
    {
        require(!_minterAddress[minter], "address already registered");
        _minterAddress[minter] = true;
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Remove minter address.
     *
     * @param minter address Address to revoke.
     */
    function revokeMinterAddress(address minter)
        public
        onlyOwner
    {
        require(_minterAddress[minter], "address not registered");
        delete _minterAddress[minter];
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Update default tokenUri used for all tokens.
     *
     * Should use the `\{id\}` replace mechanism to load the token id.
     */
    function setURI(string memory tokenUri)
        public
        onlyOwner
    {
        _setURI(tokenUri);
        emit URI(tokenUri, 0);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Override token's ipfs hash.
     *
     * @param id uint256 Id of token to update.
     * @param ipfsHash string Ipfs hash to set for token.
     */
    function setTokenIpfsHash(uint256 id, string memory ipfsHash)
        public
        onlyOwner
        validTokenId(id)
    {
        _ipfsHash[id] = ipfsHash;
        emit URI(uri(id), id);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Create a new token.
     *
     * @param amount uint256 Mint amount tokens to caller.
     * @param ipfsHash string Override ipfsHash for newly created token.
     */
    function create(uint256 amount, string memory ipfsHash)
        public onlyOwner
    {
        require(amount > 0, 'invalid amount');
        require(bytes(ipfsHash).length > 0, 'invalid ipfshash');

        // grab token id
        uint256 tokenId = _tokens.length;

        // add token
        int128 createdAt   = int128(int256(block.timestamp));
        Token memory token = Token(0, createdAt);
        _tokens.push(token);

        // override token's ipfsHash
        _ipfsHash[tokenId] = ipfsHash;
        emit URI(uri(tokenId), tokenId);

        // mint a single token
        _mint(msg.sender, tokenId, amount, "");

        // created event
        emit TokenCreated(tokenId, createdAt);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Mint tokens to a wallet.
     *
     * @param to address Wallet to send balance to.
     * @param id uint256 Token id to mint.
     * @param amount uint256 Quantity of tokens (balance) to mint.
     */
    function mint(address to, uint256 id, uint256 amount)
        public isMinter
    {
        require(amount > 0, 'invalid amount');
        _mint(to, id, amount, "");
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Batch mint tokens to several wallets.
     *
     * Allows minting different tokens to different wallets. Easy way to
     *  airdrop multiple tokens at once in a single transaction.
     *
     * @param tos address[] Wallet to send balance to.
     * @param ids uint256[] Token id to mint.
     * @param amounts uint256[] Quantity of tokens (balance) to mint.
     */
    function mintBatch(address[] calldata tos,
            uint256[] calldata ids, uint256[] calldata amounts)
        external isMinter
    {
        require(tos.length == amounts.length && tos.length == ids.length, "data mismatch");
        for (uint256 i = 0; i < tos.length; ++i) {
            _mint(tos[i], ids[i], amounts[i], "");
        }
    }

    //-------------------------------------------------------------------------
    // accessors
    //-------------------------------------------------------------------------

    /**
     * @dev Conform to {IERC721Metadata-name}.
     */
    function name()
        public pure
        returns (string memory)
    {
        return _name;
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Conform to {IERC721Metadata-symbol}.
     */
    function symbol()
        public pure
        returns (string memory)
    {
        return _symbol;
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id)
        public view
        returns (uint256)
    {
        return id < _tokens.length
            ? _tokens[id].totalSupply
            : 0;
    }

    //-------------------------------------------------------------------------
    // interface
    //-------------------------------------------------------------------------

    /**
     * @dev Burn a single token balance.
     *
     * @param id uint256 Token id to burn.
     * @param amount uint256 Quantity of tokens burn.
     */
    function burn(uint256 id, uint256 amount)
        external
    {
        require(amount > 0, 'invalid amount');
        _burn(msg.sender, id, amount);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Burn multiple token balances in a single transaction.
     *
     * @param ids uint256[] Token ids to burn.
     * @param amounts uint256[] Quantity of tokens burn.
     */
    function burnBatch(uint256[] calldata ids, uint256[] calldata amounts)
        external
    {
        _burnBatch(msg.sender, ids, amounts);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Return token info.
     */
    function getToken(uint256 id)
        public view
        validTokenId(id)
        returns (Token memory, string memory)
    {
        return (_tokens[id], _ipfsHash[id]);
    }

    //-------------------------------------------------------------------------

    /**
     * @dev Return list of all tokens.
     */
    function allTokens()
        public view
        returns (Token[] memory)
    {
        // return empty so all token indicies line up
        return _tokens;
    }

    //-------------------------------------------------------------------------
    // contractUri
    //-------------------------------------------------------------------------

    function setContractURI(string memory contractUri)
        external onlyOwner
    {
        _contractUri = contractUri;
    }

    //-------------------------------------------------------------------------

    function contractURI()
        public view
        returns (string memory)
    {
        return _contractUri;
    }

}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"string","name":"contractUri","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":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"BurnBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"int128","name":"createdTS","type":"int128"}],"name":"TokenCreated","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":[],"name":"_contractUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allTokens","outputs":[{"components":[{"internalType":"uint128","name":"totalSupply","type":"uint128"},{"internalType":"int128","name":"createdTS","type":"int128"}],"internalType":"struct MyImaginaryItems.Token[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getToken","outputs":[{"components":[{"internalType":"uint128","name":"totalSupply","type":"uint128"},{"internalType":"int128","name":"createdTS","type":"int128"}],"internalType":"struct MyImaginaryItems.Token","name":"","type":"tuple"},{"internalType":"string","name":"","type":"string"}],"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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"registerMinterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"revokeMinterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","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":"id","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":"string","name":"contractUri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"ipfsHash","type":"string"}],"name":"setTokenIpfsHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenUri","type":"string"}],"name":"setURI","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620037de380380620037de833981016040819052620000349162000198565b8162000040816200006f565b506200004c3362000081565b600580546001018155600052600462000066828262000291565b5050506200035d565b60026200007d828262000291565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000fb57600080fd5b81516001600160401b0380821115620001185762000118620000d3565b604051601f8301601f19908116603f01168101908282118183101715620001435762000143620000d3565b816040528381526020925086838588010111156200016057600080fd5b600091505b8382101562000184578582018301518183018401529082019062000165565b600093810190920192909252949350505050565b60008060408385031215620001ac57600080fd5b82516001600160401b0380821115620001c457600080fd5b620001d286838701620000e9565b93506020850151915080821115620001e957600080fd5b50620001f885828601620000e9565b9150509250929050565b600181811c908216806200021757607f821691505b6020821081036200023857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028c57600081815260208120601f850160051c81016020861015620002675750805b601f850160051c820191505b81811015620002885782815560010162000273565b5050505b505050565b81516001600160401b03811115620002ad57620002ad620000d3565b620002c581620002be845462000202565b846200023e565b602080601f831160018114620002fd5760008415620002e45750858301515b600019600386901b1c1916600185901b17855562000288565b600085815260208120601f198616915b828110156200032e578886015182559484019460019091019084016200030d565b50858210156200034d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613471806200036d6000396000f3fe608060405234801561001057600080fd5b50600436106101c35760003560e01c8063836527be116100f9578063bd85b03911610097578063e8a3d48511610071578063e8a3d48514610419578063e985e9c514610421578063f242432a1461045d578063f2fde38b1461047057600080fd5b8063bd85b039146103dd578063d9ce2f6d146103f0578063e4b50cb8146103f857600080fd5b8063938e3d7b116100d3578063938e3d7b1461036b57806395d89b411461037e578063a22cb465146103b7578063b390c0ab146103ca57600080fd5b8063836527be1461032a57806383ca4b6f1461033d5780638da5cb5b1461035057600080fd5b8063156e29f611610166578063571286831161014057806357128683146102e75780635fa82826146102fa5780636ff97f1d1461030d578063715018a61461032257600080fd5b8063156e29f6146102a15780632eb2c2d6146102b45780634e1273f4146102c757600080fd5b806302fe5305116101a257806302fe53051461022657806306fdde03146102395780630c05bf6c1461027b5780630e89341c1461028e57600080fd5b8062fdd58e146101c85780630118fa49146101ee57806301ffc9a714610203575b600080fd5b6101db6101d63660046127f0565b610483565b6040519081526020015b60405180910390f35b6102016101fc3660046128ea565b61052f565b005b61021661021136600461295f565b61070b565b60405190151581526020016101e5565b610201610234366004612983565b6107ee565b60408051808201909152601981527f4d7920496d6167696e617279204974656d73206279204b61690000000000000060208201525b6040516101e59190612a10565b6102016102893660046128ea565b61083b565b61026e61029c366004612a23565b6108f7565b6102016102af366004612a3c565b6109be565b6102016102c2366004612b04565b610aa2565b6102da6102d5366004612bae565b610b44565b6040516101e59190612caa565b6102016102f5366004612d09565b610c82565b610201610308366004612da3565b610de5565b610315610e76565b6040516101e59190612dbe565b610201610f02565b610201610338366004612da3565b610f16565b61020161034b366004612e2a565b610fab565b6003546040516001600160a01b0390911681526020016101e5565b610201610379366004612983565b61101f565b60408051808201909152600681527f49464954454d0000000000000000000000000000000000000000000000000000602082015261026e565b6102016103c5366004612e96565b611037565b6102016103d8366004612ed2565b611042565b6101db6103eb366004612a23565b61109d565b61026e6110fa565b61040b610406366004612a23565b611188565b6040516101e5929190612ef4565b61026e6112f0565b61021661042f366004612f2d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61020161046b366004612f60565b611382565b61020161047e366004612da3565b61141d565b60006001600160a01b0383166105065760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e65720000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b6105376114ad565b600082116105875760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016104fd565b60008151116105d85760405162461bcd60e51b815260206004820152601060248201527f696e76616c69642069706673686173680000000000000000000000000000000060448201526064016104fd565b60058054604080518082018252600080825242600f81900b6020808501918252600187018855968352835190516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029116177f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db086015584825260069095529190912091929161066c8582613058565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b610698856108f7565b6040516106a59190612a10565b60405180910390a26106c833848760405180602001604052806000815250611507565b60408051848152600f84900b60208201527f3aca97d999191921736446fc699e564b11e97b386433359350a34b62d469f9fa910160405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061079e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061052957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610529565b6107f66114ad565b6107ff816115f0565b60007f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516108309190612a10565b60405180910390a250565b6108436114ad565b8161084d816115fc565b6108995760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b60008381526006602052604090206108b18382613058565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6108dd856108f7565b6040516108ea9190612a10565b60405180910390a2505050565b606081610903816115fc565b61094f5760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b6000838152600660205260409020805461096890612fc5565b1590506109ac576109788361164a565b600084815260066020908152604091829020915161099893929101613118565b6040516020818303038152906040526109b5565b6109b58361164a565b91505b50919050565b3360009081526007602052604090205460ff16806109e657506003546001600160a01b031633145b610a325760405162461bcd60e51b815260206004820152601160248201527f63616c6c6572206e6f74206d696e74657200000000000000000000000000000060448201526064016104fd565b60008111610a825760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016104fd565b610a9d83838360405180602001604052806000815250611507565b505050565b6001600160a01b038516331480610abe5750610abe853361042f565b610b305760405162461bcd60e51b815260206004820152602f60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206e6f7220617070726f766564000000000000000000000000000000000060648201526084016104fd565b610b3d85858585856116de565b5050505050565b60608151835114610bbd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016104fd565b6000835167ffffffffffffffff811115610bd957610bd961281a565b604051908082528060200260200182016040528015610c02578160200160208202803683370190505b50905060005b8451811015610c7a57610c4d858281518110610c2657610c266131d0565b6020026020010151858381518110610c4057610c406131d0565b6020026020010151610483565b828281518110610c5f57610c5f6131d0565b6020908102919091010152610c738161322e565b9050610c08565b509392505050565b3360009081526007602052604090205460ff1680610caa57506003546001600160a01b031633145b610cf65760405162461bcd60e51b815260206004820152601160248201527f63616c6c6572206e6f74206d696e74657200000000000000000000000000000060448201526064016104fd565b8481148015610d0457508483145b610d505760405162461bcd60e51b815260206004820152600d60248201527f64617461206d69736d617463680000000000000000000000000000000000000060448201526064016104fd565b60005b85811015610ddc57610dcc878783818110610d7057610d706131d0565b9050602002016020810190610d859190612da3565b868684818110610d9757610d976131d0565b90506020020135858585818110610db057610db06131d0565b9050602002013560405180602001604052806000815250611507565b610dd58161322e565b9050610d53565b50505050505050565b610ded6114ad565b6001600160a01b03811660009081526007602052604090205460ff16610e555760405162461bcd60e51b815260206004820152601660248201527f61646472657373206e6f7420726567697374657265640000000000000000000060448201526064016104fd565b6001600160a01b03166000908152600760205260409020805460ff19169055565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610ef957600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff811682527001000000000000000000000000000000009004600f0b81830152825260019092019101610e9a565b50505050905090565b610f0a6114ad565b610f14600061197c565b565b610f1e6114ad565b6001600160a01b03811660009081526007602052604090205460ff1615610f875760405162461bcd60e51b815260206004820152601a60248201527f6164647265737320616c7265616479207265676973746572656400000000000060448201526064016104fd565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b61101933858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152506119e692505050565b50505050565b6110276114ad565b60046110338282613058565b5050565b611033338383611ae6565b600081116110925760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016104fd565b611033338383611bda565b60055460009082106110b05760006110e2565b600582815481106110c3576110c36131d0565b6000918252602090912001546fffffffffffffffffffffffffffffffff165b6fffffffffffffffffffffffffffffffff1692915050565b6004805461110790612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461113390612fc5565b80156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b505050505081565b60408051808201909152600080825260208201526060826111a8816115fc565b6111f45760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b60058481548110611207576112076131d0565b600091825260208083208784526006825260409384902084518086019095529201546fffffffffffffffffffffffffffffffff811684527001000000000000000000000000000000009004600f0b908301528054819061126690612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461129290612fc5565b80156112df5780601f106112b4576101008083540402835291602001916112df565b820191906000526020600020905b8154815290600101906020018083116112c257829003601f168201915b505050505090509250925050915091565b6060600480546112ff90612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461132b90612fc5565b80156113785780601f1061134d57610100808354040283529160200191611378565b820191906000526020600020905b81548152906001019060200180831161135b57829003601f168201915b5050505050905090565b6001600160a01b03851633148061139e575061139e853361042f565b6114105760405162461bcd60e51b815260206004820152602f60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206e6f7220617070726f766564000000000000000000000000000000000060648201526084016104fd565b610b3d8585858585611cf3565b6114256114ad565b6001600160a01b0381166114a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104fd565b6114aa8161197c565b50565b6003546001600160a01b03163314610f145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104fd565b82611511816115fc565b61155d5760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b61156985858585611ec9565b8267ffffffffffffffff1660058581548110611587576115876131d0565b6000918252602082200180549091906115b39084906fffffffffffffffffffffffffffffffff16613248565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050505050565b60026110338282613058565b600554600090821080156105295750600060058381548110611620576116206131d0565b6000918252602090912001547001000000000000000000000000000000009004600f0b1392915050565b60606002805461165990612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461168590612fc5565b80156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b50505050509050919050565b81518351146117555760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104fd565b6001600160a01b0384166117d15760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104fd565b3360005b845181101561190e5760008582815181106117f2576117f26131d0565b602002602001015190506000858381518110611810576118106131d0565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156118b65760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104fd565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906118f3908490613278565b92505081905550505050806119079061322e565b90506117d5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195e92919061328b565b60405180910390a4611974818787878787611ff0565b505050505050565b600380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6119f18383836121f4565b60005b8251811015611aaa576000838281518110611a1157611a116131d0565b60200260200101519050828281518110611a2d57611a2d6131d0565b602002602001015167ffffffffffffffff1660058281548110611a5257611a526131d0565b600091825260209091200180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166fffffffffffffffffffffffffffffffff9182169390930316919091179055506001016119f4565b50826001600160a01b03167fc654fa60d2a625ee021b1ac30960810e81f72997250f9fe91c3c443690c47cdf83836040516108ea92919061328b565b816001600160a01b0316836001600160a01b031603611b6d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016104fd565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b81611be4816115fc565b611c305760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b611c3b84848461247f565b8167ffffffffffffffff1660058481548110611c5957611c596131d0565b60009182526020918290200180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166fffffffffffffffffffffffffffffffff918216949094031692909217909155604080518581529182018490526001600160a01b038616917f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a910160405180910390a250505050565b6001600160a01b038416611d6f5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104fd565b336000611d7b8561262e565b90506000611d888561262e565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015611e215760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104fd565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611e5e908490613278565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611ebe848a8a8a8a8a612679565b505050505050505050565b6001600160a01b038416611f455760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104fd565b336000611f518561262e565b90506000611f5e8561262e565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290611f90908490613278565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610ddc83600089898989612679565b6001600160a01b0384163b15611974576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c819061204d90899089908890889088906004016132b9565b6020604051808303816000875af1925050508015612088575060408051601f3d908101601f1916820190925261208591810190613317565b60015b61213d57612094613334565b806308c379a0036120cd57506120a8613350565b806120b357506120cf565b8060405162461bcd60e51b81526004016104fd9190612a10565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016104fd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610ddc5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104fd565b6001600160a01b0383166122705760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104fd565b80518251146122e75760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104fd565b604080516020810190915260009081905233905b8351811015612412576000848281518110612318576123186131d0565b602002602001015190506000848381518110612336576123366131d0565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156123db5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016104fd565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061240a8161322e565b9150506122fb565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161246392919061328b565b60405180910390a4604080516020810190915260009052611019565b6001600160a01b0383166124fb5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104fd565b3360006125078461262e565b905060006125148461262e565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156125b65760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016104fd565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610ddc565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612668576126686131d0565b602090810291909101015292915050565b6001600160a01b0384163b15611974576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e61906126d690899089908890889088906004016133f8565b6020604051808303816000875af1925050508015612711575060408051601f3d908101601f1916820190925261270e91810190613317565b60015b61271d57612094613334565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610ddc5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104fd565b80356001600160a01b03811681146127eb57600080fd5b919050565b6000806040838503121561280357600080fd5b61280c836127d4565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561286f5761286f61281a565b6040525050565b600082601f83011261288757600080fd5b813567ffffffffffffffff8111156128a1576128a161281a565b6040516128b86020601f19601f8501160182612849565b8181528460208386010111156128cd57600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156128fd57600080fd5b82359150602083013567ffffffffffffffff81111561291b57600080fd5b61292785828601612876565b9150509250929050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146114aa57600080fd5b60006020828403121561297157600080fd5b813561297c81612931565b9392505050565b60006020828403121561299557600080fd5b813567ffffffffffffffff8111156129ac57600080fd5b6129b884828501612876565b949350505050565b60005b838110156129db5781810151838201526020016129c3565b50506000910152565b600081518084526129fc8160208601602086016129c0565b601f01601f19169290920160200192915050565b60208152600061297c60208301846129e4565b600060208284031215612a3557600080fd5b5035919050565b600080600060608486031215612a5157600080fd5b612a5a846127d4565b95602085013595506040909401359392505050565b600067ffffffffffffffff821115612a8957612a8961281a565b5060051b60200190565b600082601f830112612aa457600080fd5b81356020612ab182612a6f565b604051612abe8282612849565b83815260059390931b8501820192828101915086841115612ade57600080fd5b8286015b84811015612af95780358352918301918301612ae2565b509695505050505050565b600080600080600060a08688031215612b1c57600080fd5b612b25866127d4565b9450612b33602087016127d4565b9350604086013567ffffffffffffffff80821115612b5057600080fd5b612b5c89838a01612a93565b94506060880135915080821115612b7257600080fd5b612b7e89838a01612a93565b93506080880135915080821115612b9457600080fd5b50612ba188828901612876565b9150509295509295909350565b60008060408385031215612bc157600080fd5b823567ffffffffffffffff80821115612bd957600080fd5b818501915085601f830112612bed57600080fd5b81356020612bfa82612a6f565b604051612c078282612849565b83815260059390931b8501820192828101915089841115612c2757600080fd5b948201945b83861015612c4c57612c3d866127d4565b82529482019490820190612c2c565b96505086013592505080821115612c6257600080fd5b5061292785828601612a93565b600081518084526020808501945080840160005b83811015612c9f57815187529582019590820190600101612c83565b509495945050505050565b60208152600061297c6020830184612c6f565b60008083601f840112612ccf57600080fd5b50813567ffffffffffffffff811115612ce757600080fd5b6020830191508360208260051b8501011115612d0257600080fd5b9250929050565b60008060008060008060608789031215612d2257600080fd5b863567ffffffffffffffff80821115612d3a57600080fd5b612d468a838b01612cbd565b90985096506020890135915080821115612d5f57600080fd5b612d6b8a838b01612cbd565b90965094506040890135915080821115612d8457600080fd5b50612d9189828a01612cbd565b979a9699509497509295939492505050565b600060208284031215612db557600080fd5b61297c826127d4565b602080825282518282018190526000919060409081850190868401855b82811015612e1d57612e0d84835180516fffffffffffffffffffffffffffffffff168252602090810151600f0b910152565b9284019290850190600101612ddb565b5091979650505050505050565b60008060008060408587031215612e4057600080fd5b843567ffffffffffffffff80821115612e5857600080fd5b612e6488838901612cbd565b90965094506020870135915080821115612e7d57600080fd5b50612e8a87828801612cbd565b95989497509550505050565b60008060408385031215612ea957600080fd5b612eb2836127d4565b915060208301358015158114612ec757600080fd5b809150509250929050565b60008060408385031215612ee557600080fd5b50508035926020909101359150565b82516fffffffffffffffffffffffffffffffff168152602080840151600f0b908201526060604082015260006129b860608301846129e4565b60008060408385031215612f4057600080fd5b612f49836127d4565b9150612f57602084016127d4565b90509250929050565b600080600080600060a08688031215612f7857600080fd5b612f81866127d4565b9450612f8f602087016127d4565b93506040860135925060608601359150608086013567ffffffffffffffff811115612fb957600080fd5b612ba188828901612876565b600181811c90821680612fd957607f821691505b6020821081036109b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610a9d57600081815260208120601f850160051c810160208610156130395750805b601f850160051c820191505b8181101561197457828155600101613045565b815167ffffffffffffffff8111156130725761307261281a565b613086816130808454612fc5565b84613012565b602080601f8311600181146130bb57600084156130a35750858301515b600019600386901b1c1916600185901b178555611974565b600085815260208120601f198616915b828110156130ea578886015182559484019460019091019084016130cb565b50858210156131085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351602061312b82858389016129c0565b81840191507f2f00000000000000000000000000000000000000000000000000000000000000825260016000865461316281612fc5565b81841680156131785760018114613191576131c1565b60ff1983168588015284821515830288010193506131c1565b896000528560002060005b838110156131b757815489820188015290860190870161319c565b5050848288010193505b50919998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006000198203613241576132416131ff565b5060010190565b6fffffffffffffffffffffffffffffffff818116838216019080821115613271576132716131ff565b5092915050565b80820180821115610529576105296131ff565b60408152600061329e6040830185612c6f565b82810360208401526132b08185612c6f565b95945050505050565b60006001600160a01b03808816835280871660208401525060a060408301526132e560a0830186612c6f565b82810360608401526132f78186612c6f565b9050828103608084015261330b81856129e4565b98975050505050505050565b60006020828403121561332957600080fd5b815161297c81612931565b600060033d111561334d5760046000803e5060005160e01c5b90565b600060443d101561335e5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff81602484011181841117156133ac57505050505090565b82850191508151818111156133c45750505050505090565b843d87010160208285010111156133de5750505050505090565b6133ed60208286010187612849565b509095945050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261343060a08301846129e4565b97965050505050505056fea26469706673582212200a50a15f1917a16f7d7abc611f5f48111b4ff3809d845d6a35dd61e83404c1c664736f6c63430008110033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7777772e6d79696d6167696e617279667269656e642e636f6d2f6170692f6d79696d6167696e6172796974656d732f6d657461646174612f746f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f7777772e6d79696d6167696e617279667269656e642e636f6d2f6170692f6d79696d6167696e6172796974656d732f6d657461646174612f636f6e7472616374000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c35760003560e01c8063836527be116100f9578063bd85b03911610097578063e8a3d48511610071578063e8a3d48514610419578063e985e9c514610421578063f242432a1461045d578063f2fde38b1461047057600080fd5b8063bd85b039146103dd578063d9ce2f6d146103f0578063e4b50cb8146103f857600080fd5b8063938e3d7b116100d3578063938e3d7b1461036b57806395d89b411461037e578063a22cb465146103b7578063b390c0ab146103ca57600080fd5b8063836527be1461032a57806383ca4b6f1461033d5780638da5cb5b1461035057600080fd5b8063156e29f611610166578063571286831161014057806357128683146102e75780635fa82826146102fa5780636ff97f1d1461030d578063715018a61461032257600080fd5b8063156e29f6146102a15780632eb2c2d6146102b45780634e1273f4146102c757600080fd5b806302fe5305116101a257806302fe53051461022657806306fdde03146102395780630c05bf6c1461027b5780630e89341c1461028e57600080fd5b8062fdd58e146101c85780630118fa49146101ee57806301ffc9a714610203575b600080fd5b6101db6101d63660046127f0565b610483565b6040519081526020015b60405180910390f35b6102016101fc3660046128ea565b61052f565b005b61021661021136600461295f565b61070b565b60405190151581526020016101e5565b610201610234366004612983565b6107ee565b60408051808201909152601981527f4d7920496d6167696e617279204974656d73206279204b61690000000000000060208201525b6040516101e59190612a10565b6102016102893660046128ea565b61083b565b61026e61029c366004612a23565b6108f7565b6102016102af366004612a3c565b6109be565b6102016102c2366004612b04565b610aa2565b6102da6102d5366004612bae565b610b44565b6040516101e59190612caa565b6102016102f5366004612d09565b610c82565b610201610308366004612da3565b610de5565b610315610e76565b6040516101e59190612dbe565b610201610f02565b610201610338366004612da3565b610f16565b61020161034b366004612e2a565b610fab565b6003546040516001600160a01b0390911681526020016101e5565b610201610379366004612983565b61101f565b60408051808201909152600681527f49464954454d0000000000000000000000000000000000000000000000000000602082015261026e565b6102016103c5366004612e96565b611037565b6102016103d8366004612ed2565b611042565b6101db6103eb366004612a23565b61109d565b61026e6110fa565b61040b610406366004612a23565b611188565b6040516101e5929190612ef4565b61026e6112f0565b61021661042f366004612f2d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61020161046b366004612f60565b611382565b61020161047e366004612da3565b61141d565b60006001600160a01b0383166105065760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e65720000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b6105376114ad565b600082116105875760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016104fd565b60008151116105d85760405162461bcd60e51b815260206004820152601060248201527f696e76616c69642069706673686173680000000000000000000000000000000060448201526064016104fd565b60058054604080518082018252600080825242600f81900b6020808501918252600187018855968352835190516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029116177f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db086015584825260069095529190912091929161066c8582613058565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b610698856108f7565b6040516106a59190612a10565b60405180910390a26106c833848760405180602001604052806000815250611507565b60408051848152600f84900b60208201527f3aca97d999191921736446fc699e564b11e97b386433359350a34b62d469f9fa910160405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061079e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061052957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610529565b6107f66114ad565b6107ff816115f0565b60007f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516108309190612a10565b60405180910390a250565b6108436114ad565b8161084d816115fc565b6108995760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b60008381526006602052604090206108b18382613058565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6108dd856108f7565b6040516108ea9190612a10565b60405180910390a2505050565b606081610903816115fc565b61094f5760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b6000838152600660205260409020805461096890612fc5565b1590506109ac576109788361164a565b600084815260066020908152604091829020915161099893929101613118565b6040516020818303038152906040526109b5565b6109b58361164a565b91505b50919050565b3360009081526007602052604090205460ff16806109e657506003546001600160a01b031633145b610a325760405162461bcd60e51b815260206004820152601160248201527f63616c6c6572206e6f74206d696e74657200000000000000000000000000000060448201526064016104fd565b60008111610a825760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016104fd565b610a9d83838360405180602001604052806000815250611507565b505050565b6001600160a01b038516331480610abe5750610abe853361042f565b610b305760405162461bcd60e51b815260206004820152602f60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206e6f7220617070726f766564000000000000000000000000000000000060648201526084016104fd565b610b3d85858585856116de565b5050505050565b60608151835114610bbd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016104fd565b6000835167ffffffffffffffff811115610bd957610bd961281a565b604051908082528060200260200182016040528015610c02578160200160208202803683370190505b50905060005b8451811015610c7a57610c4d858281518110610c2657610c266131d0565b6020026020010151858381518110610c4057610c406131d0565b6020026020010151610483565b828281518110610c5f57610c5f6131d0565b6020908102919091010152610c738161322e565b9050610c08565b509392505050565b3360009081526007602052604090205460ff1680610caa57506003546001600160a01b031633145b610cf65760405162461bcd60e51b815260206004820152601160248201527f63616c6c6572206e6f74206d696e74657200000000000000000000000000000060448201526064016104fd565b8481148015610d0457508483145b610d505760405162461bcd60e51b815260206004820152600d60248201527f64617461206d69736d617463680000000000000000000000000000000000000060448201526064016104fd565b60005b85811015610ddc57610dcc878783818110610d7057610d706131d0565b9050602002016020810190610d859190612da3565b868684818110610d9757610d976131d0565b90506020020135858585818110610db057610db06131d0565b9050602002013560405180602001604052806000815250611507565b610dd58161322e565b9050610d53565b50505050505050565b610ded6114ad565b6001600160a01b03811660009081526007602052604090205460ff16610e555760405162461bcd60e51b815260206004820152601660248201527f61646472657373206e6f7420726567697374657265640000000000000000000060448201526064016104fd565b6001600160a01b03166000908152600760205260409020805460ff19169055565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610ef957600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff811682527001000000000000000000000000000000009004600f0b81830152825260019092019101610e9a565b50505050905090565b610f0a6114ad565b610f14600061197c565b565b610f1e6114ad565b6001600160a01b03811660009081526007602052604090205460ff1615610f875760405162461bcd60e51b815260206004820152601a60248201527f6164647265737320616c7265616479207265676973746572656400000000000060448201526064016104fd565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b61101933858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152506119e692505050565b50505050565b6110276114ad565b60046110338282613058565b5050565b611033338383611ae6565b600081116110925760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064016104fd565b611033338383611bda565b60055460009082106110b05760006110e2565b600582815481106110c3576110c36131d0565b6000918252602090912001546fffffffffffffffffffffffffffffffff165b6fffffffffffffffffffffffffffffffff1692915050565b6004805461110790612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461113390612fc5565b80156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b505050505081565b60408051808201909152600080825260208201526060826111a8816115fc565b6111f45760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b60058481548110611207576112076131d0565b600091825260208083208784526006825260409384902084518086019095529201546fffffffffffffffffffffffffffffffff811684527001000000000000000000000000000000009004600f0b908301528054819061126690612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461129290612fc5565b80156112df5780601f106112b4576101008083540402835291602001916112df565b820191906000526020600020905b8154815290600101906020018083116112c257829003601f168201915b505050505090509250925050915091565b6060600480546112ff90612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461132b90612fc5565b80156113785780601f1061134d57610100808354040283529160200191611378565b820191906000526020600020905b81548152906001019060200180831161135b57829003601f168201915b5050505050905090565b6001600160a01b03851633148061139e575061139e853361042f565b6114105760405162461bcd60e51b815260206004820152602f60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206e6f7220617070726f766564000000000000000000000000000000000060648201526084016104fd565b610b3d8585858585611cf3565b6114256114ad565b6001600160a01b0381166114a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104fd565b6114aa8161197c565b50565b6003546001600160a01b03163314610f145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104fd565b82611511816115fc565b61155d5760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b61156985858585611ec9565b8267ffffffffffffffff1660058581548110611587576115876131d0565b6000918252602082200180549091906115b39084906fffffffffffffffffffffffffffffffff16613248565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050505050565b60026110338282613058565b600554600090821080156105295750600060058381548110611620576116206131d0565b6000918252602090912001547001000000000000000000000000000000009004600f0b1392915050565b60606002805461165990612fc5565b80601f016020809104026020016040519081016040528092919081815260200182805461168590612fc5565b80156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b50505050509050919050565b81518351146117555760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104fd565b6001600160a01b0384166117d15760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104fd565b3360005b845181101561190e5760008582815181106117f2576117f26131d0565b602002602001015190506000858381518110611810576118106131d0565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156118b65760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104fd565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906118f3908490613278565b92505081905550505050806119079061322e565b90506117d5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195e92919061328b565b60405180910390a4611974818787878787611ff0565b505050505050565b600380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6119f18383836121f4565b60005b8251811015611aaa576000838281518110611a1157611a116131d0565b60200260200101519050828281518110611a2d57611a2d6131d0565b602002602001015167ffffffffffffffff1660058281548110611a5257611a526131d0565b600091825260209091200180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166fffffffffffffffffffffffffffffffff9182169390930316919091179055506001016119f4565b50826001600160a01b03167fc654fa60d2a625ee021b1ac30960810e81f72997250f9fe91c3c443690c47cdf83836040516108ea92919061328b565b816001600160a01b0316836001600160a01b031603611b6d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016104fd565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b81611be4816115fc565b611c305760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420746f6b656e0000000000000000000000000000000000000060448201526064016104fd565b611c3b84848461247f565b8167ffffffffffffffff1660058481548110611c5957611c596131d0565b60009182526020918290200180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166fffffffffffffffffffffffffffffffff918216949094031692909217909155604080518581529182018490526001600160a01b038616917f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a910160405180910390a250505050565b6001600160a01b038416611d6f5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104fd565b336000611d7b8561262e565b90506000611d888561262e565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015611e215760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016104fd565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611e5e908490613278565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611ebe848a8a8a8a8a612679565b505050505050505050565b6001600160a01b038416611f455760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104fd565b336000611f518561262e565b90506000611f5e8561262e565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290611f90908490613278565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610ddc83600089898989612679565b6001600160a01b0384163b15611974576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c819061204d90899089908890889088906004016132b9565b6020604051808303816000875af1925050508015612088575060408051601f3d908101601f1916820190925261208591810190613317565b60015b61213d57612094613334565b806308c379a0036120cd57506120a8613350565b806120b357506120cf565b8060405162461bcd60e51b81526004016104fd9190612a10565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016104fd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610ddc5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104fd565b6001600160a01b0383166122705760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104fd565b80518251146122e75760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104fd565b604080516020810190915260009081905233905b8351811015612412576000848281518110612318576123186131d0565b602002602001015190506000848381518110612336576123366131d0565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156123db5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016104fd565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061240a8161322e565b9150506122fb565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161246392919061328b565b60405180910390a4604080516020810190915260009052611019565b6001600160a01b0383166124fb5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104fd565b3360006125078461262e565b905060006125148461262e565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156125b65760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016104fd565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610ddc565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612668576126686131d0565b602090810291909101015292915050565b6001600160a01b0384163b15611974576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e61906126d690899089908890889088906004016133f8565b6020604051808303816000875af1925050508015612711575060408051601f3d908101601f1916820190925261270e91810190613317565b60015b61271d57612094613334565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610ddc5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016104fd565b80356001600160a01b03811681146127eb57600080fd5b919050565b6000806040838503121561280357600080fd5b61280c836127d4565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561286f5761286f61281a565b6040525050565b600082601f83011261288757600080fd5b813567ffffffffffffffff8111156128a1576128a161281a565b6040516128b86020601f19601f8501160182612849565b8181528460208386010111156128cd57600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156128fd57600080fd5b82359150602083013567ffffffffffffffff81111561291b57600080fd5b61292785828601612876565b9150509250929050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146114aa57600080fd5b60006020828403121561297157600080fd5b813561297c81612931565b9392505050565b60006020828403121561299557600080fd5b813567ffffffffffffffff8111156129ac57600080fd5b6129b884828501612876565b949350505050565b60005b838110156129db5781810151838201526020016129c3565b50506000910152565b600081518084526129fc8160208601602086016129c0565b601f01601f19169290920160200192915050565b60208152600061297c60208301846129e4565b600060208284031215612a3557600080fd5b5035919050565b600080600060608486031215612a5157600080fd5b612a5a846127d4565b95602085013595506040909401359392505050565b600067ffffffffffffffff821115612a8957612a8961281a565b5060051b60200190565b600082601f830112612aa457600080fd5b81356020612ab182612a6f565b604051612abe8282612849565b83815260059390931b8501820192828101915086841115612ade57600080fd5b8286015b84811015612af95780358352918301918301612ae2565b509695505050505050565b600080600080600060a08688031215612b1c57600080fd5b612b25866127d4565b9450612b33602087016127d4565b9350604086013567ffffffffffffffff80821115612b5057600080fd5b612b5c89838a01612a93565b94506060880135915080821115612b7257600080fd5b612b7e89838a01612a93565b93506080880135915080821115612b9457600080fd5b50612ba188828901612876565b9150509295509295909350565b60008060408385031215612bc157600080fd5b823567ffffffffffffffff80821115612bd957600080fd5b818501915085601f830112612bed57600080fd5b81356020612bfa82612a6f565b604051612c078282612849565b83815260059390931b8501820192828101915089841115612c2757600080fd5b948201945b83861015612c4c57612c3d866127d4565b82529482019490820190612c2c565b96505086013592505080821115612c6257600080fd5b5061292785828601612a93565b600081518084526020808501945080840160005b83811015612c9f57815187529582019590820190600101612c83565b509495945050505050565b60208152600061297c6020830184612c6f565b60008083601f840112612ccf57600080fd5b50813567ffffffffffffffff811115612ce757600080fd5b6020830191508360208260051b8501011115612d0257600080fd5b9250929050565b60008060008060008060608789031215612d2257600080fd5b863567ffffffffffffffff80821115612d3a57600080fd5b612d468a838b01612cbd565b90985096506020890135915080821115612d5f57600080fd5b612d6b8a838b01612cbd565b90965094506040890135915080821115612d8457600080fd5b50612d9189828a01612cbd565b979a9699509497509295939492505050565b600060208284031215612db557600080fd5b61297c826127d4565b602080825282518282018190526000919060409081850190868401855b82811015612e1d57612e0d84835180516fffffffffffffffffffffffffffffffff168252602090810151600f0b910152565b9284019290850190600101612ddb565b5091979650505050505050565b60008060008060408587031215612e4057600080fd5b843567ffffffffffffffff80821115612e5857600080fd5b612e6488838901612cbd565b90965094506020870135915080821115612e7d57600080fd5b50612e8a87828801612cbd565b95989497509550505050565b60008060408385031215612ea957600080fd5b612eb2836127d4565b915060208301358015158114612ec757600080fd5b809150509250929050565b60008060408385031215612ee557600080fd5b50508035926020909101359150565b82516fffffffffffffffffffffffffffffffff168152602080840151600f0b908201526060604082015260006129b860608301846129e4565b60008060408385031215612f4057600080fd5b612f49836127d4565b9150612f57602084016127d4565b90509250929050565b600080600080600060a08688031215612f7857600080fd5b612f81866127d4565b9450612f8f602087016127d4565b93506040860135925060608601359150608086013567ffffffffffffffff811115612fb957600080fd5b612ba188828901612876565b600181811c90821680612fd957607f821691505b6020821081036109b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610a9d57600081815260208120601f850160051c810160208610156130395750805b601f850160051c820191505b8181101561197457828155600101613045565b815167ffffffffffffffff8111156130725761307261281a565b613086816130808454612fc5565b84613012565b602080601f8311600181146130bb57600084156130a35750858301515b600019600386901b1c1916600185901b178555611974565b600085815260208120601f198616915b828110156130ea578886015182559484019460019091019084016130cb565b50858210156131085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351602061312b82858389016129c0565b81840191507f2f00000000000000000000000000000000000000000000000000000000000000825260016000865461316281612fc5565b81841680156131785760018114613191576131c1565b60ff1983168588015284821515830288010193506131c1565b896000528560002060005b838110156131b757815489820188015290860190870161319c565b5050848288010193505b50919998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006000198203613241576132416131ff565b5060010190565b6fffffffffffffffffffffffffffffffff818116838216019080821115613271576132716131ff565b5092915050565b80820180821115610529576105296131ff565b60408152600061329e6040830185612c6f565b82810360208401526132b08185612c6f565b95945050505050565b60006001600160a01b03808816835280871660208401525060a060408301526132e560a0830186612c6f565b82810360608401526132f78186612c6f565b9050828103608084015261330b81856129e4565b98975050505050505050565b60006020828403121561332957600080fd5b815161297c81612931565b600060033d111561334d5760046000803e5060005160e01c5b90565b600060443d101561335e5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff81602484011181841117156133ac57505050505090565b82850191508151818111156133c45750505050505090565b843d87010160208285010111156133de5750505050505090565b6133ed60208286010187612849565b509095945050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261343060a08301846129e4565b97965050505050505056fea26469706673582212200a50a15f1917a16f7d7abc611f5f48111b4ff3809d845d6a35dd61e83404c1c664736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7777772e6d79696d6167696e617279667269656e642e636f6d2f6170692f6d79696d6167696e6172796974656d732f6d657461646174612f746f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f7777772e6d79696d6167696e617279667269656e642e636f6d2f6170692f6d79696d6167696e6172796974656d732f6d657461646174612f636f6e7472616374000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseUri (string): https://www.myimaginaryfriend.com/api/myimaginaryitems/metadata/token
Arg [1] : contractUri (string): https://www.myimaginaryfriend.com/api/myimaginaryitems/metadata/contract

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [3] : 68747470733a2f2f7777772e6d79696d6167696e617279667269656e642e636f
Arg [4] : 6d2f6170692f6d79696d6167696e6172796974656d732f6d657461646174612f
Arg [5] : 746f6b656e000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000048
Arg [7] : 68747470733a2f2f7777772e6d79696d6167696e617279667269656e642e636f
Arg [8] : 6d2f6170692f6d79696d6167696e6172796974656d732f6d657461646174612f
Arg [9] : 636f6e7472616374000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

601:12081:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:227:2;;;;;;:::i;:::-;;:::i;:::-;;;620:25:10;;;608:2;593:18;2185:227:2;;;;;;;;7671:706:0;;;;;;:::i;:::-;;:::i;:::-;;1236:305:2;;;;;;:::i;:::-;;:::i;:::-;;;2770:14:10;;2763:22;2745:41;;2733:2;2718:18;1236:305:2;2605:187:10;6803:142:0;;;;;;:::i;:::-;;:::i;9928:101::-;10017:5;;;;;;;;;;;;;;;;;9928:101;;;;;;;:::i;7201:196::-;;;;;;:::i;:::-;;:::i;5375:308::-;;;;;;:::i;:::-;;:::i;8686:171::-;;;;;;:::i;:::-;;:::i;4065:427:2:-;;;;;;:::i;:::-;;:::i;2569:508::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9333:348:0:-;;;;;;:::i;:::-;;:::i;6370:195::-;;;;;;:::i;:::-;;:::i;12003:163::-;;;:::i;:::-;;;;;;;:::i;1831:101:1:-;;;:::i;5975:202:0:-;;;;;;:::i;:::-;;:::i;11405:145::-;;;;;;:::i;:::-;;:::i;1201:85:1:-;1273:6;;1201:85;;-1:-1:-1;;;;;1273:6:1;;;11741:74:10;;11729:2;11714:18;1201:85:1;11595:226:10;12352:125:0;;;;;;:::i;:::-;;:::i;10181:105::-;10272:7;;;;;;;;;;;;;;;;;10181:105;;3145:153:2;;;;;;:::i;:::-;;:::i;10969:156:0:-;;;;;;:::i;:::-;;:::i;10444:180::-;;;;;;:::i;:::-;;:::i;1823:26::-;;;:::i;11684:177::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;12564:115::-;;;:::i;3365:166:2:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3487:27:2;;;3464:4;3487:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3365:166;3598:395;;;;;;:::i;:::-;;:::i;2081:198:1:-;;;;;;:::i;:::-;;:::i;2185:227:2:-;2271:7;-1:-1:-1;;;;;2298:21:2;;2290:76;;;;-1:-1:-1;;;2290:76:2;;13865:2:10;2290:76:2;;;13847:21:10;13904:2;13884:18;;;13877:30;13943:34;13923:18;;;13916:62;14014:12;13994:18;;;13987:40;14044:19;;2290:76:2;;;;;;;;;-1:-1:-1;2383:9:2;:13;;;;;;;;;;;-1:-1:-1;;;;;2383:22:2;;;;;;;;;;2185:227;;;;;:::o;7671:706:0:-;1094:13:1;:11;:13::i;:::-;7783:1:0::1;7774:6;:10;7766:37;;;::::0;-1:-1:-1;;;7766:37:0;;14276:2:10;7766:37:0::1;::::0;::::1;14258:21:10::0;14315:2;14295:18;;;14288:30;14354:16;14334:18;;;14327:44;14388:18;;7766:37:0::1;14074:338:10::0;7766:37:0::1;7846:1;7827:8;7821:22;:26;7813:55;;;::::0;-1:-1:-1;;;7813:55:0;;14619:2:10;7813:55:0::1;::::0;::::1;14601:21:10::0;14658:2;14638:18;;;14631:30;14697:18;14677;;;14670:46;14733:18;;7813:55:0::1;14417:340:10::0;7813:55:0::1;7922:7;:14:::0;;8051:19:::1;::::0;;;;::::1;::::0;;7904:15:::1;8051:19:::0;;;8003:15:::1;8051:19;::::0;;::::1;;::::0;;::::1;::::0;;;8080::::1;::::0;::::1;::::0;;;;;;;;;8051::::1;8080::::0;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;8147:18;;;:9:::1;:18:::0;;;;;;;7922:14;;8003:15;8147:29:::1;8168:8:::0;8147:18;:29:::1;:::i;:::-;;8209:7;8191:26;8195:12;8199:7;8195:3;:12::i;:::-;8191:26;;;;;;:::i;:::-;;;;;;;;8259:38;8265:10;8277:7;8286:6;8259:38;;;;;;;;;;;::::0;:5:::1;:38::i;:::-;8338:32;::::0;;17759:25:10;;;17831:2;17820:22;;;17815:2;17800:18;;17793:50;8338:32:0::1;::::0;17732:18:10;8338:32:0::1;;;;;;;7756:621;;;7671:706:::0;;:::o;1236:305:2:-;1338:4;1373:41;;;1388:26;1373:41;;:109;;-1:-1:-1;1430:52:2;;;1445:37;1430:52;1373:109;:161;;;-1:-1:-1;952:25:8;937:40;;;;1498:36:2;829:155:8;6803:142:0;1094:13:1;:11;:13::i;:::-;6890:17:0::1;6898:8;6890:7;:17::i;:::-;6936:1;6922:16;6926:8;6922:16;;;;;;:::i;:::-;;;;;;;;6803:142:::0;:::o;7201:196::-;1094:13:1;:11;:13::i;:::-;7317:2:0::1;2888:17;2897:7;2888:8;:17::i;:::-;2880:43;;;::::0;-1:-1:-1;;;2880:43:0;;18056:2:10;2880:43:0::1;::::0;::::1;18038:21:10::0;18095:2;18075:18;;;18068:30;18134:15;18114:18;;;18107:43;18167:18;;2880:43:0::1;17854:337:10::0;2880:43:0::1;7335:13:::2;::::0;;;:9:::2;:13;::::0;;;;:24:::2;7351:8:::0;7335:13;:24:::2;:::i;:::-;;7387:2;7374:16;7378:7;7382:2;7378:3;:7::i;:::-;7374:16;;;;;;:::i;:::-;;;;;;;;1117:1:1::1;7201:196:0::0;;:::o;5375:308::-;5471:13;5450:2;2888:17;2897:7;2888:8;:17::i;:::-;2880:43;;;;-1:-1:-1;;;2880:43:0;;18056:2:10;2880:43:0;;;18038:21:10;18095:2;18075:18;;;18068:30;18134:15;18114:18;;;18107:43;18167:18;;2880:43:0;17854:337:10;2880:43:0;5548:13:::1;::::0;;;:9:::1;:13;::::0;;;;5542:27;;::::1;::::0;::::1;:::i;:::-;:32:::0;;-1:-1:-1;5542:134:0::1;;5641:13;5651:2;5641:9;:13::i;:::-;5661;::::0;;;:9:::1;:13;::::0;;;;;;;;5624:51;;::::1;::::0;;5661:13;5624:51:::1;;:::i;:::-;;;;;;;;;;;;;5542:134;;;5589:13;5599:2;5589:9;:13::i;:::-;5535:141;;2933:1;5375:308:::0;;;;:::o;8686:171::-;719:10:7;3122:28:0;;;;:14;:28;;;;;;;;;:55;;-1:-1:-1;1273:6:1;;-1:-1:-1;;;;;1273:6:1;719:10:7;3154:23:0;3122:55;3114:85;;;;-1:-1:-1;;;3114:85:0;;19676:2:10;3114:85:0;;;19658:21:10;19715:2;19695:18;;;19688:30;19754:19;19734:18;;;19727:47;19791:18;;3114:85:0;19474:341:10;3114:85:0;8795:1:::1;8786:6;:10;8778:37;;;::::0;-1:-1:-1;;;8778:37:0;;14276:2:10;8778:37:0::1;::::0;::::1;14258:21:10::0;14315:2;14295:18;;;14288:30;14354:16;14334:18;;;14327:44;14388:18;;8778:37:0::1;14074:338:10::0;8778:37:0::1;8825:25;8831:2;8835;8839:6;8825:25;;;;;;;;;;;::::0;:5:::1;:25::i;:::-;8686:171:::0;;;:::o;4065:427:2:-;-1:-1:-1;;;;;4290:20:2;;719:10:7;4290:20:2;;:60;;-1:-1:-1;4314:36:2;4331:4;719:10:7;3365:166:2;:::i;4314:36::-;4269:154;;;;-1:-1:-1;;;4269:154:2;;20022:2:10;4269:154:2;;;20004:21:10;20061:2;20041:18;;;20034:30;20100:34;20080:18;;;20073:62;20171:17;20151:18;;;20144:45;20206:19;;4269:154:2;19820:411:10;4269:154:2;4433:52;4456:4;4462:2;4466:3;4471:7;4480:4;4433:22;:52::i;:::-;4065:427;;;;;:::o;2569:508::-;2720:16;2779:3;:10;2760:8;:15;:29;2752:83;;;;-1:-1:-1;;;2752:83:2;;20438:2:10;2752:83:2;;;20420:21:10;20477:2;20457:18;;;20450:30;20516:34;20496:18;;;20489:62;20587:11;20567:18;;;20560:39;20616:19;;2752:83:2;20236:405:10;2752:83:2;2846:30;2893:8;:15;2879:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2879:30:2;;2846:63;;2925:9;2920:120;2944:8;:15;2940:1;:19;2920:120;;;2999:30;3009:8;3018:1;3009:11;;;;;;;;:::i;:::-;;;;;;;3022:3;3026:1;3022:6;;;;;;;;:::i;:::-;;;;;;;2999:9;:30::i;:::-;2980:13;2994:1;2980:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2961:3;;;:::i;:::-;;;2920:120;;;-1:-1:-1;3057:13:2;2569:508;-1:-1:-1;;;2569:508:2:o;9333:348:0:-;719:10:7;3122:28:0;;;;:14;:28;;;;;;;;;:55;;-1:-1:-1;1273:6:1;;-1:-1:-1;;;;;1273:6:1;719:10:7;3154:23:0;3122:55;3114:85;;;;-1:-1:-1;;;3114:85:0;;19676:2:10;3114:85:0;;;19658:21:10;19715:2;19695:18;;;19688:30;19754:19;19734:18;;;19727:47;19791:18;;3114:85:0;19474:341:10;3114:85:0;9488:28;;::::1;:56:::0;::::1;;;-1:-1:-1::0;9520:24:0;;::::1;9488:56;9480:82;;;::::0;-1:-1:-1;;;9480:82:0;;21426:2:10;9480:82:0::1;::::0;::::1;21408:21:10::0;21465:2;21445:18;;;21438:30;21504:15;21484:18;;;21477:43;21537:18;;9480:82:0::1;21224:337:10::0;9480:82:0::1;9577:9;9572:103;9592:14:::0;;::::1;9572:103;;;9627:37;9633:3;;9637:1;9633:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9641:3;;9645:1;9641:6;;;;;;;:::i;:::-;;;;;;;9649:7;;9657:1;9649:10;;;;;;;:::i;:::-;;;;;;;9627:37;;;;;;;;;;;::::0;:5:::1;:37::i;:::-;9608:3;::::0;::::1;:::i;:::-;;;9572:103;;;;9333:348:::0;;;;;;:::o;6370:195::-;1094:13:1;:11;:13::i;:::-;-1:-1:-1;;;;;6470:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;6462:57;;;::::0;-1:-1:-1;;;6462:57:0;;21768:2:10;6462:57:0::1;::::0;::::1;21750:21:10::0;21807:2;21787:18;;;21780:30;21846:24;21826:18;;;21819:52;21888:18;;6462:57:0::1;21566:346:10::0;6462:57:0::1;-1:-1:-1::0;;;;;6536:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;6529:29;;-1:-1:-1;;6529:29:0::1;::::0;;6370:195::o;12003:163::-;12061:14;12152:7;12145:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12003:163;:::o;1831:101:1:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;5975:202:0:-;1094:13:1;:11;:13::i;:::-;-1:-1:-1;;;;;6078:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;6077:23;6069:62;;;::::0;-1:-1:-1;;;6069:62:0;;22119:2:10;6069:62:0::1;::::0;::::1;22101:21:10::0;22158:2;22138:18;;;22131:30;22197:28;22177:18;;;22170:56;22243:18;;6069:62:0::1;21917:350:10::0;6069:62:0::1;-1:-1:-1::0;;;;;6141:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;6141:29:0::1;6166:4;6141:29;::::0;;5975:202::o;11405:145::-;11507:36;11518:10;11530:3;;11507:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11507:36:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11535:7:0;;-1:-1:-1;11535:7:0;;;;11507:36;;;11535:7;;11507:36;11535:7;11507:36;;;;;;;;;-1:-1:-1;11507:10:0;;-1:-1:-1;;;11507:36:0:i;:::-;11405:145;;;;:::o;12352:125::-;1094:13:1;:11;:13::i;:::-;12444:12:0::1;:26;12459:11:::0;12444:12;:26:::1;:::i;:::-;;12352:125:::0;:::o;3145:153:2:-;3239:52;719:10:7;3272:8:2;3282;3239:18;:52::i;10969:156:0:-;11059:1;11050:6;:10;11042:37;;;;-1:-1:-1;;;11042:37:0;;14276:2:10;11042:37:0;;;14258:21:10;14315:2;14295:18;;;14288:30;14354:16;14334:18;;;14327:44;14388:18;;11042:37:0;14074:338:10;11042:37:0;11089:29;11095:10;11107:2;11111:6;11089:5;:29::i;10444:180::-;10549:7;:14;10514:7;;10544:19;;:73;;10616:1;10544:73;;;10578:7;10586:2;10578:11;;;;;;;;:::i;:::-;;;;;;;;;;:23;;;10544:73;10537:80;;;10444:180;-1:-1:-1;;10444:180:0:o;1823:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11684:177::-;-1:-1:-1;;;;;;;;;;;;;;;;;11790:13:0;11755:2;2888:17;2897:7;2888:8;:17::i;:::-;2880:43;;;;-1:-1:-1;;;2880:43:0;;18056:2:10;2880:43:0;;;18038:21:10;18095:2;18075:18;;;18068:30;18134:15;18114:18;;;18107:43;18167:18;;2880:43:0;17854:337:10;2880:43:0;11827:7:::1;11835:2;11827:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;11840:13;;;:9:::1;:13:::0;;;;;;;11819:35;;;;::::1;::::0;;;11827:11;::::1;11819:35:::0;::::1;::::0;::::1;::::0;;;;::::1;;;::::0;;::::1;::::0;;;11840:13;;11819:35:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11684:177:::0;;;;:::o;12564:115::-;12624:13;12660:12;12653:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12564:115;:::o;3598:395:2:-;-1:-1:-1;;;;;3798:20:2;;719:10:7;3798:20:2;;:60;;-1:-1:-1;3822:36:2;3839:4;719:10:7;3365:166:2;:::i;3822:36::-;3777:154;;;;-1:-1:-1;;;3777:154:2;;20022:2:10;3777:154:2;;;20004:21:10;20061:2;20041:18;;;20034:30;20100:34;20080:18;;;20073:62;20171:17;20151:18;;;20144:45;20206:19;;3777:154:2;19820:411:10;3777:154:2;3941:45;3959:4;3965:2;3969;3973:6;3981:4;3941:17;:45::i;2081:198:1:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:1;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:1;;22474:2:10;2161:73:1::1;::::0;::::1;22456:21:10::0;22513:2;22493:18;;;22486:30;22552:34;22532:18;;;22525:62;22623:8;22603:18;;;22596:36;22649:19;;2161:73:1::1;22272:402:10::0;2161:73:1::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1359:130::-;1273:6;;-1:-1:-1;;;;;1273:6:1;719:10:7;1422:23:1;1414:68;;;;-1:-1:-1;;;1414:68:1;;22881:2:10;1414:68:1;;;22863:21:10;;;22900:18;;;22893:30;22959:34;22939:18;;;22932:62;23011:18;;1414:68:1;22679:356:10;3859:253:0;3998:2;2888:17;2897:7;2888:8;:17::i;:::-;2880:43;;;;-1:-1:-1;;;2880:43:0;;18056:2:10;2880:43:0;;;18038:21:10;18095:2;18075:18;;;18068:30;18134:15;18114:18;;;18107:43;18167:18;;2880:43:0;17854:337:10;2880:43:0;4016:38:::1;4028:7;4037:2;4041:6;4049:4;4016:11;:38::i;:::-;4098:6;4064:41;;:7;4072:2;4064:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;:41:::0;;:11;;;:41:::1;::::0;;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3859:253:::0;;;;;:::o;8173:86:2:-;8239:4;:13;8246:6;8239:4;:13;:::i;3477:151:0:-;3578:7;:14;3546:4;;3573:19;;:48;;;;;3620:1;3596:7;3604:2;3596:11;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;:25;3566:55;3477:151;-1:-1:-1;;3477:151:0:o;1940:103:2:-;2000:13;2032:4;2025:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1940:103;;;:::o;6235:1115::-;6455:7;:14;6441:3;:10;:28;6433:81;;;;-1:-1:-1;;;6433:81:2;;23444:2:10;6433:81:2;;;23426:21:10;23483:2;23463:18;;;23456:30;23522:34;23502:18;;;23495:62;23593:10;23573:18;;;23566:38;23621:19;;6433:81:2;23242:404:10;6433:81:2;-1:-1:-1;;;;;6532:16:2;;6524:66;;;;-1:-1:-1;;;6524:66:2;;23853:2:10;6524:66:2;;;23835:21:10;23892:2;23872:18;;;23865:30;23931:34;23911:18;;;23904:62;24002:7;23982:18;;;23975:35;24027:19;;6524:66:2;23651:401:10;6524:66:2;719:10:7;6601:16:2;6714:411;6738:3;:10;6734:1;:14;6714:411;;;6769:10;6782:3;6786:1;6782:6;;;;;;;;:::i;:::-;;;;;;;6769:19;;6802:14;6819:7;6827:1;6819:10;;;;;;;;:::i;:::-;;;;;;;;;;;;6844:19;6866:13;;;;;;;;;;-1:-1:-1;;;;;6866:19:2;;;;;;;;;;;;6819:10;;-1:-1:-1;6907:21:2;;;;6899:76;;;;-1:-1:-1;;;6899:76:2;;24259:2:10;6899:76:2;;;24241:21:10;24298:2;24278:18;;;24271:30;24337:34;24317:18;;;24310:62;24408:12;24388:18;;;24381:40;24438:19;;6899:76:2;24057:406:10;6899:76:2;7017:9;:13;;;;;;;;;;;-1:-1:-1;;;;;7017:19:2;;;;;;;;;;7039:20;;;7017:42;;7087:17;;;;;;;:27;;7039:20;;7017:9;7087:27;;7039:20;;7087:27;:::i;:::-;;;;;;;;6755:370;;;6750:3;;;;:::i;:::-;;;6714:411;;;;7170:2;-1:-1:-1;;;;;7140:47:2;7164:4;-1:-1:-1;;;;;7140:47:2;7154:8;-1:-1:-1;;;;;7140:47:2;;7174:3;7179:7;7140:47;;;;;;;:::i;:::-;;;;;;;;7268:75;7304:8;7314:4;7320:2;7324:3;7329:7;7338:4;7268:35;:75::i;:::-;6423:927;6235:1115;;;;;:::o;2433:187:1:-;2525:6;;;-1:-1:-1;;;;;2541:17:1;;;;;;;;;;;2573:40;;2525:6;;;2541:17;2525:6;;2573:40;;2506:16;;2573:40;2496:124;2433:187;:::o;4710:462:0:-;4856:39;4873:7;4882:3;4887:7;4856:16;:39::i;:::-;4935:9;4930:156;4954:3;:10;4950:1;:14;4930:156;;;4989:10;5002:3;5006:1;5002:6;;;;;;;;:::i;:::-;;;;;;;4989:19;;5060:7;5068:1;5060:10;;;;;;;;:::i;:::-;;;;;;;5026:45;;:7;5034:2;5026:11;;;;;;;;:::i;:::-;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4966:3:0;4930:156;;;;5143:7;-1:-1:-1;;;;;5133:32:0;;5152:3;5157:7;5133:32;;;;;;;:::i;12912:323:2:-;13062:8;-1:-1:-1;;;;;13053:17:2;:5;-1:-1:-1;;;;;13053:17:2;;13045:71;;;;-1:-1:-1;;;13045:71:2;;25270:2:10;13045:71:2;;;25252:21:10;25309:2;25289:18;;;25282:30;25348:34;25328:18;;;25321:62;25419:11;25399:18;;;25392:39;25448:19;;13045:71:2;25068:405:10;13045:71:2;-1:-1:-1;;;;;13126:25:2;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;13126:46:2;;;;;;;;;;13187:41;;2745::10;;;13187::2;;2718:18:10;13187:41:2;;;;;;;12912:323;;;:::o;4248:321:0:-;4363:2;2888:17;2897:7;2888:8;:17::i;:::-;2880:43;;;;-1:-1:-1;;;2880:43:0;;18056:2:10;2880:43:0;;;18038:21:10;18095:2;18075:18;;;18068:30;18134:15;18114:18;;;18107:43;18167:18;;2880:43:0;17854:337:10;2880:43:0;4381:32:::1;4393:7;4402:2;4406:6;4381:11;:32::i;:::-;4482:6;4448:41;;:7;4456:2;4448:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;:41:::0;;;;::::1;;::::0;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;;;4537:25:::1;::::0;;25652::10;;;25693:18;;;25686:34;;;-1:-1:-1;;;;;4537:25:0;::::1;::::0;::::1;::::0;25625:18:10;4537:25:0::1;;;;;;;4248:321:::0;;;;:::o;4942:947:2:-;-1:-1:-1;;;;;5123:16:2;;5115:66;;;;-1:-1:-1;;;5115:66:2;;23853:2:10;5115:66:2;;;23835:21:10;23892:2;23872:18;;;23865:30;23931:34;23911:18;;;23904:62;24002:7;23982:18;;;23975:35;24027:19;;5115:66:2;23651:401:10;5115:66:2;719:10:7;5192:16:2;5256:21;5274:2;5256:17;:21::i;:::-;5233:44;;5287:24;5314:25;5332:6;5314:17;:25::i;:::-;5287:52;;5421:19;5443:13;;;;;;;;;;;-1:-1:-1;;;;;5443:19:2;;;;;;;;;;5480:21;;;;5472:76;;;;-1:-1:-1;;;5472:76:2;;24259:2:10;5472:76:2;;;24241:21:10;24298:2;24278:18;;;24271:30;24337:34;24317:18;;;24310:62;24408:12;24388:18;;;24381:40;24438:19;;5472:76:2;24057:406:10;5472:76:2;5582:9;:13;;;;;;;;;;;-1:-1:-1;;;;;5582:19:2;;;;;;;;;;5604:20;;;5582:42;;5644:17;;;;;;;:27;;5604:20;;5582:9;5644:27;;5604:20;;5644:27;:::i;:::-;;;;-1:-1:-1;;5687:46:2;;;25652:25:10;;;25708:2;25693:18;;25686:34;;;-1:-1:-1;;;;;5687:46:2;;;;;;;;;;;;;;25625:18:10;5687:46:2;;;;;;;5814:68;5845:8;5855:4;5861:2;5865;5869:6;5877:4;5814:30;:68::i;:::-;5105:784;;;;4942:947;;;;;:::o;8632:709::-;-1:-1:-1;;;;;8779:16:2;;8771:62;;;;-1:-1:-1;;;8771:62:2;;25933:2:10;8771:62:2;;;25915:21:10;25972:2;25952:18;;;25945:30;26011:34;25991:18;;;25984:62;26082:3;26062:18;;;26055:31;26103:19;;8771:62:2;25731:397:10;8771:62:2;719:10:7;8844:16:2;8908:21;8926:2;8908:17;:21::i;:::-;8885:44;;8939:24;8966:25;8984:6;8966:17;:25::i;:::-;8939:52;;9079:9;:13;;;;;;;;;;;-1:-1:-1;;;;;9079:17:2;;;;;;;;;:27;;9100:6;;9079:9;:27;;9100:6;;9079:27;:::i;:::-;;;;-1:-1:-1;;9121:52:2;;;25652:25:10;;;25708:2;25693:18;;25686:34;;;-1:-1:-1;;;;;9121:52:2;;;;9154:1;;9121:52;;;;;;25625:18:10;9121:52:2;;;;;;;9260:74;9291:8;9309:1;9313:2;9317;9321:6;9329:4;9260:30;:74::i;16268:792::-;-1:-1:-1;;;;;16500:13:2;;1465:19:6;:23;16496:558:2;;16535:79;;;;;-1:-1:-1;;;;;16535:43:2;;;;;:79;;16579:8;;16589:4;;16595:3;;16600:7;;16609:4;;16535:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16535:79:2;;;;;;;;-1:-1:-1;;16535:79:2;;;;;;;;;;;;:::i;:::-;;;16531:513;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16920:6;16913:14;;-1:-1:-1;;;16913:14:2;;;;;;;;:::i;16531:513::-;;;16967:62;;-1:-1:-1;;;16967:62:2;;28364:2:10;16967:62:2;;;28346:21:10;28403:2;28383:18;;;28376:30;28442:34;28422:18;;;28415:62;28513:22;28493:18;;;28486:50;28553:19;;16967:62:2;28162:416:10;16531:513:2;16693:60;;;16705:48;16693:60;16689:157;;16777:50;;-1:-1:-1;;;16777:50:2;;28785:2:10;16777:50:2;;;28767:21:10;28824:2;28804:18;;;28797:30;28863:34;28843:18;;;28836:62;28934:10;28914:18;;;28907:38;28962:19;;16777:50:2;28583:404:10;11833:943:2;-1:-1:-1;;;;;11980:18:2;;11972:66;;;;-1:-1:-1;;;11972:66:2;;29194:2:10;11972:66:2;;;29176:21:10;29233:2;29213:18;;;29206:30;29272:34;29252:18;;;29245:62;29343:5;29323:18;;;29316:33;29366:19;;11972:66:2;28992:399:10;11972:66:2;12070:7;:14;12056:3;:10;:28;12048:81;;;;-1:-1:-1;;;12048:81:2;;23444:2:10;12048:81:2;;;23426:21:10;23483:2;23463:18;;;23456:30;23522:34;23502:18;;;23495:62;23593:10;23573:18;;;23566:38;23621:19;;12048:81:2;23242:404:10;12048:81:2;12182:66;;;;;;;;;12140:16;12182:66;;;;719:10:7;;12259:364:2;12283:3;:10;12279:1;:14;12259:364;;;12314:10;12327:3;12331:1;12327:6;;;;;;;;:::i;:::-;;;;;;;12314:19;;12347:14;12364:7;12372:1;12364:10;;;;;;;;:::i;:::-;;;;;;;;;;;;12389:19;12411:13;;;;;;;;;;-1:-1:-1;;;;;12411:19:2;;;;;;;;;;;;12364:10;;-1:-1:-1;12452:21:2;;;;12444:70;;;;-1:-1:-1;;;12444:70:2;;29598:2:10;12444:70:2;;;29580:21:10;29637:2;29617:18;;;29610:30;29676:34;29656:18;;;29649:62;29747:6;29727:18;;;29720:34;29771:19;;12444:70:2;29396:400:10;12444:70:2;12556:9;:13;;;;;;;;;;;-1:-1:-1;;;;;12556:19:2;;;;;;;;;;12578:20;;12556:42;;12295:3;;;;:::i;:::-;;;;12259:364;;;;12676:1;-1:-1:-1;;;;;12638:55:2;12662:4;-1:-1:-1;;;;;12638:55:2;12652:8;-1:-1:-1;;;;;12638:55:2;;12680:3;12685:7;12638:55;;;;;;;:::i;:::-;;;;;;;;12704:65;;;;;;;;;12748:1;12704:65;;;6235:1115;10808:786;-1:-1:-1;;;;;10930:18:2;;10922:66;;;;-1:-1:-1;;;10922:66:2;;29194:2:10;10922:66:2;;;29176:21:10;29233:2;29213:18;;;29206:30;29272:34;29252:18;;;29245:62;29343:5;29323:18;;;29316:33;29366:19;;10922:66:2;28992:399:10;10922:66:2;719:10:7;10999:16:2;11063:21;11081:2;11063:17;:21::i;:::-;11040:44;;11094:24;11121:25;11139:6;11121:17;:25::i;:::-;11157:66;;;;;;;;;-1:-1:-1;11157:66:2;;;;11256:13;;;;;;;;;-1:-1:-1;;;;;11256:19:2;;;;;;;;11094:52;;-1:-1:-1;11293:21:2;;;;11285:70;;;;-1:-1:-1;;;11285:70:2;;29598:2:10;11285:70:2;;;29580:21:10;29637:2;29617:18;;;29610:30;29676:34;29656:18;;;29649:62;29747:6;29727:18;;;29720:34;29771:19;;11285:70:2;29396:400:10;11285:70:2;11389:9;:13;;;;;;;;;;;-1:-1:-1;;;;;11389:19:2;;;;;;;;;;;;11411:20;;;11389:42;;11457:54;;25652:25:10;;;25693:18;;;25686:34;;;11389:19:2;;11457:54;;;;;;25625:18:10;11457:54:2;;;;;;;11522:65;;;;;;;;;11566:1;11522:65;;;6235:1115;17066:193;17185:16;;;17199:1;17185:16;;;;;;;;;17132;;17160:22;;17185:16;;;;;;;;;;;;-1:-1:-1;17185:16:2;17160:41;;17222:7;17211:5;17217:1;17211:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;17247:5;17066:193;-1:-1:-1;;17066:193:2:o;15537:725::-;-1:-1:-1;;;;;15744:13:2;;1465:19:6;:23;15740:516:2;;15779:72;;;;;-1:-1:-1;;;;;15779:38:2;;;;;:72;;15818:8;;15828:4;;15834:2;;15838:6;;15846:4;;15779:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15779:72:2;;;;;;;;-1:-1:-1;;15779:72:2;;;;;;;;;;;;:::i;:::-;;;15775:471;;;;:::i;:::-;15900:55;;;15912:43;15900:55;15896:152;;15979:50;;-1:-1:-1;;;15979:50:2;;28785:2:10;15979:50:2;;;28767:21:10;28824:2;28804:18;;;28797:30;28863:34;28843:18;;;28836:62;28934:10;28914:18;;;28907:38;28962:19;;15979:50:2;28583:404:10;14:196;82:20;;-1:-1:-1;;;;;131:54:10;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:10:o;656:184::-;708:77;705:1;698:88;805:4;802:1;795:15;829:4;826:1;819:15;845:308;-1:-1:-1;;946:2:10;940:4;936:13;932:86;924:6;920:99;1085:6;1073:10;1070:22;1049:18;1037:10;1034:34;1031:62;1028:88;;;1096:18;;:::i;:::-;1132:2;1125:22;-1:-1:-1;;845:308:10:o;1158:615::-;1201:5;1254:3;1247:4;1239:6;1235:17;1231:27;1221:55;;1272:1;1269;1262:12;1221:55;1308:6;1295:20;1334:18;1330:2;1327:26;1324:52;;;1356:18;;:::i;:::-;1405:2;1399:9;1417:126;1537:4;-1:-1:-1;;1461:4:10;1457:2;1453:13;1449:86;1445:97;1437:6;1417:126;:::i;:::-;1567:2;1559:6;1552:18;1613:3;1606:4;1601:2;1593:6;1589:15;1585:26;1582:35;1579:55;;;1630:1;1627;1620:12;1579:55;1694:2;1687:4;1679:6;1675:17;1668:4;1660:6;1656:17;1643:54;1741:1;1717:15;;;1734:4;1713:26;1706:37;;;;1721:6;1158:615;-1:-1:-1;;;1158:615:10:o;1778:390::-;1856:6;1864;1917:2;1905:9;1896:7;1892:23;1888:32;1885:52;;;1933:1;1930;1923:12;1885:52;1969:9;1956:23;1946:33;;2030:2;2019:9;2015:18;2002:32;2057:18;2049:6;2046:30;2043:50;;;2089:1;2086;2079:12;2043:50;2112;2154:7;2145:6;2134:9;2130:22;2112:50;:::i;:::-;2102:60;;;1778:390;;;;;:::o;2173:177::-;2258:66;2251:5;2247:78;2240:5;2237:89;2227:117;;2340:1;2337;2330:12;2355:245;2413:6;2466:2;2454:9;2445:7;2441:23;2437:32;2434:52;;;2482:1;2479;2472:12;2434:52;2521:9;2508:23;2540:30;2564:5;2540:30;:::i;:::-;2589:5;2355:245;-1:-1:-1;;;2355:245:10:o;2797:322::-;2866:6;2919:2;2907:9;2898:7;2894:23;2890:32;2887:52;;;2935:1;2932;2925:12;2887:52;2975:9;2962:23;3008:18;3000:6;2997:30;2994:50;;;3040:1;3037;3030:12;2994:50;3063;3105:7;3096:6;3085:9;3081:22;3063:50;:::i;:::-;3053:60;2797:322;-1:-1:-1;;;;2797:322:10:o;3124:250::-;3209:1;3219:113;3233:6;3230:1;3227:13;3219:113;;;3309:11;;;3303:18;3290:11;;;3283:39;3255:2;3248:10;3219:113;;;-1:-1:-1;;3366:1:10;3348:16;;3341:27;3124:250::o;3379:330::-;3421:3;3459:5;3453:12;3486:6;3481:3;3474:19;3502:76;3571:6;3564:4;3559:3;3555:14;3548:4;3541:5;3537:16;3502:76;:::i;:::-;3623:2;3611:15;-1:-1:-1;;3607:88:10;3598:98;;;;3698:4;3594:109;;3379:330;-1:-1:-1;;3379:330:10:o;3714:220::-;3863:2;3852:9;3845:21;3826:4;3883:45;3924:2;3913:9;3909:18;3901:6;3883:45;:::i;3939:180::-;3998:6;4051:2;4039:9;4030:7;4026:23;4022:32;4019:52;;;4067:1;4064;4057:12;4019:52;-1:-1:-1;4090:23:10;;3939:180;-1:-1:-1;3939:180:10:o;4124:322::-;4201:6;4209;4217;4270:2;4258:9;4249:7;4245:23;4241:32;4238:52;;;4286:1;4283;4276:12;4238:52;4309:29;4328:9;4309:29;:::i;:::-;4299:39;4385:2;4370:18;;4357:32;;-1:-1:-1;4436:2:10;4421:18;;;4408:32;;4124:322;-1:-1:-1;;;4124:322:10:o;4451:183::-;4511:4;4544:18;4536:6;4533:30;4530:56;;;4566:18;;:::i;:::-;-1:-1:-1;4611:1:10;4607:14;4623:4;4603:25;;4451:183::o;4639:724::-;4693:5;4746:3;4739:4;4731:6;4727:17;4723:27;4713:55;;4764:1;4761;4754:12;4713:55;4800:6;4787:20;4826:4;4849:43;4889:2;4849:43;:::i;:::-;4921:2;4915:9;4933:31;4961:2;4953:6;4933:31;:::i;:::-;4999:18;;;5091:1;5087:10;;;;5075:23;;5071:32;;;5033:15;;;;-1:-1:-1;5115:15:10;;;5112:35;;;5143:1;5140;5133:12;5112:35;5179:2;5171:6;5167:15;5191:142;5207:6;5202:3;5199:15;5191:142;;;5273:17;;5261:30;;5311:12;;;;5224;;5191:142;;;-1:-1:-1;5351:6:10;4639:724;-1:-1:-1;;;;;;4639:724:10:o;5368:944::-;5522:6;5530;5538;5546;5554;5607:3;5595:9;5586:7;5582:23;5578:33;5575:53;;;5624:1;5621;5614:12;5575:53;5647:29;5666:9;5647:29;:::i;:::-;5637:39;;5695:38;5729:2;5718:9;5714:18;5695:38;:::i;:::-;5685:48;;5784:2;5773:9;5769:18;5756:32;5807:18;5848:2;5840:6;5837:14;5834:34;;;5864:1;5861;5854:12;5834:34;5887:61;5940:7;5931:6;5920:9;5916:22;5887:61;:::i;:::-;5877:71;;6001:2;5990:9;5986:18;5973:32;5957:48;;6030:2;6020:8;6017:16;6014:36;;;6046:1;6043;6036:12;6014:36;6069:63;6124:7;6113:8;6102:9;6098:24;6069:63;:::i;:::-;6059:73;;6185:3;6174:9;6170:19;6157:33;6141:49;;6215:2;6205:8;6202:16;6199:36;;;6231:1;6228;6221:12;6199:36;;6254:52;6298:7;6287:8;6276:9;6272:24;6254:52;:::i;:::-;6244:62;;;5368:944;;;;;;;;:::o;6317:1208::-;6435:6;6443;6496:2;6484:9;6475:7;6471:23;6467:32;6464:52;;;6512:1;6509;6502:12;6464:52;6552:9;6539:23;6581:18;6622:2;6614:6;6611:14;6608:34;;;6638:1;6635;6628:12;6608:34;6676:6;6665:9;6661:22;6651:32;;6721:7;6714:4;6710:2;6706:13;6702:27;6692:55;;6743:1;6740;6733:12;6692:55;6779:2;6766:16;6801:4;6824:43;6864:2;6824:43;:::i;:::-;6896:2;6890:9;6908:31;6936:2;6928:6;6908:31;:::i;:::-;6974:18;;;7062:1;7058:10;;;;7050:19;;7046:28;;;7008:15;;;;-1:-1:-1;7086:19:10;;;7083:39;;;7118:1;7115;7108:12;7083:39;7142:11;;;;7162:148;7178:6;7173:3;7170:15;7162:148;;;7244:23;7263:3;7244:23;:::i;:::-;7232:36;;7195:12;;;;7288;;;;7162:148;;;7329:6;-1:-1:-1;;7373:18:10;;7360:32;;-1:-1:-1;;7404:16:10;;;7401:36;;;7433:1;7430;7423:12;7401:36;;7456:63;7511:7;7500:8;7489:9;7485:24;7456:63;:::i;7530:435::-;7583:3;7621:5;7615:12;7648:6;7643:3;7636:19;7674:4;7703:2;7698:3;7694:12;7687:19;;7740:2;7733:5;7729:14;7761:1;7771:169;7785:6;7782:1;7779:13;7771:169;;;7846:13;;7834:26;;7880:12;;;;7915:15;;;;7807:1;7800:9;7771:169;;;-1:-1:-1;7956:3:10;;7530:435;-1:-1:-1;;;;;7530:435:10:o;7970:261::-;8149:2;8138:9;8131:21;8112:4;8169:56;8221:2;8210:9;8206:18;8198:6;8169:56;:::i;8236:367::-;8299:8;8309:6;8363:3;8356:4;8348:6;8344:17;8340:27;8330:55;;8381:1;8378;8371:12;8330:55;-1:-1:-1;8404:20:10;;8447:18;8436:30;;8433:50;;;8479:1;8476;8469:12;8433:50;8516:4;8508:6;8504:17;8492:29;;8576:3;8569:4;8559:6;8556:1;8552:14;8544:6;8540:27;8536:38;8533:47;8530:67;;;8593:1;8590;8583:12;8530:67;8236:367;;;;;:::o;8608:1088::-;8766:6;8774;8782;8790;8798;8806;8859:2;8847:9;8838:7;8834:23;8830:32;8827:52;;;8875:1;8872;8865:12;8827:52;8915:9;8902:23;8944:18;8985:2;8977:6;8974:14;8971:34;;;9001:1;8998;8991:12;8971:34;9040:70;9102:7;9093:6;9082:9;9078:22;9040:70;:::i;:::-;9129:8;;-1:-1:-1;9014:96:10;-1:-1:-1;9217:2:10;9202:18;;9189:32;;-1:-1:-1;9233:16:10;;;9230:36;;;9262:1;9259;9252:12;9230:36;9301:72;9365:7;9354:8;9343:9;9339:24;9301:72;:::i;:::-;9392:8;;-1:-1:-1;9275:98:10;-1:-1:-1;9480:2:10;9465:18;;9452:32;;-1:-1:-1;9496:16:10;;;9493:36;;;9525:1;9522;9515:12;9493:36;;9564:72;9628:7;9617:8;9606:9;9602:24;9564:72;:::i;:::-;8608:1088;;;;-1:-1:-1;8608:1088:10;;-1:-1:-1;8608:1088:10;;9655:8;;8608:1088;-1:-1:-1;;;8608:1088:10:o;9701:186::-;9760:6;9813:2;9801:9;9792:7;9788:23;9784:32;9781:52;;;9829:1;9826;9819:12;9781:52;9852:29;9871:9;9852:29;:::i;10100:712::-;10313:2;10365:21;;;10435:13;;10338:18;;;10457:22;;;10284:4;;10313:2;10498;;10516:18;;;;10557:15;;;10284:4;10600:186;10614:6;10611:1;10608:13;10600:186;;;10663:43;10702:3;10693:6;10687:13;9967:12;;9981:34;9963:53;9951:66;;10081:4;10070:16;;;10064:23;10060:2;10049:39;10033:14;;10026:63;9892:203;10663:43;10726:12;;;;10761:15;;;;10636:1;10629:9;10600:186;;;-1:-1:-1;10803:3:10;;10100:712;-1:-1:-1;;;;;;;10100:712:10:o;10817:773::-;10939:6;10947;10955;10963;11016:2;11004:9;10995:7;10991:23;10987:32;10984:52;;;11032:1;11029;11022:12;10984:52;11072:9;11059:23;11101:18;11142:2;11134:6;11131:14;11128:34;;;11158:1;11155;11148:12;11128:34;11197:70;11259:7;11250:6;11239:9;11235:22;11197:70;:::i;:::-;11286:8;;-1:-1:-1;11171:96:10;-1:-1:-1;11374:2:10;11359:18;;11346:32;;-1:-1:-1;11390:16:10;;;11387:36;;;11419:1;11416;11409:12;11387:36;;11458:72;11522:7;11511:8;11500:9;11496:24;11458:72;:::i;:::-;10817:773;;;;-1:-1:-1;11549:8:10;-1:-1:-1;;;;10817:773:10:o;11826:347::-;11891:6;11899;11952:2;11940:9;11931:7;11927:23;11923:32;11920:52;;;11968:1;11965;11958:12;11920:52;11991:29;12010:9;11991:29;:::i;:::-;11981:39;;12070:2;12059:9;12055:18;12042:32;12117:5;12110:13;12103:21;12096:5;12093:32;12083:60;;12139:1;12136;12129:12;12083:60;12162:5;12152:15;;;11826:347;;;;;:::o;12178:248::-;12246:6;12254;12307:2;12295:9;12286:7;12282:23;12278:32;12275:52;;;12323:1;12320;12313:12;12275:52;-1:-1:-1;;12346:23:10;;;12416:2;12401:18;;;12388:32;;-1:-1:-1;12178:248:10:o;12431:350::-;9967:12;;9981:34;9963:53;9951:66;;10081:4;10070:16;;;10064:23;10060:2;10049:39;10033:14;;;10026:63;12710:2;12705;12694:9;12690:18;12683:30;12613:4;12730:45;12771:2;12760:9;12756:18;12748:6;12730:45;:::i;12786:260::-;12854:6;12862;12915:2;12903:9;12894:7;12890:23;12886:32;12883:52;;;12931:1;12928;12921:12;12883:52;12954:29;12973:9;12954:29;:::i;:::-;12944:39;;13002:38;13036:2;13025:9;13021:18;13002:38;:::i;:::-;12992:48;;12786:260;;;;;:::o;13051:607::-;13155:6;13163;13171;13179;13187;13240:3;13228:9;13219:7;13215:23;13211:33;13208:53;;;13257:1;13254;13247:12;13208:53;13280:29;13299:9;13280:29;:::i;:::-;13270:39;;13328:38;13362:2;13351:9;13347:18;13328:38;:::i;:::-;13318:48;;13413:2;13402:9;13398:18;13385:32;13375:42;;13464:2;13453:9;13449:18;13436:32;13426:42;;13519:3;13508:9;13504:19;13491:33;13547:18;13539:6;13536:30;13533:50;;;13579:1;13576;13569:12;13533:50;13602;13644:7;13635:6;13624:9;13620:22;13602:50;:::i;14762:437::-;14841:1;14837:12;;;;14884;;;14905:61;;14959:4;14951:6;14947:17;14937:27;;14905:61;15012:2;15004:6;15001:14;14981:18;14978:38;14975:218;;15049:77;15046:1;15039:88;15150:4;15147:1;15140:15;15178:4;15175:1;15168:15;15330:545;15432:2;15427:3;15424:11;15421:448;;;15468:1;15493:5;15489:2;15482:17;15538:4;15534:2;15524:19;15608:2;15596:10;15592:19;15589:1;15585:27;15579:4;15575:38;15644:4;15632:10;15629:20;15626:47;;;-1:-1:-1;15667:4:10;15626:47;15722:2;15717:3;15713:12;15710:1;15706:20;15700:4;15696:31;15686:41;;15777:82;15795:2;15788:5;15785:13;15777:82;;;15840:17;;;15821:1;15810:13;15777:82;;16111:1471;16237:3;16231:10;16264:18;16256:6;16253:30;16250:56;;;16286:18;;:::i;:::-;16315:97;16405:6;16365:38;16397:4;16391:11;16365:38;:::i;:::-;16359:4;16315:97;:::i;:::-;16467:4;;16531:2;16520:14;;16548:1;16543:782;;;;17369:1;17386:6;17383:89;;;-1:-1:-1;17438:19:10;;;17432:26;17383:89;-1:-1:-1;;16008:1:10;16004:11;;;16000:84;15996:89;15986:100;16092:1;16088:11;;;15983:117;17485:81;;16513:1063;;16543:782;15277:1;15270:14;;;15314:4;15301:18;;-1:-1:-1;;16579:79:10;;;16756:236;16770:7;16767:1;16764:14;16756:236;;;16859:19;;;16853:26;16838:42;;16951:27;;;;16919:1;16907:14;;;;16786:19;;16756:236;;;16760:3;17020:6;17011:7;17008:19;17005:261;;;17081:19;;;17075:26;-1:-1:-1;;17164:1:10;17160:14;;;17176:3;17156:24;17152:97;17148:102;17133:118;17118:134;;17005:261;-1:-1:-1;;;;;17312:1:10;17296:14;;;17292:22;17279:36;;-1:-1:-1;16111:1471:10:o;18196:1273::-;18473:3;18511:6;18505:13;18537:4;18550:64;18607:6;18602:3;18597:2;18589:6;18585:15;18550:64;:::i;:::-;18645:6;18640:3;18636:16;18623:29;;18675:3;18668:5;18661:18;18698:1;18719;18752:6;18746:13;18784:36;18810:9;18784:36;:::i;:::-;18836:18;;;18863:217;;;;19094:1;19089:355;;;;18829:615;;18863:217;-1:-1:-1;;18911:9:10;18907:82;18902:2;18895:5;18891:14;18884:106;19067:2;19053:8;19046:16;19039:24;19029:8;19025:39;19018:5;19014:51;19010:60;19003:67;;18863:217;;19089:355;19120:6;19117:1;19110:17;19168:2;19165:1;19155:16;19193:1;19207:178;19221:8;19218:1;19215:15;19207:178;;;19312:14;;19292:13;;;19288:22;;19281:46;19355:16;;;;19238:10;;19207:178;;;19211:3;;19431:2;19420:8;19413:5;19409:20;19405:29;19398:36;;18829:615;-1:-1:-1;19460:3:10;;18196:1273;-1:-1:-1;;;;;;;;;18196:1273:10:o;20646:184::-;20698:77;20695:1;20688:88;20795:4;20792:1;20785:15;20819:4;20816:1;20809:15;20835:184;20887:77;20884:1;20877:88;20984:4;20981:1;20974:15;21008:4;21005:1;20998:15;21024:195;21063:3;-1:-1:-1;;21087:5:10;21084:77;21081:103;;21164:18;;:::i;:::-;-1:-1:-1;21211:1:10;21200:13;;21024:195::o;23040:197::-;23108:34;23162:10;;;23174;;;23158:27;;23197:11;;;23194:37;;;23211:18;;:::i;:::-;23194:37;23040:197;;;;:::o;24468:125::-;24533:9;;;24554:10;;;24551:36;;;24567:18;;:::i;24598:465::-;24855:2;24844:9;24837:21;24818:4;24881:56;24933:2;24922:9;24918:18;24910:6;24881:56;:::i;:::-;24985:9;24977:6;24973:22;24968:2;24957:9;24953:18;24946:50;25013:44;25050:6;25042;25013:44;:::i;:::-;25005:52;24598:465;-1:-1:-1;;;;;24598:465:10:o;26133:850::-;26455:4;-1:-1:-1;;;;;26565:2:10;26557:6;26553:15;26542:9;26535:34;26617:2;26609:6;26605:15;26600:2;26589:9;26585:18;26578:43;;26657:3;26652:2;26641:9;26637:18;26630:31;26684:57;26736:3;26725:9;26721:19;26713:6;26684:57;:::i;:::-;26789:9;26781:6;26777:22;26772:2;26761:9;26757:18;26750:50;26823:44;26860:6;26852;26823:44;:::i;:::-;26809:58;;26916:9;26908:6;26904:22;26898:3;26887:9;26883:19;26876:51;26944:33;26970:6;26962;26944:33;:::i;:::-;26936:41;26133:850;-1:-1:-1;;;;;;;;26133:850:10:o;26988:249::-;27057:6;27110:2;27098:9;27089:7;27085:23;27081:32;27078:52;;;27126:1;27123;27116:12;27078:52;27158:9;27152:16;27177:30;27201:5;27177:30;:::i;27242:179::-;27277:3;27319:1;27301:16;27298:23;27295:120;;;27365:1;27362;27359;27344:23;-1:-1:-1;27402:1:10;27396:8;27391:3;27387:18;27295:120;27242:179;:::o;27426:731::-;27465:3;27507:4;27489:16;27486:26;27483:39;;;27426:731;:::o;27483:39::-;27549:2;27543:9;27571:66;27692:2;27674:16;27670:25;27667:1;27661:4;27646:50;27725:4;27719:11;27749:16;27784:18;27855:2;27848:4;27840:6;27836:17;27833:25;27828:2;27820:6;27817:14;27814:45;27811:58;;;27862:5;;;;;27426:731;:::o;27811:58::-;27899:6;27893:4;27889:17;27878:28;;27935:3;27929:10;27962:2;27954:6;27951:14;27948:27;;;27968:5;;;;;;27426:731;:::o;27948:27::-;28052:2;28033:16;28027:4;28023:27;28019:36;28012:4;28003:6;27998:3;27994:16;27990:27;27987:69;27984:82;;;28059:5;;;;;;27426:731;:::o;27984:82::-;28075:57;28126:4;28117:6;28109;28105:19;28101:30;28095:4;28075:57;:::i;:::-;-1:-1:-1;28148:3:10;;27426:731;-1:-1:-1;;;;;27426:731:10:o;29801:584::-;30023:4;-1:-1:-1;;;;;30133:2:10;30125:6;30121:15;30110:9;30103:34;30185:2;30177:6;30173:15;30168:2;30157:9;30153:18;30146:43;;30225:6;30220:2;30209:9;30205:18;30198:34;30268:6;30263:2;30252:9;30248:18;30241:34;30312:3;30306;30295:9;30291:19;30284:32;30333:46;30374:3;30363:9;30359:19;30351:6;30333:46;:::i;:::-;30325:54;29801:584;-1:-1:-1;;;;;;;29801:584:10:o

Swarm Source

ipfs://0a50a15f1917a16f7d7abc611f5f48111b4ff3809d845d6a35dd61e83404c1c6
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.