ETH Price: $2,525.96 (-0.76%)

Token

Digital New Union (DNU)
 

Overview

Max Total Supply

0 DNU

Holders

112

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
songfugui.eth
Balance
1 DNU
0x4e697d7f95129e10c8f1ccc47a05205f00561937
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:
Dnu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-16
*/

// Sources flattened with hardhat v2.8.2 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]


// 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 @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

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

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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

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


// File @openzeppelin/contracts/utils/[email protected]


// 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 @openzeppelin/contracts/utils/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

/**
 * @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 @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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 @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)

pragma solidity ^0.8.0;




/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

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

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}


// File contracts/Dnu.sol

pragma solidity 0.8.4;




/**
 *@dev DNU NFT
 */
contract Dnu is ERC721, Ownable, AccessControl {
    using Strings for uint256;

    // Member role
    bytes32 public constant MEMBER_ROLE = keccak256("MEMBER_ROLE");

    // Counter of NFT
    uint256 public tokenCounter;

    // The last IPFS Folder URI of NFT , like ipfs://xyz/
    string public lastBaseURI;

    // Mapping of (tokenId,tokenURI)
    mapping(uint256 => string) private _tokenURIs;

    // Have minted a NFT
    mapping(address => bool) private _minted;

    /**
     *@dev Initializes the contract by setting a `name` and a `symbol` to the token collection
     *@param name NFT's name
     *@param symbol NFT's symbol
     */
    constructor(string memory name, string memory symbol) ERC721(name, symbol) {
        tokenCounter = 0;
        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
    }

    /**
     *@dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721, AccessControl)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    /**
     *@dev Set the last IPFS Folder URI of NFT
     *@param uri The URI of IPFS Folder of NFT
     */
    function setlastBaseURI(string memory uri) public onlyOwner {
        require(bytes(uri).length > 0 ,"NFT's URI should not be null");
        lastBaseURI = uri;
    }

    /**
     *@dev Grant the Role to members
     *@param members the array of members' address
     */
    function addMembers(address[] memory members) public onlyOwner {
        for (uint256 i = 0; i < members.length; ++i) {
            _setupRole(MEMBER_ROLE, members[i]);
        }
    }

    /**
     *@dev Check the Role
     *@param member the address of members
     *@return have the member role
     */
    function checkMembers(address member) public view returns (bool) {
        return hasRole(MEMBER_ROLE, member);
    }

    /**
     *@dev Check the mined
     *@param member the address of members
     *@return have the member role
     */
    function checkMined(address member) public view returns (bool) {
        return _minted[member];
    }
    

    /**
     *@dev mint an basis NFT
     */
    function mint() public onlyRole(MEMBER_ROLE) {
        require(!_minted[msg.sender], "You have minted a NFT or Not in the whitelist");
        _safeMint(msg.sender, tokenCounter);
        _setTokenURI(tokenCounter);

        tokenCounter++;
        _minted[msg.sender] = true;
    }

    /**
     *@dev mint more basis NFT by Owner
     */
    function mintAdmin() public onlyOwner {
        _safeMint(msg.sender, tokenCounter);
        _setTokenURI(tokenCounter);

        tokenCounter++;
    }
    /**
     *@dev set the tokenURI
     *@param tokenId Id of NFT
     */
    function _setTokenURI(uint256 tokenId)
        internal
        virtual
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI set of nonexistent token"
        ); // Checks if the tokenId exists
         _tokenURIs[tokenId] = bytes(lastBaseURI).length > 0 ? string(abi.encodePacked(lastBaseURI, tokenId.toString())) : "";
    }

    /**
     *@dev check the tokenURI by tokenId
     *@param tokenId Id of NFT
     *@return the tokenURI by tokenId
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI set of nonexistent token"
        );
        return _tokenURIs[tokenId];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEMBER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"members","type":"address[]"}],"name":"addMembers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"member","type":"address"}],"name":"checkMembers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"member","type":"address"}],"name":"checkMined","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"uri","type":"string"}],"name":"setlastBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200480438038062004804833981810160405281019062000037919062000415565b8181816000908051906020019062000051929190620002f3565b5080600190805190602001906200006a929190620002f3565b5050506200008d62000081620000b260201b60201c565b620000ba60201b60201c565b6000600881905550620000aa6000801b336200018060201b60201c565b5050620005f8565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200019282826200019660201b60201c565b5050565b620001a882826200028860201b60201c565b620002845760016007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000229620000b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b82805462000301906200051d565b90600052602060002090601f01602090048101928262000325576000855562000371565b82601f106200034057805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037057825182559160200191906001019062000353565b5b50905062000380919062000384565b5090565b5b808211156200039f57600081600090555060010162000385565b5090565b6000620003ba620003b484620004b1565b62000488565b905082815260208101848484011115620003d357600080fd5b620003e0848285620004e7565b509392505050565b600082601f830112620003fa57600080fd5b81516200040c848260208601620003a3565b91505092915050565b600080604083850312156200042957600080fd5b600083015167ffffffffffffffff8111156200044457600080fd5b6200045285828601620003e8565b925050602083015167ffffffffffffffff8111156200047057600080fd5b6200047e85828601620003e8565b9150509250929050565b600062000494620004a7565b9050620004a2828262000553565b919050565b6000604051905090565b600067ffffffffffffffff821115620004cf57620004ce620005b8565b5b620004da82620005e7565b9050602081019050919050565b60005b8381101562000507578082015181840152602081019050620004ea565b8381111562000517576000848401525b50505050565b600060028204905060018216806200053657607f821691505b602082108114156200054d576200054c62000589565b5b50919050565b6200055e82620005e7565b810181811067ffffffffffffffff8211171562000580576200057f620005b8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6141fc80620006086000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f578063a22cb465116100a2578063d547741f11610071578063d547741f14610556578063e985e9c514610572578063ebd757a4146105a2578063f2fde38b146105d2576101e5565b8063a22cb465146104d0578063b88d4fde146104ec578063c87b56dd14610508578063d082e38114610538576101e5565b806391d14854116100de57806391d148541461044657806395d89b4114610476578063a10f469e14610494578063a217fddf146104b2576101e5565b8063715018a6146103f85780637719a990146104025780637e01afc31461041e5780638da5cb5b14610428576101e5565b8063248a9ca31161018757806342842e0e1161015657806342842e0e146103605780636352211e1461037c5780636f4d469b146103ac57806370a08231146103c8576101e5565b8063248a9ca3146102c85780632f2ff15d146102f857806335809f4b1461031457806336568abe14610344576101e5565b8063095ea7b3116101c3578063095ea7b3146102685780631249c58b14610284578063173021091461028e57806323b872dd146102ac576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612e31565b6105ee565b6040516102119190613412565b60405180910390f35b610222610600565b60405161022f9190613448565b60405180910390f35b610252600480360381019061024d9190612ec4565b610692565b60405161025f91906133ab565b60405180910390f35b610282600480360381019061027d9190612d4f565b610717565b005b61028c61082f565b005b610296610978565b6040516102a39190613448565b60405180910390f35b6102c660048036038101906102c19190612c49565b610a06565b005b6102e260048036038101906102dd9190612dcc565b610a66565b6040516102ef919061342d565b60405180910390f35b610312600480360381019061030d9190612df5565b610a86565b005b61032e60048036038101906103299190612be4565b610aaf565b60405161033b9190613412565b60405180910390f35b61035e60048036038101906103599190612df5565b610b05565b005b61037a60048036038101906103759190612c49565b610b88565b005b61039660048036038101906103919190612ec4565b610ba8565b6040516103a391906133ab565b60405180910390f35b6103c660048036038101906103c19190612d8b565b610c5a565b005b6103e260048036038101906103dd9190612be4565b610d61565b6040516103ef91906136ea565b60405180910390f35b610400610e19565b005b61041c60048036038101906104179190612e83565b610ea1565b005b610426610f7b565b005b610430611028565b60405161043d91906133ab565b60405180910390f35b610460600480360381019061045b9190612df5565b611052565b60405161046d9190613412565b60405180910390f35b61047e6110bd565b60405161048b9190613448565b60405180910390f35b61049c61114f565b6040516104a9919061342d565b60405180910390f35b6104ba611173565b6040516104c7919061342d565b60405180910390f35b6104ea60048036038101906104e59190612d13565b61117a565b005b61050660048036038101906105019190612c98565b611190565b005b610522600480360381019061051d9190612ec4565b6111f2565b60405161052f9190613448565b60405180910390f35b6105406112df565b60405161054d91906136ea565b60405180910390f35b610570600480360381019061056b9190612df5565b6112e5565b005b61058c60048036038101906105879190612c0d565b61130e565b6040516105999190613412565b60405180910390f35b6105bc60048036038101906105b79190612be4565b6113a2565b6040516105c99190613412565b60405180910390f35b6105ec60048036038101906105e79190612be4565b6113d5565b005b60006105f9826114cd565b9050919050565b60606000805461060f90613a0f565b80601f016020809104026020016040519081016040528092919081815260200182805461063b90613a0f565b80156106885780601f1061065d57610100808354040283529160200191610688565b820191906000526020600020905b81548152906001019060200180831161066b57829003601f168201915b5050505050905090565b600061069d82611547565b6106dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d3906135ea565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072282610ba8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a9061366a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107b26115b3565b73ffffffffffffffffffffffffffffffffffffffff1614806107e157506107e0816107db6115b3565b61130e565b5b610820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108179061356a565b60405180910390fd5b61082a83836115bb565b505050565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d46366108618161085c6115b3565b611674565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e5906136aa565b60405180910390fd5b6108fa33600854611711565b61090560085461172f565b6008600081548092919061091890613a72565b91905055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6009805461098590613a0f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190613a0f565b80156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b505050505081565b610a17610a116115b3565b826117f8565b610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d9061368a565b60405180910390fd5b610a618383836118d6565b505050565b600060076000838152602001908152602001600020600101549050919050565b610a8f82610a66565b610aa081610a9b6115b3565b611674565b610aaa8383611b32565b505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610b0d6115b3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906136ca565b60405180910390fd5b610b848282611c13565b5050565b610ba383838360405180602001604052806000815250611190565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c48906135aa565b60405180910390fd5b80915050919050565b610c626115b3565b73ffffffffffffffffffffffffffffffffffffffff16610c80611028565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061362a565b60405180910390fd5b60005b8151811015610d5d57610d4c7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d4636838381518110610d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611cf5565b80610d5690613a72565b9050610cd9565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc99061358a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e216115b3565b73ffffffffffffffffffffffffffffffffffffffff16610e3f611028565b73ffffffffffffffffffffffffffffffffffffffff1614610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c9061362a565b60405180910390fd5b610e9f6000611d03565b565b610ea96115b3565b73ffffffffffffffffffffffffffffffffffffffff16610ec7611028565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f149061362a565b60405180910390fd5b6000815111610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f589061354a565b60405180910390fd5b8060099080519060200190610f7792919061295d565b5050565b610f836115b3565b73ffffffffffffffffffffffffffffffffffffffff16610fa1611028565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee9061362a565b60405180910390fd5b61100333600854611711565b61100e60085461172f565b6008600081548092919061102190613a72565b9190505550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600180546110cc90613a0f565b80601f01602080910402602001604051908101604052809291908181526020018280546110f890613a0f565b80156111455780601f1061111a57610100808354040283529160200191611145565b820191906000526020600020905b81548152906001019060200180831161112857829003601f168201915b5050505050905090565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d463681565b6000801b81565b61118c6111856115b3565b8383611dc9565b5050565b6111a161119b6115b3565b836117f8565b6111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061368a565b60405180910390fd5b6111ec84848484611f36565b50505050565b60606111fd82611547565b61123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112339061360a565b60405180910390fd5b600a6000838152602001908152602001600020805461125a90613a0f565b80601f016020809104026020016040519081016040528092919081815260200182805461128690613a0f565b80156112d35780601f106112a8576101008083540402835291602001916112d3565b820191906000526020600020905b8154815290600101906020018083116112b657829003601f168201915b50505050509050919050565b60085481565b6112ee82610a66565b6112ff816112fa6115b3565b611674565b6113098383611c13565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006113ce7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d463683611052565b9050919050565b6113dd6115b3565b73ffffffffffffffffffffffffffffffffffffffff166113fb611028565b73ffffffffffffffffffffffffffffffffffffffff1614611451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114489061362a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b8906134aa565b60405180910390fd5b6114ca81611d03565b50565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611540575061153f82611f92565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661162e83610ba8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61167e8282611052565b61170d576116a38173ffffffffffffffffffffffffffffffffffffffff166014612074565b6116b18360001c6020612074565b6040516020016116c2929190613371565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117049190613448565b60405180910390fd5b5050565b61172b82826040518060200160405280600081525061236e565b5050565b61173881611547565b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e9061360a565b60405180910390fd5b60006009805461178690613a0f565b9050116117a257604051806020016040528060008152506117ce565b60096117ad826123c9565b6040516020016117be92919061334d565b6040516020818303038152906040525b600a600083815260200190815260200160002090805190602001906117f492919061295d565b5050565b600061180382611547565b611842576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118399061352a565b60405180910390fd5b600061184d83610ba8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118bc57508373ffffffffffffffffffffffffffffffffffffffff166118a484610692565b73ffffffffffffffffffffffffffffffffffffffff16145b806118cd57506118cc818561130e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118f682610ba8565b73ffffffffffffffffffffffffffffffffffffffff161461194c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119439061364a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b3906134ea565b60405180910390fd5b6119c7838383612576565b6119d26000826115bb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2291906138f1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a799190613810565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b3c8282611052565b611c0f5760016007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611bb46115b3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611c1d8282611052565b15611cf15760006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c966115b3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611cff8282611b32565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f9061350a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f299190613412565b60405180910390a3505050565b611f418484846118d6565b611f4d8484848461257b565b611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f839061348a565b60405180910390fd5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061205d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061206d575061206c82612712565b5b9050919050565b6060600060028360026120879190613897565b6120919190613810565b67ffffffffffffffff8111156120d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121025781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612160577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106121ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261222a9190613897565b6122349190613810565b90505b6001811115612320577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061229c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106122d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612319906139e5565b9050612237565b5060008414612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b9061346a565b60405180910390fd5b8091505092915050565b612378838361277c565b612385600084848461257b565b6123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb9061348a565b60405180910390fd5b505050565b60606000821415612411576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612571565b600082905060005b6000821461244357808061242c90613a72565b915050600a8261243c9190613866565b9150612419565b60008167ffffffffffffffff811115612485577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124b75781602001600182028036833780820191505090505b5090505b6000851461256a576001826124d091906138f1565b9150600a856124df9190613abb565b60306124eb9190613810565b60f81b818381518110612527577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125639190613866565b94506124bb565b8093505050505b919050565b505050565b600061259c8473ffffffffffffffffffffffffffffffffffffffff1661294a565b15612705578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125c56115b3565b8786866040518563ffffffff1660e01b81526004016125e794939291906133c6565b602060405180830381600087803b15801561260157600080fd5b505af192505050801561263257506040513d601f19601f8201168201806040525081019061262f9190612e5a565b60015b6126b5573d8060008114612662576040519150601f19603f3d011682016040523d82523d6000602084013e612667565b606091505b506000815114156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a49061348a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061270a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e3906135ca565b60405180910390fd5b6127f581611547565b15612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906134ca565b60405180910390fd5b61284160008383612576565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128919190613810565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461296990613a0f565b90600052602060002090601f01602090048101928261298b57600085556129d2565b82601f106129a457805160ff19168380011785556129d2565b828001600101855582156129d2579182015b828111156129d15782518255916020019190600101906129b6565b5b5090506129df91906129e3565b5090565b5b808211156129fc5760008160009055506001016129e4565b5090565b6000612a13612a0e8461372a565b613705565b90508083825260208201905082856020860282011115612a3257600080fd5b60005b85811015612a625781612a488882612ae8565b845260208401935060208301925050600181019050612a35565b5050509392505050565b6000612a7f612a7a84613756565b613705565b905082815260208101848484011115612a9757600080fd5b612aa28482856139a3565b509392505050565b6000612abd612ab884613787565b613705565b905082815260208101848484011115612ad557600080fd5b612ae08482856139a3565b509392505050565b600081359050612af781614153565b92915050565b600082601f830112612b0e57600080fd5b8135612b1e848260208601612a00565b91505092915050565b600081359050612b368161416a565b92915050565b600081359050612b4b81614181565b92915050565b600081359050612b6081614198565b92915050565b600081519050612b7581614198565b92915050565b600082601f830112612b8c57600080fd5b8135612b9c848260208601612a6c565b91505092915050565b600082601f830112612bb657600080fd5b8135612bc6848260208601612aaa565b91505092915050565b600081359050612bde816141af565b92915050565b600060208284031215612bf657600080fd5b6000612c0484828501612ae8565b91505092915050565b60008060408385031215612c2057600080fd5b6000612c2e85828601612ae8565b9250506020612c3f85828601612ae8565b9150509250929050565b600080600060608486031215612c5e57600080fd5b6000612c6c86828701612ae8565b9350506020612c7d86828701612ae8565b9250506040612c8e86828701612bcf565b9150509250925092565b60008060008060808587031215612cae57600080fd5b6000612cbc87828801612ae8565b9450506020612ccd87828801612ae8565b9350506040612cde87828801612bcf565b925050606085013567ffffffffffffffff811115612cfb57600080fd5b612d0787828801612b7b565b91505092959194509250565b60008060408385031215612d2657600080fd5b6000612d3485828601612ae8565b9250506020612d4585828601612b27565b9150509250929050565b60008060408385031215612d6257600080fd5b6000612d7085828601612ae8565b9250506020612d8185828601612bcf565b9150509250929050565b600060208284031215612d9d57600080fd5b600082013567ffffffffffffffff811115612db757600080fd5b612dc384828501612afd565b91505092915050565b600060208284031215612dde57600080fd5b6000612dec84828501612b3c565b91505092915050565b60008060408385031215612e0857600080fd5b6000612e1685828601612b3c565b9250506020612e2785828601612ae8565b9150509250929050565b600060208284031215612e4357600080fd5b6000612e5184828501612b51565b91505092915050565b600060208284031215612e6c57600080fd5b6000612e7a84828501612b66565b91505092915050565b600060208284031215612e9557600080fd5b600082013567ffffffffffffffff811115612eaf57600080fd5b612ebb84828501612ba5565b91505092915050565b600060208284031215612ed657600080fd5b6000612ee484828501612bcf565b91505092915050565b612ef681613925565b82525050565b612f0581613937565b82525050565b612f1481613943565b82525050565b6000612f25826137cd565b612f2f81856137e3565b9350612f3f8185602086016139b2565b612f4881613ba8565b840191505092915050565b6000612f5e826137d8565b612f6881856137f4565b9350612f788185602086016139b2565b612f8181613ba8565b840191505092915050565b6000612f97826137d8565b612fa18185613805565b9350612fb18185602086016139b2565b80840191505092915050565b60008154612fca81613a0f565b612fd48186613805565b94506001821660008114612fef576001811461300057613033565b60ff19831686528186019350613033565b613009856137b8565b60005b8381101561302b5781548189015260018201915060208101905061300c565b838801955050505b50505092915050565b60006130496020836137f4565b915061305482613bb9565b602082019050919050565b600061306c6032836137f4565b915061307782613be2565b604082019050919050565b600061308f6026836137f4565b915061309a82613c31565b604082019050919050565b60006130b2601c836137f4565b91506130bd82613c80565b602082019050919050565b60006130d56024836137f4565b91506130e082613ca9565b604082019050919050565b60006130f86019836137f4565b915061310382613cf8565b602082019050919050565b600061311b602c836137f4565b915061312682613d21565b604082019050919050565b600061313e601c836137f4565b915061314982613d70565b602082019050919050565b60006131616038836137f4565b915061316c82613d99565b604082019050919050565b6000613184602a836137f4565b915061318f82613de8565b604082019050919050565b60006131a76029836137f4565b91506131b282613e37565b604082019050919050565b60006131ca6020836137f4565b91506131d582613e86565b602082019050919050565b60006131ed602c836137f4565b91506131f882613eaf565b604082019050919050565b6000613210602c836137f4565b915061321b82613efe565b604082019050919050565b60006132336020836137f4565b915061323e82613f4d565b602082019050919050565b60006132566029836137f4565b915061326182613f76565b604082019050919050565b60006132796021836137f4565b915061328482613fc5565b604082019050919050565b600061329c6031836137f4565b91506132a782614014565b604082019050919050565b60006132bf601783613805565b91506132ca82614063565b601782019050919050565b60006132e2602d836137f4565b91506132ed8261408c565b604082019050919050565b6000613305601183613805565b9150613310826140db565b601182019050919050565b6000613328602f836137f4565b915061333382614104565b604082019050919050565b61334781613999565b82525050565b60006133598285612fbd565b91506133658284612f8c565b91508190509392505050565b600061337c826132b2565b91506133888285612f8c565b9150613393826132f8565b915061339f8284612f8c565b91508190509392505050565b60006020820190506133c06000830184612eed565b92915050565b60006080820190506133db6000830187612eed565b6133e86020830186612eed565b6133f5604083018561333e565b81810360608301526134078184612f1a565b905095945050505050565b60006020820190506134276000830184612efc565b92915050565b60006020820190506134426000830184612f0b565b92915050565b600060208201905081810360008301526134628184612f53565b905092915050565b600060208201905081810360008301526134838161303c565b9050919050565b600060208201905081810360008301526134a38161305f565b9050919050565b600060208201905081810360008301526134c381613082565b9050919050565b600060208201905081810360008301526134e3816130a5565b9050919050565b60006020820190508181036000830152613503816130c8565b9050919050565b60006020820190508181036000830152613523816130eb565b9050919050565b600060208201905081810360008301526135438161310e565b9050919050565b6000602082019050818103600083015261356381613131565b9050919050565b6000602082019050818103600083015261358381613154565b9050919050565b600060208201905081810360008301526135a381613177565b9050919050565b600060208201905081810360008301526135c38161319a565b9050919050565b600060208201905081810360008301526135e3816131bd565b9050919050565b60006020820190508181036000830152613603816131e0565b9050919050565b6000602082019050818103600083015261362381613203565b9050919050565b6000602082019050818103600083015261364381613226565b9050919050565b6000602082019050818103600083015261366381613249565b9050919050565b600060208201905081810360008301526136838161326c565b9050919050565b600060208201905081810360008301526136a38161328f565b9050919050565b600060208201905081810360008301526136c3816132d5565b9050919050565b600060208201905081810360008301526136e38161331b565b9050919050565b60006020820190506136ff600083018461333e565b92915050565b600061370f613720565b905061371b8282613a41565b919050565b6000604051905090565b600067ffffffffffffffff82111561374557613744613b79565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561377157613770613b79565b5b61377a82613ba8565b9050602081019050919050565b600067ffffffffffffffff8211156137a2576137a1613b79565b5b6137ab82613ba8565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061381b82613999565b915061382683613999565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385b5761385a613aec565b5b828201905092915050565b600061387182613999565b915061387c83613999565b92508261388c5761388b613b1b565b5b828204905092915050565b60006138a282613999565b91506138ad83613999565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138e6576138e5613aec565b5b828202905092915050565b60006138fc82613999565b915061390783613999565b92508282101561391a57613919613aec565b5b828203905092915050565b600061393082613979565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139d05780820151818401526020810190506139b5565b838111156139df576000848401525b50505050565b60006139f082613999565b91506000821415613a0457613a03613aec565b5b600182039050919050565b60006002820490506001821680613a2757607f821691505b60208210811415613a3b57613a3a613b4a565b5b50919050565b613a4a82613ba8565b810181811067ffffffffffffffff82111715613a6957613a68613b79565b5b80604052505050565b6000613a7d82613999565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ab057613aaf613aec565b5b600182019050919050565b6000613ac682613999565b9150613ad183613999565b925082613ae157613ae0613b1b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e46542773205552492073686f756c64206e6f74206265206e756c6c00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f596f752068617665206d696e7465642061204e4654206f72204e6f7420696e2060008201527f7468652077686974656c69737400000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61415c81613925565b811461416757600080fd5b50565b61417381613937565b811461417e57600080fd5b50565b61418a81613943565b811461419557600080fd5b50565b6141a18161394d565b81146141ac57600080fd5b50565b6141b881613999565b81146141c357600080fd5b5056fea2646970667358221220226ed1850b5017af6b9ca1012fdd518bb26e7a886c1fa17e0e53934d20544a4d64736f6c634300080400330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000114469676974616c204e657720556e696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003444e550000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f578063a22cb465116100a2578063d547741f11610071578063d547741f14610556578063e985e9c514610572578063ebd757a4146105a2578063f2fde38b146105d2576101e5565b8063a22cb465146104d0578063b88d4fde146104ec578063c87b56dd14610508578063d082e38114610538576101e5565b806391d14854116100de57806391d148541461044657806395d89b4114610476578063a10f469e14610494578063a217fddf146104b2576101e5565b8063715018a6146103f85780637719a990146104025780637e01afc31461041e5780638da5cb5b14610428576101e5565b8063248a9ca31161018757806342842e0e1161015657806342842e0e146103605780636352211e1461037c5780636f4d469b146103ac57806370a08231146103c8576101e5565b8063248a9ca3146102c85780632f2ff15d146102f857806335809f4b1461031457806336568abe14610344576101e5565b8063095ea7b3116101c3578063095ea7b3146102685780631249c58b14610284578063173021091461028e57806323b872dd146102ac576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612e31565b6105ee565b6040516102119190613412565b60405180910390f35b610222610600565b60405161022f9190613448565b60405180910390f35b610252600480360381019061024d9190612ec4565b610692565b60405161025f91906133ab565b60405180910390f35b610282600480360381019061027d9190612d4f565b610717565b005b61028c61082f565b005b610296610978565b6040516102a39190613448565b60405180910390f35b6102c660048036038101906102c19190612c49565b610a06565b005b6102e260048036038101906102dd9190612dcc565b610a66565b6040516102ef919061342d565b60405180910390f35b610312600480360381019061030d9190612df5565b610a86565b005b61032e60048036038101906103299190612be4565b610aaf565b60405161033b9190613412565b60405180910390f35b61035e60048036038101906103599190612df5565b610b05565b005b61037a60048036038101906103759190612c49565b610b88565b005b61039660048036038101906103919190612ec4565b610ba8565b6040516103a391906133ab565b60405180910390f35b6103c660048036038101906103c19190612d8b565b610c5a565b005b6103e260048036038101906103dd9190612be4565b610d61565b6040516103ef91906136ea565b60405180910390f35b610400610e19565b005b61041c60048036038101906104179190612e83565b610ea1565b005b610426610f7b565b005b610430611028565b60405161043d91906133ab565b60405180910390f35b610460600480360381019061045b9190612df5565b611052565b60405161046d9190613412565b60405180910390f35b61047e6110bd565b60405161048b9190613448565b60405180910390f35b61049c61114f565b6040516104a9919061342d565b60405180910390f35b6104ba611173565b6040516104c7919061342d565b60405180910390f35b6104ea60048036038101906104e59190612d13565b61117a565b005b61050660048036038101906105019190612c98565b611190565b005b610522600480360381019061051d9190612ec4565b6111f2565b60405161052f9190613448565b60405180910390f35b6105406112df565b60405161054d91906136ea565b60405180910390f35b610570600480360381019061056b9190612df5565b6112e5565b005b61058c60048036038101906105879190612c0d565b61130e565b6040516105999190613412565b60405180910390f35b6105bc60048036038101906105b79190612be4565b6113a2565b6040516105c99190613412565b60405180910390f35b6105ec60048036038101906105e79190612be4565b6113d5565b005b60006105f9826114cd565b9050919050565b60606000805461060f90613a0f565b80601f016020809104026020016040519081016040528092919081815260200182805461063b90613a0f565b80156106885780601f1061065d57610100808354040283529160200191610688565b820191906000526020600020905b81548152906001019060200180831161066b57829003601f168201915b5050505050905090565b600061069d82611547565b6106dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d3906135ea565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072282610ba8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a9061366a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107b26115b3565b73ffffffffffffffffffffffffffffffffffffffff1614806107e157506107e0816107db6115b3565b61130e565b5b610820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108179061356a565b60405180910390fd5b61082a83836115bb565b505050565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d46366108618161085c6115b3565b611674565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e5906136aa565b60405180910390fd5b6108fa33600854611711565b61090560085461172f565b6008600081548092919061091890613a72565b91905055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6009805461098590613a0f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190613a0f565b80156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b505050505081565b610a17610a116115b3565b826117f8565b610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d9061368a565b60405180910390fd5b610a618383836118d6565b505050565b600060076000838152602001908152602001600020600101549050919050565b610a8f82610a66565b610aa081610a9b6115b3565b611674565b610aaa8383611b32565b505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610b0d6115b3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b71906136ca565b60405180910390fd5b610b848282611c13565b5050565b610ba383838360405180602001604052806000815250611190565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c48906135aa565b60405180910390fd5b80915050919050565b610c626115b3565b73ffffffffffffffffffffffffffffffffffffffff16610c80611028565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061362a565b60405180910390fd5b60005b8151811015610d5d57610d4c7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d4636838381518110610d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611cf5565b80610d5690613a72565b9050610cd9565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc99061358a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e216115b3565b73ffffffffffffffffffffffffffffffffffffffff16610e3f611028565b73ffffffffffffffffffffffffffffffffffffffff1614610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c9061362a565b60405180910390fd5b610e9f6000611d03565b565b610ea96115b3565b73ffffffffffffffffffffffffffffffffffffffff16610ec7611028565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f149061362a565b60405180910390fd5b6000815111610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f589061354a565b60405180910390fd5b8060099080519060200190610f7792919061295d565b5050565b610f836115b3565b73ffffffffffffffffffffffffffffffffffffffff16610fa1611028565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee9061362a565b60405180910390fd5b61100333600854611711565b61100e60085461172f565b6008600081548092919061102190613a72565b9190505550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600180546110cc90613a0f565b80601f01602080910402602001604051908101604052809291908181526020018280546110f890613a0f565b80156111455780601f1061111a57610100808354040283529160200191611145565b820191906000526020600020905b81548152906001019060200180831161112857829003601f168201915b5050505050905090565b7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d463681565b6000801b81565b61118c6111856115b3565b8383611dc9565b5050565b6111a161119b6115b3565b836117f8565b6111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061368a565b60405180910390fd5b6111ec84848484611f36565b50505050565b60606111fd82611547565b61123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112339061360a565b60405180910390fd5b600a6000838152602001908152602001600020805461125a90613a0f565b80601f016020809104026020016040519081016040528092919081815260200182805461128690613a0f565b80156112d35780601f106112a8576101008083540402835291602001916112d3565b820191906000526020600020905b8154815290600101906020018083116112b657829003601f168201915b50505050509050919050565b60085481565b6112ee82610a66565b6112ff816112fa6115b3565b611674565b6113098383611c13565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006113ce7f829b824e2329e205435d941c9f13baf578548505283d29261236d8e6596d463683611052565b9050919050565b6113dd6115b3565b73ffffffffffffffffffffffffffffffffffffffff166113fb611028565b73ffffffffffffffffffffffffffffffffffffffff1614611451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114489061362a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b8906134aa565b60405180910390fd5b6114ca81611d03565b50565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611540575061153f82611f92565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661162e83610ba8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61167e8282611052565b61170d576116a38173ffffffffffffffffffffffffffffffffffffffff166014612074565b6116b18360001c6020612074565b6040516020016116c2929190613371565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117049190613448565b60405180910390fd5b5050565b61172b82826040518060200160405280600081525061236e565b5050565b61173881611547565b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e9061360a565b60405180910390fd5b60006009805461178690613a0f565b9050116117a257604051806020016040528060008152506117ce565b60096117ad826123c9565b6040516020016117be92919061334d565b6040516020818303038152906040525b600a600083815260200190815260200160002090805190602001906117f492919061295d565b5050565b600061180382611547565b611842576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118399061352a565b60405180910390fd5b600061184d83610ba8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118bc57508373ffffffffffffffffffffffffffffffffffffffff166118a484610692565b73ffffffffffffffffffffffffffffffffffffffff16145b806118cd57506118cc818561130e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118f682610ba8565b73ffffffffffffffffffffffffffffffffffffffff161461194c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119439061364a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b3906134ea565b60405180910390fd5b6119c7838383612576565b6119d26000826115bb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2291906138f1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a799190613810565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b3c8282611052565b611c0f5760016007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611bb46115b3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611c1d8282611052565b15611cf15760006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c966115b3565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611cff8282611b32565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f9061350a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f299190613412565b60405180910390a3505050565b611f418484846118d6565b611f4d8484848461257b565b611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f839061348a565b60405180910390fd5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061205d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061206d575061206c82612712565b5b9050919050565b6060600060028360026120879190613897565b6120919190613810565b67ffffffffffffffff8111156120d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121025781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612160577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106121ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261222a9190613897565b6122349190613810565b90505b6001811115612320577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061229c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106122d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612319906139e5565b9050612237565b5060008414612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b9061346a565b60405180910390fd5b8091505092915050565b612378838361277c565b612385600084848461257b565b6123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb9061348a565b60405180910390fd5b505050565b60606000821415612411576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612571565b600082905060005b6000821461244357808061242c90613a72565b915050600a8261243c9190613866565b9150612419565b60008167ffffffffffffffff811115612485577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124b75781602001600182028036833780820191505090505b5090505b6000851461256a576001826124d091906138f1565b9150600a856124df9190613abb565b60306124eb9190613810565b60f81b818381518110612527577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125639190613866565b94506124bb565b8093505050505b919050565b505050565b600061259c8473ffffffffffffffffffffffffffffffffffffffff1661294a565b15612705578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125c56115b3565b8786866040518563ffffffff1660e01b81526004016125e794939291906133c6565b602060405180830381600087803b15801561260157600080fd5b505af192505050801561263257506040513d601f19601f8201168201806040525081019061262f9190612e5a565b60015b6126b5573d8060008114612662576040519150601f19603f3d011682016040523d82523d6000602084013e612667565b606091505b506000815114156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a49061348a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061270a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e3906135ca565b60405180910390fd5b6127f581611547565b15612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906134ca565b60405180910390fd5b61284160008383612576565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128919190613810565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461296990613a0f565b90600052602060002090601f01602090048101928261298b57600085556129d2565b82601f106129a457805160ff19168380011785556129d2565b828001600101855582156129d2579182015b828111156129d15782518255916020019190600101906129b6565b5b5090506129df91906129e3565b5090565b5b808211156129fc5760008160009055506001016129e4565b5090565b6000612a13612a0e8461372a565b613705565b90508083825260208201905082856020860282011115612a3257600080fd5b60005b85811015612a625781612a488882612ae8565b845260208401935060208301925050600181019050612a35565b5050509392505050565b6000612a7f612a7a84613756565b613705565b905082815260208101848484011115612a9757600080fd5b612aa28482856139a3565b509392505050565b6000612abd612ab884613787565b613705565b905082815260208101848484011115612ad557600080fd5b612ae08482856139a3565b509392505050565b600081359050612af781614153565b92915050565b600082601f830112612b0e57600080fd5b8135612b1e848260208601612a00565b91505092915050565b600081359050612b368161416a565b92915050565b600081359050612b4b81614181565b92915050565b600081359050612b6081614198565b92915050565b600081519050612b7581614198565b92915050565b600082601f830112612b8c57600080fd5b8135612b9c848260208601612a6c565b91505092915050565b600082601f830112612bb657600080fd5b8135612bc6848260208601612aaa565b91505092915050565b600081359050612bde816141af565b92915050565b600060208284031215612bf657600080fd5b6000612c0484828501612ae8565b91505092915050565b60008060408385031215612c2057600080fd5b6000612c2e85828601612ae8565b9250506020612c3f85828601612ae8565b9150509250929050565b600080600060608486031215612c5e57600080fd5b6000612c6c86828701612ae8565b9350506020612c7d86828701612ae8565b9250506040612c8e86828701612bcf565b9150509250925092565b60008060008060808587031215612cae57600080fd5b6000612cbc87828801612ae8565b9450506020612ccd87828801612ae8565b9350506040612cde87828801612bcf565b925050606085013567ffffffffffffffff811115612cfb57600080fd5b612d0787828801612b7b565b91505092959194509250565b60008060408385031215612d2657600080fd5b6000612d3485828601612ae8565b9250506020612d4585828601612b27565b9150509250929050565b60008060408385031215612d6257600080fd5b6000612d7085828601612ae8565b9250506020612d8185828601612bcf565b9150509250929050565b600060208284031215612d9d57600080fd5b600082013567ffffffffffffffff811115612db757600080fd5b612dc384828501612afd565b91505092915050565b600060208284031215612dde57600080fd5b6000612dec84828501612b3c565b91505092915050565b60008060408385031215612e0857600080fd5b6000612e1685828601612b3c565b9250506020612e2785828601612ae8565b9150509250929050565b600060208284031215612e4357600080fd5b6000612e5184828501612b51565b91505092915050565b600060208284031215612e6c57600080fd5b6000612e7a84828501612b66565b91505092915050565b600060208284031215612e9557600080fd5b600082013567ffffffffffffffff811115612eaf57600080fd5b612ebb84828501612ba5565b91505092915050565b600060208284031215612ed657600080fd5b6000612ee484828501612bcf565b91505092915050565b612ef681613925565b82525050565b612f0581613937565b82525050565b612f1481613943565b82525050565b6000612f25826137cd565b612f2f81856137e3565b9350612f3f8185602086016139b2565b612f4881613ba8565b840191505092915050565b6000612f5e826137d8565b612f6881856137f4565b9350612f788185602086016139b2565b612f8181613ba8565b840191505092915050565b6000612f97826137d8565b612fa18185613805565b9350612fb18185602086016139b2565b80840191505092915050565b60008154612fca81613a0f565b612fd48186613805565b94506001821660008114612fef576001811461300057613033565b60ff19831686528186019350613033565b613009856137b8565b60005b8381101561302b5781548189015260018201915060208101905061300c565b838801955050505b50505092915050565b60006130496020836137f4565b915061305482613bb9565b602082019050919050565b600061306c6032836137f4565b915061307782613be2565b604082019050919050565b600061308f6026836137f4565b915061309a82613c31565b604082019050919050565b60006130b2601c836137f4565b91506130bd82613c80565b602082019050919050565b60006130d56024836137f4565b91506130e082613ca9565b604082019050919050565b60006130f86019836137f4565b915061310382613cf8565b602082019050919050565b600061311b602c836137f4565b915061312682613d21565b604082019050919050565b600061313e601c836137f4565b915061314982613d70565b602082019050919050565b60006131616038836137f4565b915061316c82613d99565b604082019050919050565b6000613184602a836137f4565b915061318f82613de8565b604082019050919050565b60006131a76029836137f4565b91506131b282613e37565b604082019050919050565b60006131ca6020836137f4565b91506131d582613e86565b602082019050919050565b60006131ed602c836137f4565b91506131f882613eaf565b604082019050919050565b6000613210602c836137f4565b915061321b82613efe565b604082019050919050565b60006132336020836137f4565b915061323e82613f4d565b602082019050919050565b60006132566029836137f4565b915061326182613f76565b604082019050919050565b60006132796021836137f4565b915061328482613fc5565b604082019050919050565b600061329c6031836137f4565b91506132a782614014565b604082019050919050565b60006132bf601783613805565b91506132ca82614063565b601782019050919050565b60006132e2602d836137f4565b91506132ed8261408c565b604082019050919050565b6000613305601183613805565b9150613310826140db565b601182019050919050565b6000613328602f836137f4565b915061333382614104565b604082019050919050565b61334781613999565b82525050565b60006133598285612fbd565b91506133658284612f8c565b91508190509392505050565b600061337c826132b2565b91506133888285612f8c565b9150613393826132f8565b915061339f8284612f8c565b91508190509392505050565b60006020820190506133c06000830184612eed565b92915050565b60006080820190506133db6000830187612eed565b6133e86020830186612eed565b6133f5604083018561333e565b81810360608301526134078184612f1a565b905095945050505050565b60006020820190506134276000830184612efc565b92915050565b60006020820190506134426000830184612f0b565b92915050565b600060208201905081810360008301526134628184612f53565b905092915050565b600060208201905081810360008301526134838161303c565b9050919050565b600060208201905081810360008301526134a38161305f565b9050919050565b600060208201905081810360008301526134c381613082565b9050919050565b600060208201905081810360008301526134e3816130a5565b9050919050565b60006020820190508181036000830152613503816130c8565b9050919050565b60006020820190508181036000830152613523816130eb565b9050919050565b600060208201905081810360008301526135438161310e565b9050919050565b6000602082019050818103600083015261356381613131565b9050919050565b6000602082019050818103600083015261358381613154565b9050919050565b600060208201905081810360008301526135a381613177565b9050919050565b600060208201905081810360008301526135c38161319a565b9050919050565b600060208201905081810360008301526135e3816131bd565b9050919050565b60006020820190508181036000830152613603816131e0565b9050919050565b6000602082019050818103600083015261362381613203565b9050919050565b6000602082019050818103600083015261364381613226565b9050919050565b6000602082019050818103600083015261366381613249565b9050919050565b600060208201905081810360008301526136838161326c565b9050919050565b600060208201905081810360008301526136a38161328f565b9050919050565b600060208201905081810360008301526136c3816132d5565b9050919050565b600060208201905081810360008301526136e38161331b565b9050919050565b60006020820190506136ff600083018461333e565b92915050565b600061370f613720565b905061371b8282613a41565b919050565b6000604051905090565b600067ffffffffffffffff82111561374557613744613b79565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561377157613770613b79565b5b61377a82613ba8565b9050602081019050919050565b600067ffffffffffffffff8211156137a2576137a1613b79565b5b6137ab82613ba8565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061381b82613999565b915061382683613999565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385b5761385a613aec565b5b828201905092915050565b600061387182613999565b915061387c83613999565b92508261388c5761388b613b1b565b5b828204905092915050565b60006138a282613999565b91506138ad83613999565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138e6576138e5613aec565b5b828202905092915050565b60006138fc82613999565b915061390783613999565b92508282101561391a57613919613aec565b5b828203905092915050565b600061393082613979565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139d05780820151818401526020810190506139b5565b838111156139df576000848401525b50505050565b60006139f082613999565b91506000821415613a0457613a03613aec565b5b600182039050919050565b60006002820490506001821680613a2757607f821691505b60208210811415613a3b57613a3a613b4a565b5b50919050565b613a4a82613ba8565b810181811067ffffffffffffffff82111715613a6957613a68613b79565b5b80604052505050565b6000613a7d82613999565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ab057613aaf613aec565b5b600182019050919050565b6000613ac682613999565b9150613ad183613999565b925082613ae157613ae0613b1b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e46542773205552492073686f756c64206e6f74206265206e756c6c00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f596f752068617665206d696e7465642061204e4654206f72204e6f7420696e2060008201527f7468652077686974656c69737400000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61415c81613925565b811461416757600080fd5b50565b61417381613937565b811461417e57600080fd5b50565b61418a81613943565b811461419557600080fd5b50565b6141a18161394d565b81146141ac57600080fd5b50565b6141b881613999565b81146141c357600080fd5b5056fea2646970667358221220226ed1850b5017af6b9ca1012fdd518bb26e7a886c1fa17e0e53934d20544a4d64736f6c63430008040033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000114469676974616c204e657720556e696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003444e550000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Digital New Union
Arg [1] : symbol (string): DNU

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [3] : 4469676974616c204e657720556e696f6e000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 444e550000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

46995:3696:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47905:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22283:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23842:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23365:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49280:289;;;:::i;:::-;;47292:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24592:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43356:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43741:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49114:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44789:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25002:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21977:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48540:188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21707:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35497:103;;;:::i;:::-;;48255:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49636:156;;;:::i;:::-;;34846:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42241:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22452:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47103:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41332:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24135:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25258:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50384:304;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47197:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44133:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24361:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48861:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35755:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47905:226;48058:4;48087:36;48111:11;48087:23;:36::i;:::-;48080:43;;47905:226;;;:::o;22283:100::-;22337:13;22370:5;22363:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22283:100;:::o;23842:221::-;23918:7;23946:16;23954:7;23946;:16::i;:::-;23938:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24031:15;:24;24047:7;24031:24;;;;;;;;;;;;;;;;;;;;;24024:31;;23842:221;;;:::o;23365:411::-;23446:13;23462:23;23477:7;23462:14;:23::i;:::-;23446:39;;23510:5;23504:11;;:2;:11;;;;23496:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:5;23588:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23613:37;23630:5;23637:12;:10;:12::i;:::-;23613:16;:37::i;:::-;23588:62;23566:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23747:21;23756:2;23760:7;23747:8;:21::i;:::-;23365:411;;;:::o;49280:289::-;47141:24;41823:30;41834:4;41840:12;:10;:12::i;:::-;41823:10;:30::i;:::-;49345:7:::1;:19;49353:10;49345:19;;;;;;;;;;;;;;;;;;;;;;;;;49344:20;49336:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49425:35;49435:10;49447:12;;49425:9;:35::i;:::-;49471:26;49484:12;;49471;:26::i;:::-;49510:12;;:14;;;;;;;;;:::i;:::-;;;;;;49557:4;49535:7;:19;49543:10;49535:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;49280:289:::0;:::o;47292:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24592:339::-;24787:41;24806:12;:10;:12::i;:::-;24820:7;24787:18;:41::i;:::-;24779:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24895:28;24905:4;24911:2;24915:7;24895:9;:28::i;:::-;24592:339;;;:::o;43356:123::-;43422:7;43449:6;:12;43456:4;43449:12;;;;;;;;;;;:22;;;43442:29;;43356:123;;;:::o;43741:147::-;43824:18;43837:4;43824:12;:18::i;:::-;41823:30;41834:4;41840:12;:10;:12::i;:::-;41823:10;:30::i;:::-;43855:25:::1;43866:4;43872:7;43855:10;:25::i;:::-;43741:147:::0;;;:::o;49114:104::-;49171:4;49195:7;:15;49203:6;49195:15;;;;;;;;;;;;;;;;;;;;;;;;;49188:22;;49114:104;;;:::o;44789:218::-;44896:12;:10;:12::i;:::-;44885:23;;:7;:23;;;44877:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;44973:26;44985:4;44991:7;44973:11;:26::i;:::-;44789:218;;:::o;25002:185::-;25140:39;25157:4;25163:2;25167:7;25140:39;;;;;;;;;;;;:16;:39::i;:::-;25002:185;;;:::o;21977:239::-;22049:7;22069:13;22085:7;:16;22093:7;22085:16;;;;;;;;;;;;;;;;;;;;;22069:32;;22137:1;22120:19;;:5;:19;;;;22112:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22203:5;22196:12;;;21977:239;;;:::o;48540:188::-;35077:12;:10;:12::i;:::-;35066:23;;:7;:5;:7::i;:::-;:23;;;35058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48619:9:::1;48614:107;48638:7;:14;48634:1;:18;48614:107;;;48674:35;47141:24;48698:7;48706:1;48698:10;;;;;;;;;;;;;;;;;;;;;;48674;:35::i;:::-;48654:3;;;;:::i;:::-;;;48614:107;;;;48540:188:::0;:::o;21707:208::-;21779:7;21824:1;21807:19;;:5;:19;;;;21799:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21891:9;:16;21901:5;21891:16;;;;;;;;;;;;;;;;21884:23;;21707:208;;;:::o;35497:103::-;35077:12;:10;:12::i;:::-;35066:23;;:7;:5;:7::i;:::-;:23;;;35058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35562:30:::1;35589:1;35562:18;:30::i;:::-;35497:103::o:0;48255:169::-;35077:12;:10;:12::i;:::-;35066:23;;:7;:5;:7::i;:::-;:23;;;35058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48354:1:::1;48340:3;48334:17;:21;48326:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48413:3;48399:11;:17;;;;;;;;;;;;:::i;:::-;;48255:169:::0;:::o;49636:156::-;35077:12;:10;:12::i;:::-;35066:23;;:7;:5;:7::i;:::-;:23;;;35058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49685:35:::1;49695:10;49707:12;;49685:9;:35::i;:::-;49731:26;49744:12;;49731;:26::i;:::-;49770:12;;:14;;;;;;;;;:::i;:::-;;;;;;49636:156::o:0;34846:87::-;34892:7;34919:6;;;;;;;;;;;34912:13;;34846:87;:::o;42241:139::-;42319:4;42343:6;:12;42350:4;42343:12;;;;;;;;;;;:20;;:29;42364:7;42343:29;;;;;;;;;;;;;;;;;;;;;;;;;42336:36;;42241:139;;;;:::o;22452:104::-;22508:13;22541:7;22534:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22452:104;:::o;47103:62::-;47141:24;47103:62;:::o;41332:49::-;41377:4;41332:49;;;:::o;24135:155::-;24230:52;24249:12;:10;:12::i;:::-;24263:8;24273;24230:18;:52::i;:::-;24135:155;;:::o;25258:328::-;25433:41;25452:12;:10;:12::i;:::-;25466:7;25433:18;:41::i;:::-;25425:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25539:39;25553:4;25559:2;25563:7;25572:5;25539:13;:39::i;:::-;25258:328;;;;:::o;50384:304::-;50502:13;50555:16;50563:7;50555;:16::i;:::-;50533:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;50661:10;:19;50672:7;50661:19;;;;;;;;;;;50654:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50384:304;;;:::o;47197:27::-;;;;:::o;44133:149::-;44217:18;44230:4;44217:12;:18::i;:::-;41823:30;41834:4;41840:12;:10;:12::i;:::-;41823:10;:30::i;:::-;44248:26:::1;44260:4;44266:7;44248:11;:26::i;:::-;44133:149:::0;;;:::o;24361:164::-;24458:4;24482:18;:25;24501:5;24482:25;;;;;;;;;;;;;;;:35;24508:8;24482:35;;;;;;;;;;;;;;;;;;;;;;;;;24475:42;;24361:164;;;;:::o;48861:119::-;48920:4;48944:28;47141:24;48965:6;48944:7;:28::i;:::-;48937:35;;48861:119;;;:::o;35755:201::-;35077:12;:10;:12::i;:::-;35066:23;;:7;:5;:7::i;:::-;:23;;;35058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35864:1:::1;35844:22;;:8;:22;;;;35836:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35920:28;35939:8;35920:18;:28::i;:::-;35755:201:::0;:::o;41945:204::-;42030:4;42069:32;42054:47;;;:11;:47;;;;:87;;;;42105:36;42129:11;42105:23;:36::i;:::-;42054:87;42047:94;;41945:204;;;:::o;27096:127::-;27161:4;27213:1;27185:30;;:7;:16;27193:7;27185:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27178:37;;27096:127;;;:::o;16559:98::-;16612:7;16639:10;16632:17;;16559:98;:::o;31078:174::-;31180:2;31153:15;:24;31169:7;31153:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31236:7;31232:2;31198:46;;31207:23;31222:7;31207:14;:23::i;:::-;31198:46;;;;;;;;;;;;31078:174;;:::o;42670:497::-;42751:22;42759:4;42765:7;42751;:22::i;:::-;42746:414;;42939:41;42967:7;42939:41;;42977:2;42939:19;:41::i;:::-;43053:38;43081:4;43073:13;;43088:2;43053:19;:38::i;:::-;42844:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42790:358;;;;;;;;;;;:::i;:::-;;;;;;;;42746:414;42670:497;;:::o;28080:110::-;28156:26;28166:2;28170:7;28156:26;;;;;;;;;;;;:9;:26::i;:::-;28080:110;;:::o;49877:368::-;49989:16;49997:7;49989;:16::i;:::-;49967:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;50171:1;50149:11;50143:25;;;;;:::i;:::-;;;:29;:94;;;;;;;;;;;;;;;;;50199:11;50212:18;:7;:16;:18::i;:::-;50182:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50143:94;50121:10;:19;50132:7;50121:19;;;;;;;;;;;:116;;;;;;;;;;;;:::i;:::-;;49877:368;:::o;27390:348::-;27483:4;27508:16;27516:7;27508;:16::i;:::-;27500:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27584:13;27600:23;27615:7;27600:14;:23::i;:::-;27584:39;;27653:5;27642:16;;:7;:16;;;:51;;;;27686:7;27662:31;;:20;27674:7;27662:11;:20::i;:::-;:31;;;27642:51;:87;;;;27697:32;27714:5;27721:7;27697:16;:32::i;:::-;27642:87;27634:96;;;27390:348;;;;:::o;30382:578::-;30541:4;30514:31;;:23;30529:7;30514:14;:23::i;:::-;:31;;;30506:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30624:1;30610:16;;:2;:16;;;;30602:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30680:39;30701:4;30707:2;30711:7;30680:20;:39::i;:::-;30784:29;30801:1;30805:7;30784:8;:29::i;:::-;30845:1;30826:9;:15;30836:4;30826:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30874:1;30857:9;:13;30867:2;30857:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30905:2;30886:7;:16;30894:7;30886:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30944:7;30940:2;30925:27;;30934:4;30925:27;;;;;;;;;;;;30382:578;;;:::o;46290:238::-;46374:22;46382:4;46388:7;46374;:22::i;:::-;46369:152;;46445:4;46413:6;:12;46420:4;46413:12;;;;;;;;;;;:20;;:29;46434:7;46413:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;46496:12;:10;:12::i;:::-;46469:40;;46487:7;46469:40;;46481:4;46469:40;;;;;;;;;;46369:152;46290:238;;:::o;46660:239::-;46744:22;46752:4;46758:7;46744;:22::i;:::-;46740:152;;;46815:5;46783:6;:12;46790:4;46783:12;;;;;;;;;;;:20;;:29;46804:7;46783:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;46867:12;:10;:12::i;:::-;46840:40;;46858:7;46840:40;;46852:4;46840:40;;;;;;;;;;46740:152;46660:239;;:::o;45666:112::-;45745:25;45756:4;45762:7;45745:10;:25::i;:::-;45666:112;;:::o;36116:191::-;36190:16;36209:6;;;;;;;;;;;36190:25;;36235:8;36226:6;;:17;;;;;;;;;;;;;;;;;;36290:8;36259:40;;36280:8;36259:40;;;;;;;;;;;;36116:191;;:::o;31394:315::-;31549:8;31540:17;;:5;:17;;;;31532:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31636:8;31598:18;:25;31617:5;31598:25;;;;;;;;;;;;;;;:35;31624:8;31598:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31682:8;31660:41;;31675:5;31660:41;;;31692:8;31660:41;;;;;;:::i;:::-;;;;;;;;31394:315;;;:::o;26468:::-;26625:28;26635:4;26641:2;26645:7;26625:9;:28::i;:::-;26672:48;26695:4;26701:2;26705:7;26714:5;26672:22;:48::i;:::-;26664:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26468:315;;;;:::o;21338:305::-;21440:4;21492:25;21477:40;;;:11;:40;;;;:105;;;;21549:33;21534:48;;;:11;:48;;;;21477:105;:158;;;;21599:36;21623:11;21599:23;:36::i;:::-;21477:158;21457:178;;21338:305;;;:::o;18447:451::-;18522:13;18548:19;18593:1;18584:6;18580:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18570:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18548:47;;18606:15;:6;18613:1;18606:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;18632;:6;18639:1;18632:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;18663:9;18688:1;18679:6;18675:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18663:26;;18658:135;18695:1;18691;:5;18658:135;;;18730:12;18751:3;18743:5;:11;18730:25;;;;;;;;;;;;;;;;;;18718:6;18725:1;18718:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;18780:1;18770:11;;;;;18698:3;;;;:::i;:::-;;;18658:135;;;;18820:1;18811:5;:10;18803:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18883:6;18869:21;;;18447:451;;;;:::o;28417:321::-;28547:18;28553:2;28557:7;28547:5;:18::i;:::-;28598:54;28629:1;28633:2;28637:7;28646:5;28598:22;:54::i;:::-;28576:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28417:321;;;:::o;17146:723::-;17202:13;17432:1;17423:5;:10;17419:53;;;17450:10;;;;;;;;;;;;;;;;;;;;;17419:53;17482:12;17497:5;17482:20;;17513:14;17538:78;17553:1;17545:4;:9;17538:78;;17571:8;;;;;:::i;:::-;;;;17602:2;17594:10;;;;;:::i;:::-;;;17538:78;;;17626:19;17658:6;17648:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17626:39;;17676:154;17692:1;17683:5;:10;17676:154;;17720:1;17710:11;;;;;:::i;:::-;;;17787:2;17779:5;:10;;;;:::i;:::-;17766:2;:24;;;;:::i;:::-;17753:39;;17736:6;17743;17736:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17816:2;17807:11;;;;;:::i;:::-;;;17676:154;;;17854:6;17840:21;;;;;17146:723;;;;:::o;33645:126::-;;;;:::o;32274:799::-;32429:4;32450:15;:2;:13;;;:15::i;:::-;32446:620;;;32502:2;32486:36;;;32523:12;:10;:12::i;:::-;32537:4;32543:7;32552:5;32486:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32482:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32745:1;32728:6;:13;:18;32724:272;;;32771:60;;;;;;;;;;:::i;:::-;;;;;;;;32724:272;32946:6;32940:13;32931:6;32927:2;32923:15;32916:38;32482:529;32619:41;;;32609:51;;;:6;:51;;;;32602:58;;;;;32446:620;33050:4;33043:11;;32274:799;;;;;;;:::o;19776:157::-;19861:4;19900:25;19885:40;;;:11;:40;;;;19878:47;;19776:157;;;:::o;29074:382::-;29168:1;29154:16;;:2;:16;;;;29146:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29227:16;29235:7;29227;:16::i;:::-;29226:17;29218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29289:45;29318:1;29322:2;29326:7;29289:20;:45::i;:::-;29364:1;29347:9;:13;29357:2;29347:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29395:2;29376:7;:16;29384:7;29376:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29440:7;29436:2;29415:33;;29432:1;29415:33;;;;;;;;;;;;29074:382;;:::o;8541:387::-;8601:4;8809:12;8876:7;8864:20;8856:28;;8919:1;8912:4;:8;8905:15;;;8541:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1547:303::-;1618:5;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1685:1;1682;1675:12;1634:2;1725:6;1712:20;1750:94;1840:3;1832:6;1825:4;1817:6;1813:17;1750:94;:::i;:::-;1741:103;;1624:226;;;;;:::o;1856:133::-;1899:5;1937:6;1924:20;1915:29;;1953:30;1977:5;1953:30;:::i;:::-;1905:84;;;;:::o;1995:139::-;2041:5;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2140:137::-;2185:5;2223:6;2210:20;2201:29;;2239:32;2265:5;2239:32;:::i;:::-;2191:86;;;;:::o;2283:141::-;2339:5;2370:6;2364:13;2355:22;;2386:32;2412:5;2386:32;:::i;:::-;2345:79;;;;:::o;2443:271::-;2498:5;2547:3;2540:4;2532:6;2528:17;2524:27;2514:2;;2565:1;2562;2555:12;2514:2;2605:6;2592:20;2630:78;2704:3;2696:6;2689:4;2681:6;2677:17;2630:78;:::i;:::-;2621:87;;2504:210;;;;;:::o;2734:273::-;2790:5;2839:3;2832:4;2824:6;2820:17;2816:27;2806:2;;2857:1;2854;2847:12;2806:2;2897:6;2884:20;2922:79;2997:3;2989:6;2982:4;2974:6;2970:17;2922:79;:::i;:::-;2913:88;;2796:211;;;;;:::o;3013:139::-;3059:5;3097:6;3084:20;3075:29;;3113:33;3140:5;3113:33;:::i;:::-;3065:87;;;;:::o;3158:262::-;3217:6;3266:2;3254:9;3245:7;3241:23;3237:32;3234:2;;;3282:1;3279;3272:12;3234:2;3325:1;3350:53;3395:7;3386:6;3375:9;3371:22;3350:53;:::i;:::-;3340:63;;3296:117;3224:196;;;;:::o;3426:407::-;3494:6;3502;3551:2;3539:9;3530:7;3526:23;3522:32;3519:2;;;3567:1;3564;3557:12;3519:2;3610:1;3635:53;3680:7;3671:6;3660:9;3656:22;3635:53;:::i;:::-;3625:63;;3581:117;3737:2;3763:53;3808:7;3799:6;3788:9;3784:22;3763:53;:::i;:::-;3753:63;;3708:118;3509:324;;;;;:::o;3839:552::-;3916:6;3924;3932;3981:2;3969:9;3960:7;3956:23;3952:32;3949:2;;;3997:1;3994;3987:12;3949:2;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;4167:2;4193:53;4238:7;4229:6;4218:9;4214:22;4193:53;:::i;:::-;4183:63;;4138:118;4295:2;4321:53;4366:7;4357:6;4346:9;4342:22;4321:53;:::i;:::-;4311:63;;4266:118;3939:452;;;;;:::o;4397:809::-;4492:6;4500;4508;4516;4565:3;4553:9;4544:7;4540:23;4536:33;4533:2;;;4582:1;4579;4572:12;4533:2;4625:1;4650:53;4695:7;4686:6;4675:9;4671:22;4650:53;:::i;:::-;4640:63;;4596:117;4752:2;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4723:118;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5036:2;5025:9;5021:18;5008:32;5067:18;5059:6;5056:30;5053:2;;;5099:1;5096;5089:12;5053:2;5127:62;5181:7;5172:6;5161:9;5157:22;5127:62;:::i;:::-;5117:72;;4979:220;4523:683;;;;;;;:::o;5212:401::-;5277:6;5285;5334:2;5322:9;5313:7;5309:23;5305:32;5302:2;;;5350:1;5347;5340:12;5302:2;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5520:2;5546:50;5588:7;5579:6;5568:9;5564:22;5546:50;:::i;:::-;5536:60;;5491:115;5292:321;;;;;:::o;5619:407::-;5687:6;5695;5744:2;5732:9;5723:7;5719:23;5715:32;5712:2;;;5760:1;5757;5750:12;5712:2;5803:1;5828:53;5873:7;5864:6;5853:9;5849:22;5828:53;:::i;:::-;5818:63;;5774:117;5930:2;5956:53;6001:7;5992:6;5981:9;5977:22;5956:53;:::i;:::-;5946:63;;5901:118;5702:324;;;;;:::o;6032:405::-;6116:6;6165:2;6153:9;6144:7;6140:23;6136:32;6133:2;;;6181:1;6178;6171:12;6133:2;6252:1;6241:9;6237:17;6224:31;6282:18;6274:6;6271:30;6268:2;;;6314:1;6311;6304:12;6268:2;6342:78;6412:7;6403:6;6392:9;6388:22;6342:78;:::i;:::-;6332:88;;6195:235;6123:314;;;;:::o;6443:262::-;6502:6;6551:2;6539:9;6530:7;6526:23;6522:32;6519:2;;;6567:1;6564;6557:12;6519:2;6610:1;6635:53;6680:7;6671:6;6660:9;6656:22;6635:53;:::i;:::-;6625:63;;6581:117;6509:196;;;;:::o;6711:407::-;6779:6;6787;6836:2;6824:9;6815:7;6811:23;6807:32;6804:2;;;6852:1;6849;6842:12;6804:2;6895:1;6920:53;6965:7;6956:6;6945:9;6941:22;6920:53;:::i;:::-;6910:63;;6866:117;7022:2;7048:53;7093:7;7084:6;7073:9;7069:22;7048:53;:::i;:::-;7038:63;;6993:118;6794:324;;;;;:::o;7124:260::-;7182:6;7231:2;7219:9;7210:7;7206:23;7202:32;7199:2;;;7247:1;7244;7237:12;7199:2;7290:1;7315:52;7359:7;7350:6;7339:9;7335:22;7315:52;:::i;:::-;7305:62;;7261:116;7189:195;;;;:::o;7390:282::-;7459:6;7508:2;7496:9;7487:7;7483:23;7479:32;7476:2;;;7524:1;7521;7514:12;7476:2;7567:1;7592:63;7647:7;7638:6;7627:9;7623:22;7592:63;:::i;:::-;7582:73;;7538:127;7466:206;;;;:::o;7678:375::-;7747:6;7796:2;7784:9;7775:7;7771:23;7767:32;7764:2;;;7812:1;7809;7802:12;7764:2;7883:1;7872:9;7868:17;7855:31;7913:18;7905:6;7902:30;7899:2;;;7945:1;7942;7935:12;7899:2;7973:63;8028:7;8019:6;8008:9;8004:22;7973:63;:::i;:::-;7963:73;;7826:220;7754:299;;;;:::o;8059:262::-;8118:6;8167:2;8155:9;8146:7;8142:23;8138:32;8135:2;;;8183:1;8180;8173:12;8135:2;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8125:196;;;;:::o;8327:118::-;8414:24;8432:5;8414:24;:::i;:::-;8409:3;8402:37;8392:53;;:::o;8451:109::-;8532:21;8547:5;8532:21;:::i;:::-;8527:3;8520:34;8510:50;;:::o;8566:118::-;8653:24;8671:5;8653:24;:::i;:::-;8648:3;8641:37;8631:53;;:::o;8690:360::-;8776:3;8804:38;8836:5;8804:38;:::i;:::-;8858:70;8921:6;8916:3;8858:70;:::i;:::-;8851:77;;8937:52;8982:6;8977:3;8970:4;8963:5;8959:16;8937:52;:::i;:::-;9014:29;9036:6;9014:29;:::i;:::-;9009:3;9005:39;8998:46;;8780:270;;;;;:::o;9056:364::-;9144:3;9172:39;9205:5;9172:39;:::i;:::-;9227:71;9291:6;9286:3;9227:71;:::i;:::-;9220:78;;9307:52;9352:6;9347:3;9340:4;9333:5;9329:16;9307:52;:::i;:::-;9384:29;9406:6;9384:29;:::i;:::-;9379:3;9375:39;9368:46;;9148:272;;;;;:::o;9426:377::-;9532:3;9560:39;9593:5;9560:39;:::i;:::-;9615:89;9697:6;9692:3;9615:89;:::i;:::-;9608:96;;9713:52;9758:6;9753:3;9746:4;9739:5;9735:16;9713:52;:::i;:::-;9790:6;9785:3;9781:16;9774:23;;9536:267;;;;;:::o;9833:845::-;9936:3;9973:5;9967:12;10002:36;10028:9;10002:36;:::i;:::-;10054:89;10136:6;10131:3;10054:89;:::i;:::-;10047:96;;10174:1;10163:9;10159:17;10190:1;10185:137;;;;10336:1;10331:341;;;;10152:520;;10185:137;10269:4;10265:9;10254;10250:25;10245:3;10238:38;10305:6;10300:3;10296:16;10289:23;;10185:137;;10331:341;10398:38;10430:5;10398:38;:::i;:::-;10458:1;10472:154;10486:6;10483:1;10480:13;10472:154;;;10560:7;10554:14;10550:1;10545:3;10541:11;10534:35;10610:1;10601:7;10597:15;10586:26;;10508:4;10505:1;10501:12;10496:17;;10472:154;;;10655:6;10650:3;10646:16;10639:23;;10338:334;;10152:520;;9940:738;;;;;;:::o;10684:366::-;10826:3;10847:67;10911:2;10906:3;10847:67;:::i;:::-;10840:74;;10923:93;11012:3;10923:93;:::i;:::-;11041:2;11036:3;11032:12;11025:19;;10830:220;;;:::o;11056:366::-;11198:3;11219:67;11283:2;11278:3;11219:67;:::i;:::-;11212:74;;11295:93;11384:3;11295:93;:::i;:::-;11413:2;11408:3;11404:12;11397:19;;11202:220;;;:::o;11428:366::-;11570:3;11591:67;11655:2;11650:3;11591:67;:::i;:::-;11584:74;;11667:93;11756:3;11667:93;:::i;:::-;11785:2;11780:3;11776:12;11769:19;;11574:220;;;:::o;11800:366::-;11942:3;11963:67;12027:2;12022:3;11963:67;:::i;:::-;11956:74;;12039:93;12128:3;12039:93;:::i;:::-;12157:2;12152:3;12148:12;12141:19;;11946:220;;;:::o;12172:366::-;12314:3;12335:67;12399:2;12394:3;12335:67;:::i;:::-;12328:74;;12411:93;12500:3;12411:93;:::i;:::-;12529:2;12524:3;12520:12;12513:19;;12318:220;;;:::o;12544:366::-;12686:3;12707:67;12771:2;12766:3;12707:67;:::i;:::-;12700:74;;12783:93;12872:3;12783:93;:::i;:::-;12901:2;12896:3;12892:12;12885:19;;12690:220;;;:::o;12916:366::-;13058:3;13079:67;13143:2;13138:3;13079:67;:::i;:::-;13072:74;;13155:93;13244:3;13155:93;:::i;:::-;13273:2;13268:3;13264:12;13257:19;;13062:220;;;:::o;13288:366::-;13430:3;13451:67;13515:2;13510:3;13451:67;:::i;:::-;13444:74;;13527:93;13616:3;13527:93;:::i;:::-;13645:2;13640:3;13636:12;13629:19;;13434:220;;;:::o;13660:366::-;13802:3;13823:67;13887:2;13882:3;13823:67;:::i;:::-;13816:74;;13899:93;13988:3;13899:93;:::i;:::-;14017:2;14012:3;14008:12;14001:19;;13806:220;;;:::o;14032:366::-;14174:3;14195:67;14259:2;14254:3;14195:67;:::i;:::-;14188:74;;14271:93;14360:3;14271:93;:::i;:::-;14389:2;14384:3;14380:12;14373:19;;14178:220;;;:::o;14404:366::-;14546:3;14567:67;14631:2;14626:3;14567:67;:::i;:::-;14560:74;;14643:93;14732:3;14643:93;:::i;:::-;14761:2;14756:3;14752:12;14745:19;;14550:220;;;:::o;14776:366::-;14918:3;14939:67;15003:2;14998:3;14939:67;:::i;:::-;14932:74;;15015:93;15104:3;15015:93;:::i;:::-;15133:2;15128:3;15124:12;15117:19;;14922:220;;;:::o;15148:366::-;15290:3;15311:67;15375:2;15370:3;15311:67;:::i;:::-;15304:74;;15387:93;15476:3;15387:93;:::i;:::-;15505:2;15500:3;15496:12;15489:19;;15294:220;;;:::o;15520:366::-;15662:3;15683:67;15747:2;15742:3;15683:67;:::i;:::-;15676:74;;15759:93;15848:3;15759:93;:::i;:::-;15877:2;15872:3;15868:12;15861:19;;15666:220;;;:::o;15892:366::-;16034:3;16055:67;16119:2;16114:3;16055:67;:::i;:::-;16048:74;;16131:93;16220:3;16131:93;:::i;:::-;16249:2;16244:3;16240:12;16233:19;;16038:220;;;:::o;16264:366::-;16406:3;16427:67;16491:2;16486:3;16427:67;:::i;:::-;16420:74;;16503:93;16592:3;16503:93;:::i;:::-;16621:2;16616:3;16612:12;16605:19;;16410:220;;;:::o;16636:366::-;16778:3;16799:67;16863:2;16858:3;16799:67;:::i;:::-;16792:74;;16875:93;16964:3;16875:93;:::i;:::-;16993:2;16988:3;16984:12;16977:19;;16782:220;;;:::o;17008:366::-;17150:3;17171:67;17235:2;17230:3;17171:67;:::i;:::-;17164:74;;17247:93;17336:3;17247:93;:::i;:::-;17365:2;17360:3;17356:12;17349:19;;17154:220;;;:::o;17380:402::-;17540:3;17561:85;17643:2;17638:3;17561:85;:::i;:::-;17554:92;;17655:93;17744:3;17655:93;:::i;:::-;17773:2;17768:3;17764:12;17757:19;;17544:238;;;:::o;17788:366::-;17930:3;17951:67;18015:2;18010:3;17951:67;:::i;:::-;17944:74;;18027:93;18116:3;18027:93;:::i;:::-;18145:2;18140:3;18136:12;18129:19;;17934:220;;;:::o;18160:402::-;18320:3;18341:85;18423:2;18418:3;18341:85;:::i;:::-;18334:92;;18435:93;18524:3;18435:93;:::i;:::-;18553:2;18548:3;18544:12;18537:19;;18324:238;;;:::o;18568:366::-;18710:3;18731:67;18795:2;18790:3;18731:67;:::i;:::-;18724:74;;18807:93;18896:3;18807:93;:::i;:::-;18925:2;18920:3;18916:12;18909:19;;18714:220;;;:::o;18940:118::-;19027:24;19045:5;19027:24;:::i;:::-;19022:3;19015:37;19005:53;;:::o;19064:429::-;19241:3;19263:92;19351:3;19342:6;19263:92;:::i;:::-;19256:99;;19372:95;19463:3;19454:6;19372:95;:::i;:::-;19365:102;;19484:3;19477:10;;19245:248;;;;;:::o;19499:967::-;19881:3;19903:148;20047:3;19903:148;:::i;:::-;19896:155;;20068:95;20159:3;20150:6;20068:95;:::i;:::-;20061:102;;20180:148;20324:3;20180:148;:::i;:::-;20173:155;;20345:95;20436:3;20427:6;20345:95;:::i;:::-;20338:102;;20457:3;20450:10;;19885:581;;;;;:::o;20472:222::-;20565:4;20603:2;20592:9;20588:18;20580:26;;20616:71;20684:1;20673:9;20669:17;20660:6;20616:71;:::i;:::-;20570:124;;;;:::o;20700:640::-;20895:4;20933:3;20922:9;20918:19;20910:27;;20947:71;21015:1;21004:9;21000:17;20991:6;20947:71;:::i;:::-;21028:72;21096:2;21085:9;21081:18;21072:6;21028:72;:::i;:::-;21110;21178:2;21167:9;21163:18;21154:6;21110:72;:::i;:::-;21229:9;21223:4;21219:20;21214:2;21203:9;21199:18;21192:48;21257:76;21328:4;21319:6;21257:76;:::i;:::-;21249:84;;20900:440;;;;;;;:::o;21346:210::-;21433:4;21471:2;21460:9;21456:18;21448:26;;21484:65;21546:1;21535:9;21531:17;21522:6;21484:65;:::i;:::-;21438:118;;;;:::o;21562:222::-;21655:4;21693:2;21682:9;21678:18;21670:26;;21706:71;21774:1;21763:9;21759:17;21750:6;21706:71;:::i;:::-;21660:124;;;;:::o;21790:313::-;21903:4;21941:2;21930:9;21926:18;21918:26;;21990:9;21984:4;21980:20;21976:1;21965:9;21961:17;21954:47;22018:78;22091:4;22082:6;22018:78;:::i;:::-;22010:86;;21908:195;;;;:::o;22109:419::-;22275:4;22313:2;22302:9;22298:18;22290:26;;22362:9;22356:4;22352:20;22348:1;22337:9;22333:17;22326:47;22390:131;22516:4;22390:131;:::i;:::-;22382:139;;22280:248;;;:::o;22534:419::-;22700:4;22738:2;22727:9;22723:18;22715:26;;22787:9;22781:4;22777:20;22773:1;22762:9;22758:17;22751:47;22815:131;22941:4;22815:131;:::i;:::-;22807:139;;22705:248;;;:::o;22959:419::-;23125:4;23163:2;23152:9;23148:18;23140:26;;23212:9;23206:4;23202:20;23198:1;23187:9;23183:17;23176:47;23240:131;23366:4;23240:131;:::i;:::-;23232:139;;23130:248;;;:::o;23384:419::-;23550:4;23588:2;23577:9;23573:18;23565:26;;23637:9;23631:4;23627:20;23623:1;23612:9;23608:17;23601:47;23665:131;23791:4;23665:131;:::i;:::-;23657:139;;23555:248;;;:::o;23809:419::-;23975:4;24013:2;24002:9;23998:18;23990:26;;24062:9;24056:4;24052:20;24048:1;24037:9;24033:17;24026:47;24090:131;24216:4;24090:131;:::i;:::-;24082:139;;23980:248;;;:::o;24234:419::-;24400:4;24438:2;24427:9;24423:18;24415:26;;24487:9;24481:4;24477:20;24473:1;24462:9;24458:17;24451:47;24515:131;24641:4;24515:131;:::i;:::-;24507:139;;24405:248;;;:::o;24659:419::-;24825:4;24863:2;24852:9;24848:18;24840:26;;24912:9;24906:4;24902:20;24898:1;24887:9;24883:17;24876:47;24940:131;25066:4;24940:131;:::i;:::-;24932:139;;24830:248;;;:::o;25084:419::-;25250:4;25288:2;25277:9;25273:18;25265:26;;25337:9;25331:4;25327:20;25323:1;25312:9;25308:17;25301:47;25365:131;25491:4;25365:131;:::i;:::-;25357:139;;25255:248;;;:::o;25509:419::-;25675:4;25713:2;25702:9;25698:18;25690:26;;25762:9;25756:4;25752:20;25748:1;25737:9;25733:17;25726:47;25790:131;25916:4;25790:131;:::i;:::-;25782:139;;25680:248;;;:::o;25934:419::-;26100:4;26138:2;26127:9;26123:18;26115:26;;26187:9;26181:4;26177:20;26173:1;26162:9;26158:17;26151:47;26215:131;26341:4;26215:131;:::i;:::-;26207:139;;26105:248;;;:::o;26359:419::-;26525:4;26563:2;26552:9;26548:18;26540:26;;26612:9;26606:4;26602:20;26598:1;26587:9;26583:17;26576:47;26640:131;26766:4;26640:131;:::i;:::-;26632:139;;26530:248;;;:::o;26784:419::-;26950:4;26988:2;26977:9;26973:18;26965:26;;27037:9;27031:4;27027:20;27023:1;27012:9;27008:17;27001:47;27065:131;27191:4;27065:131;:::i;:::-;27057:139;;26955:248;;;:::o;27209:419::-;27375:4;27413:2;27402:9;27398:18;27390:26;;27462:9;27456:4;27452:20;27448:1;27437:9;27433:17;27426:47;27490:131;27616:4;27490:131;:::i;:::-;27482:139;;27380:248;;;:::o;27634:419::-;27800:4;27838:2;27827:9;27823:18;27815:26;;27887:9;27881:4;27877:20;27873:1;27862:9;27858:17;27851:47;27915:131;28041:4;27915:131;:::i;:::-;27907:139;;27805:248;;;:::o;28059:419::-;28225:4;28263:2;28252:9;28248:18;28240:26;;28312:9;28306:4;28302:20;28298:1;28287:9;28283:17;28276:47;28340:131;28466:4;28340:131;:::i;:::-;28332:139;;28230:248;;;:::o;28484:419::-;28650:4;28688:2;28677:9;28673:18;28665:26;;28737:9;28731:4;28727:20;28723:1;28712:9;28708:17;28701:47;28765:131;28891:4;28765:131;:::i;:::-;28757:139;;28655:248;;;:::o;28909:419::-;29075:4;29113:2;29102:9;29098:18;29090:26;;29162:9;29156:4;29152:20;29148:1;29137:9;29133:17;29126:47;29190:131;29316:4;29190:131;:::i;:::-;29182:139;;29080:248;;;:::o;29334:419::-;29500:4;29538:2;29527:9;29523:18;29515:26;;29587:9;29581:4;29577:20;29573:1;29562:9;29558:17;29551:47;29615:131;29741:4;29615:131;:::i;:::-;29607:139;;29505:248;;;:::o;29759:419::-;29925:4;29963:2;29952:9;29948:18;29940:26;;30012:9;30006:4;30002:20;29998:1;29987:9;29983:17;29976:47;30040:131;30166:4;30040:131;:::i;:::-;30032:139;;29930:248;;;:::o;30184:419::-;30350:4;30388:2;30377:9;30373:18;30365:26;;30437:9;30431:4;30427:20;30423:1;30412:9;30408:17;30401:47;30465:131;30591:4;30465:131;:::i;:::-;30457:139;;30355:248;;;:::o;30609:222::-;30702:4;30740:2;30729:9;30725:18;30717:26;;30753:71;30821:1;30810:9;30806:17;30797:6;30753:71;:::i;:::-;30707:124;;;;:::o;30837:129::-;30871:6;30898:20;;:::i;:::-;30888:30;;30927:33;30955:4;30947:6;30927:33;:::i;:::-;30878:88;;;:::o;30972:75::-;31005:6;31038:2;31032:9;31022:19;;31012:35;:::o;31053:311::-;31130:4;31220:18;31212:6;31209:30;31206:2;;;31242:18;;:::i;:::-;31206:2;31292:4;31284:6;31280:17;31272:25;;31352:4;31346;31342:15;31334:23;;31135:229;;;:::o;31370:307::-;31431:4;31521:18;31513:6;31510:30;31507:2;;;31543:18;;:::i;:::-;31507:2;31581:29;31603:6;31581:29;:::i;:::-;31573:37;;31665:4;31659;31655:15;31647:23;;31436:241;;;:::o;31683:308::-;31745:4;31835:18;31827:6;31824:30;31821:2;;;31857:18;;:::i;:::-;31821:2;31895:29;31917:6;31895:29;:::i;:::-;31887:37;;31979:4;31973;31969:15;31961:23;;31750:241;;;:::o;31997:141::-;32046:4;32069:3;32061:11;;32092:3;32089:1;32082:14;32126:4;32123:1;32113:18;32105:26;;32051:87;;;:::o;32144:98::-;32195:6;32229:5;32223:12;32213:22;;32202:40;;;:::o;32248:99::-;32300:6;32334:5;32328:12;32318:22;;32307:40;;;:::o;32353:168::-;32436:11;32470:6;32465:3;32458:19;32510:4;32505:3;32501:14;32486:29;;32448:73;;;;:::o;32527:169::-;32611:11;32645:6;32640:3;32633:19;32685:4;32680:3;32676:14;32661:29;;32623:73;;;;:::o;32702:148::-;32804:11;32841:3;32826:18;;32816:34;;;;:::o;32856:305::-;32896:3;32915:20;32933:1;32915:20;:::i;:::-;32910:25;;32949:20;32967:1;32949:20;:::i;:::-;32944:25;;33103:1;33035:66;33031:74;33028:1;33025:81;33022:2;;;33109:18;;:::i;:::-;33022:2;33153:1;33150;33146:9;33139:16;;32900:261;;;;:::o;33167:185::-;33207:1;33224:20;33242:1;33224:20;:::i;:::-;33219:25;;33258:20;33276:1;33258:20;:::i;:::-;33253:25;;33297:1;33287:2;;33302:18;;:::i;:::-;33287:2;33344:1;33341;33337:9;33332:14;;33209:143;;;;:::o;33358:348::-;33398:7;33421:20;33439:1;33421:20;:::i;:::-;33416:25;;33455:20;33473:1;33455:20;:::i;:::-;33450:25;;33643:1;33575:66;33571:74;33568:1;33565:81;33560:1;33553:9;33546:17;33542:105;33539:2;;;33650:18;;:::i;:::-;33539:2;33698:1;33695;33691:9;33680:20;;33406:300;;;;:::o;33712:191::-;33752:4;33772:20;33790:1;33772:20;:::i;:::-;33767:25;;33806:20;33824:1;33806:20;:::i;:::-;33801:25;;33845:1;33842;33839:8;33836:2;;;33850:18;;:::i;:::-;33836:2;33895:1;33892;33888:9;33880:17;;33757:146;;;;:::o;33909:96::-;33946:7;33975:24;33993:5;33975:24;:::i;:::-;33964:35;;33954:51;;;:::o;34011:90::-;34045:7;34088:5;34081:13;34074:21;34063:32;;34053:48;;;:::o;34107:77::-;34144:7;34173:5;34162:16;;34152:32;;;:::o;34190:149::-;34226:7;34266:66;34259:5;34255:78;34244:89;;34234:105;;;:::o;34345:126::-;34382:7;34422:42;34415:5;34411:54;34400:65;;34390:81;;;:::o;34477:77::-;34514:7;34543:5;34532:16;;34522:32;;;:::o;34560:154::-;34644:6;34639:3;34634;34621:30;34706:1;34697:6;34692:3;34688:16;34681:27;34611:103;;;:::o;34720:307::-;34788:1;34798:113;34812:6;34809:1;34806:13;34798:113;;;34897:1;34892:3;34888:11;34882:18;34878:1;34873:3;34869:11;34862:39;34834:2;34831:1;34827:10;34822:15;;34798:113;;;34929:6;34926:1;34923:13;34920:2;;;35009:1;35000:6;34995:3;34991:16;34984:27;34920:2;34769:258;;;;:::o;35033:171::-;35072:3;35095:24;35113:5;35095:24;:::i;:::-;35086:33;;35141:4;35134:5;35131:15;35128:2;;;35149:18;;:::i;:::-;35128:2;35196:1;35189:5;35185:13;35178:20;;35076:128;;;:::o;35210:320::-;35254:6;35291:1;35285:4;35281:12;35271:22;;35338:1;35332:4;35328:12;35359:18;35349:2;;35415:4;35407:6;35403:17;35393:27;;35349:2;35477;35469:6;35466:14;35446:18;35443:38;35440:2;;;35496:18;;:::i;:::-;35440:2;35261:269;;;;:::o;35536:281::-;35619:27;35641:4;35619:27;:::i;:::-;35611:6;35607:40;35749:6;35737:10;35734:22;35713:18;35701:10;35698:34;35695:62;35692:2;;;35760:18;;:::i;:::-;35692:2;35800:10;35796:2;35789:22;35579:238;;;:::o;35823:233::-;35862:3;35885:24;35903:5;35885:24;:::i;:::-;35876:33;;35931:66;35924:5;35921:77;35918:2;;;36001:18;;:::i;:::-;35918:2;36048:1;36041:5;36037:13;36030:20;;35866:190;;;:::o;36062:176::-;36094:1;36111:20;36129:1;36111:20;:::i;:::-;36106:25;;36145:20;36163:1;36145:20;:::i;:::-;36140:25;;36184:1;36174:2;;36189:18;;:::i;:::-;36174:2;36230:1;36227;36223:9;36218:14;;36096:142;;;;:::o;36244:180::-;36292:77;36289:1;36282:88;36389:4;36386:1;36379:15;36413:4;36410:1;36403:15;36430:180;36478:77;36475:1;36468:88;36575:4;36572:1;36565:15;36599:4;36596:1;36589:15;36616:180;36664:77;36661:1;36654:88;36761:4;36758:1;36751:15;36785:4;36782:1;36775:15;36802:180;36850:77;36847:1;36840:88;36947:4;36944:1;36937:15;36971:4;36968:1;36961:15;36988:102;37029:6;37080:2;37076:7;37071:2;37064:5;37060:14;37056:28;37046:38;;37036:54;;;:::o;37096:182::-;37236:34;37232:1;37224:6;37220:14;37213:58;37202:76;:::o;37284:237::-;37424:34;37420:1;37412:6;37408:14;37401:58;37493:20;37488:2;37480:6;37476:15;37469:45;37390:131;:::o;37527:225::-;37667:34;37663:1;37655:6;37651:14;37644:58;37736:8;37731:2;37723:6;37719:15;37712:33;37633:119;:::o;37758:178::-;37898:30;37894:1;37886:6;37882:14;37875:54;37864:72;:::o;37942:223::-;38082:34;38078:1;38070:6;38066:14;38059:58;38151:6;38146:2;38138:6;38134:15;38127:31;38048:117;:::o;38171:175::-;38311:27;38307:1;38299:6;38295:14;38288:51;38277:69;:::o;38352:231::-;38492:34;38488:1;38480:6;38476:14;38469:58;38561:14;38556:2;38548:6;38544:15;38537:39;38458:125;:::o;38589:178::-;38729:30;38725:1;38717:6;38713:14;38706:54;38695:72;:::o;38773:243::-;38913:34;38909:1;38901:6;38897:14;38890:58;38982:26;38977:2;38969:6;38965:15;38958:51;38879:137;:::o;39022:229::-;39162:34;39158:1;39150:6;39146:14;39139:58;39231:12;39226:2;39218:6;39214:15;39207:37;39128:123;:::o;39257:228::-;39397:34;39393:1;39385:6;39381:14;39374:58;39466:11;39461:2;39453:6;39449:15;39442:36;39363:122;:::o;39491:182::-;39631:34;39627:1;39619:6;39615:14;39608:58;39597:76;:::o;39679:231::-;39819:34;39815:1;39807:6;39803:14;39796:58;39888:14;39883:2;39875:6;39871:15;39864:39;39785:125;:::o;39916:231::-;40056:34;40052:1;40044:6;40040:14;40033:58;40125:14;40120:2;40112:6;40108:15;40101:39;40022:125;:::o;40153:182::-;40293:34;40289:1;40281:6;40277:14;40270:58;40259:76;:::o;40341:228::-;40481:34;40477:1;40469:6;40465:14;40458:58;40550:11;40545:2;40537:6;40533:15;40526:36;40447:122;:::o;40575:220::-;40715:34;40711:1;40703:6;40699:14;40692:58;40784:3;40779:2;40771:6;40767:15;40760:28;40681:114;:::o;40801:236::-;40941:34;40937:1;40929:6;40925:14;40918:58;41010:19;41005:2;40997:6;40993:15;40986:44;40907:130;:::o;41043:173::-;41183:25;41179:1;41171:6;41167:14;41160:49;41149:67;:::o;41222:232::-;41362:34;41358:1;41350:6;41346:14;41339:58;41431:15;41426:2;41418:6;41414:15;41407:40;41328:126;:::o;41460:167::-;41600:19;41596:1;41588:6;41584:14;41577:43;41566:61;:::o;41633:234::-;41773:34;41769:1;41761:6;41757:14;41750:58;41842:17;41837:2;41829:6;41825:15;41818:42;41739:128;:::o;41873:122::-;41946:24;41964:5;41946:24;:::i;:::-;41939:5;41936:35;41926:2;;41985:1;41982;41975:12;41926:2;41916:79;:::o;42001:116::-;42071:21;42086:5;42071:21;:::i;:::-;42064:5;42061:32;42051:2;;42107:1;42104;42097:12;42051:2;42041:76;:::o;42123:122::-;42196:24;42214:5;42196:24;:::i;:::-;42189:5;42186:35;42176:2;;42235:1;42232;42225:12;42176:2;42166:79;:::o;42251:120::-;42323:23;42340:5;42323:23;:::i;:::-;42316:5;42313:34;42303:2;;42361:1;42358;42351:12;42303:2;42293:78;:::o;42377:122::-;42450:24;42468:5;42450:24;:::i;:::-;42443:5;42440:35;42430:2;;42489:1;42486;42479:12;42430:2;42420:79;:::o

Swarm Source

ipfs://226ed1850b5017af6b9ca1012fdd518bb26e7a886c1fa17e0e53934d20544a4d
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.