ETH Price: $3,190.12 (-13.92%)

Token

Mizuki (MZK)
 

Overview

Max Total Supply

578 MZK

Holders

66

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
poorcunt.eth
Balance
10 MZK
0x4e88a7ef592a49b3e9b7546cde0e8ed320d3e8a9
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:
Mizuki

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-08
*/

// File: @openzeppelin/contracts/utils/Counters.sol


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// 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/Context.sol


// 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/access/Ownable.sol


// 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/utils/Address.sol


// 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/token/ERC721/IERC721Receiver.sol


// 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/utils/introspection/IERC165.sol


// 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/utils/introspection/ERC165.sol


// 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/IERC721.sol


// 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/extensions/IERC721Metadata.sol


// 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/token/ERC721/ERC721.sol


// 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: contracts/Mizuki.sol

//SPDX-License-Identifier: MIT
/*                            
    
*/
pragma solidity ^0.8.0;




contract Mizuki is ERC721, Ownable {
    using Counters for Counters.Counter;
    using Strings for uint256;

    Counters.Counter private tokenIdCounter;

    string baseURI;
    string public baseExtension = ".json";
    string public preRevealURI;
    uint256 public currentPrice = 0.02 ether;
    uint256 public total = 5555;
    uint256 public maxFree = 555;
    bool public paused = true;

    constructor(string memory _initBaseURI)
        ERC721("Mizuki", "MZK")
    {
        setBaseURI(_initBaseURI);
        
    }

    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }

    function freeMintMizuki(uint256 mintAmount) public {
        uint256 supply = tokenIdCounter.current();
        require(!paused, "Sale paused");
        require(supply + mintAmount < maxFree, "No more free Mizuki left");
        mintMizuki(msg.sender, mintAmount);
    }

    function mint(uint256 mintAmount) external payable {
        uint256 supply = tokenIdCounter.current();
        require(!paused, "Sale paused");
        require(mintAmount < 11, "You can only mint 10 Mizuki at a time");
        require(
            supply + mintAmount < total + 1,
            "Exceeds maximum Mizuki supply"
        );
        require(
            msg.value >= currentPrice * mintAmount,
            "Not enough Ether sent"
        );

        mintMizuki(msg.sender, mintAmount);
    }

    function mintMizuki(address addr, uint256 mintAmount) private {
        for (uint256 i = 0; i < mintAmount; i++) {
            tokenIdCounter.increment();
            _safeMint(addr, tokenIdCounter.current());
        }
    }

    function getCurrentId() external view returns (uint256) {
        return tokenIdCounter.current();
    }

    function totalSupply() public view returns (uint256) {
        return tokenIdCounter.current();
    }

    
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

    //----------------Owner functions--------------------
    function pause(bool val) public onlyOwner {
        paused = val;
    }

    function setPrice(uint256 _newPrice) public onlyOwner {
        currentPrice = _newPrice;
    }

    function setMaxFree(uint256 _maxFree) public onlyOwner {
        maxFree = _maxFree;
    }


    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }


    function withdraw() public onlyOwner {
        uint256 amount = address(this).balance;
        (bool success, ) = msg.sender.call{value: amount}("");
        require(success, "Failed to send Ether");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","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":"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":[{"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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"freeMintMizuki","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preRevealURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFree","type":"uint256"}],"name":"setMaxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000332565b5066470de4df820000600b556115b3600c5561022b600d556001600e60006101000a81548160ff0219169083151502179055503480156200009157600080fd5b5060405162004307380380620043078339818101604052810190620000b7919062000460565b6040518060400160405280600681526020017f4d697a756b6900000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d5a4b000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013b92919062000332565b5080600190805190602001906200015492919062000332565b505050620001776200016b6200018f60201b60201c565b6200019760201b60201c565b62000188816200025d60201b60201c565b50620006b8565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200026d6200018f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002936200030860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e390620004d8565b60405180910390fd5b80600890805190602001906200030492919062000332565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034090620005a0565b90600052602060002090601f016020900481019282620003645760008555620003b0565b82601f106200037f57805160ff1916838001178555620003b0565b82800160010185558215620003b0579182015b82811115620003af57825182559160200191906001019062000392565b5b509050620003bf9190620003c3565b5090565b5b80821115620003de576000816000905550600101620003c4565b5090565b6000620003f9620003f38462000523565b620004fa565b9050828152602081018484840111156200041857620004176200066f565b5b620004258482856200056a565b509392505050565b600082601f8301126200044557620004446200066a565b5b815162000457848260208601620003e2565b91505092915050565b60006020828403121562000479576200047862000679565b5b600082015167ffffffffffffffff8111156200049a576200049962000674565b5b620004a8848285016200042d565b91505092915050565b6000620004c060208362000559565b9150620004cd826200068f565b602082019050919050565b60006020820190508181036000830152620004f381620004b1565b9050919050565b60006200050662000519565b9050620005148282620005d6565b919050565b6000604051905090565b600067ffffffffffffffff8211156200054157620005406200063b565b5b6200054c826200067e565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200058a5780820151818401526020810190506200056d565b838111156200059a576000848401525b50505050565b60006002820490506001821680620005b957607f821691505b60208210811415620005d057620005cf6200060c565b5b50919050565b620005e1826200067e565b810181811067ffffffffffffffff821117156200060357620006026200063b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613c3f80620006c86000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063a0712d6811610095578063c87b56dd11610064578063c87b56dd14610665578063d755bf99146106a2578063e985e9c5146106cb578063f2fde38b14610708576101d8565b8063a0712d68146105cc578063a22cb465146105e8578063b88d4fde14610611578063c66828621461063a576101d8565b80638da5cb5b116100d15780638da5cb5b1461052257806391b7f5ed1461054d57806395d89b41146105765780639d1b464a146105a1576101d8565b806370a082311461047a578063715018a6146104b757806379b6ed36146104ce5780637c9ecc25146104f9576101d8565b80632ddbd13a1161017a57806355f804b31161014957806355f804b3146103be5780635c975abb146103e75780636352211e146104125780636c1438621461044f576101d8565b80632ddbd13a146103285780633ccfd60b1461035357806342842e0e1461036a578063485a68a314610393576101d8565b8063081812fc116101b6578063081812fc1461026e578063095ea7b3146102ab57806318160ddd146102d457806323b872dd146102ff576101d8565b806301ffc9a7146101dd57806302329a291461021a57806306fdde0314610243575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061288b565b610731565b6040516102119190612e7c565b60405180910390f35b34801561022657600080fd5b50610241600480360381019061023c919061285e565b610813565b005b34801561024f57600080fd5b506102586108ac565b6040516102659190612e97565b60405180910390f35b34801561027a57600080fd5b506102956004803603810190610290919061292e565b61093e565b6040516102a29190612e15565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd919061281e565b6109c3565b005b3480156102e057600080fd5b506102e9610adb565b6040516102f69190613179565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190612708565b610aec565b005b34801561033457600080fd5b5061033d610b4c565b60405161034a9190613179565b60405180910390f35b34801561035f57600080fd5b50610368610b52565b005b34801561037657600080fd5b50610391600480360381019061038c9190612708565b610c83565b005b34801561039f57600080fd5b506103a8610ca3565b6040516103b59190613179565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906128e5565b610ca9565b005b3480156103f357600080fd5b506103fc610d3f565b6040516104099190612e7c565b60405180910390f35b34801561041e57600080fd5b506104396004803603810190610434919061292e565b610d52565b6040516104469190612e15565b60405180910390f35b34801561045b57600080fd5b50610464610e04565b6040516104719190613179565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c919061269b565b610e15565b6040516104ae9190613179565b60405180910390f35b3480156104c357600080fd5b506104cc610ecd565b005b3480156104da57600080fd5b506104e3610f55565b6040516104f09190612e97565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b919061292e565b610fe3565b005b34801561052e57600080fd5b5061053761109e565b6040516105449190612e15565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f919061292e565b6110c8565b005b34801561058257600080fd5b5061058b61114e565b6040516105989190612e97565b60405180910390f35b3480156105ad57600080fd5b506105b66111e0565b6040516105c39190613179565b60405180910390f35b6105e660048036038101906105e1919061292e565b6111e6565b005b3480156105f457600080fd5b5061060f600480360381019061060a91906127de565b611340565b005b34801561061d57600080fd5b506106386004803603810190610633919061275b565b611356565b005b34801561064657600080fd5b5061064f6113b8565b60405161065c9190612e97565b60405180910390f35b34801561067157600080fd5b5061068c6004803603810190610687919061292e565b611446565b6040516106999190612e97565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c4919061292e565b6114f0565b005b3480156106d757600080fd5b506106f260048036038101906106ed91906126c8565b611576565b6040516106ff9190612e7c565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061269b565b61160a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107fc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080c575061080b82611702565b5b9050919050565b61081b61176c565b73ffffffffffffffffffffffffffffffffffffffff1661083961109e565b73ffffffffffffffffffffffffffffffffffffffff161461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690613099565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546108bb90613449565b80601f01602080910402602001604051908101604052809291908181526020018280546108e790613449565b80156109345780601f1061090957610100808354040283529160200191610934565b820191906000526020600020905b81548152906001019060200180831161091757829003601f168201915b5050505050905090565b600061094982611774565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613079565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ce82610d52565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a36906130f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a5e61176c565b73ffffffffffffffffffffffffffffffffffffffff161480610a8d5750610a8c81610a8761176c565b611576565b5b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390612ff9565b60405180910390fd5b610ad683836117e0565b505050565b6000610ae76007611899565b905090565b610afd610af761176c565b826118a7565b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390613119565b60405180910390fd5b610b47838383611985565b505050565b600c5481565b610b5a61176c565b73ffffffffffffffffffffffffffffffffffffffff16610b7861109e565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613099565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610bf990612e00565b60006040518083038185875af1925050503d8060008114610c36576040519150601f19603f3d011682016040523d82523d6000602084013e610c3b565b606091505b5050905080610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612f79565b60405180910390fd5b5050565b610c9e83838360405180602001604052806000815250611356565b505050565b600d5481565b610cb161176c565b73ffffffffffffffffffffffffffffffffffffffff16610ccf61109e565b73ffffffffffffffffffffffffffffffffffffffff1614610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90613099565b60405180910390fd5b8060089080519060200190610d3b9291906124af565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290613039565b60405180910390fd5b80915050919050565b6000610e106007611899565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613019565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed561176c565b73ffffffffffffffffffffffffffffffffffffffff16610ef361109e565b73ffffffffffffffffffffffffffffffffffffffff1614610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090613099565b60405180910390fd5b610f536000611be1565b565b600a8054610f6290613449565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613449565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b505050505081565b6000610fef6007611899565b9050600e60009054906101000a900460ff1615611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612eb9565b60405180910390fd5b600d548282611050919061327e565b10611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790613139565b60405180910390fd5b61109a3383611ca7565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110d061176c565b73ffffffffffffffffffffffffffffffffffffffff166110ee61109e565b73ffffffffffffffffffffffffffffffffffffffff1614611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613099565b60405180910390fd5b80600b8190555050565b60606001805461115d90613449565b80601f016020809104026020016040519081016040528092919081815260200182805461118990613449565b80156111d65780601f106111ab576101008083540402835291602001916111d6565b820191906000526020600020905b8154815290600101906020018083116111b957829003601f168201915b5050505050905090565b600b5481565b60006111f26007611899565b9050600e60009054906101000a900460ff1615611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612eb9565b60405180910390fd5b600b8210611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613159565b60405180910390fd5b6001600c54611296919061327e565b82826112a2919061327e565b106112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d990612f59565b60405180910390fd5b81600b546112f09190613305565b341015611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990612ed9565b60405180910390fd5b61133c3383611ca7565b5050565b61135261134b61176c565b8383611ce7565b5050565b61136761136161176c565b836118a7565b6113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90613119565b60405180910390fd5b6113b284848484611e54565b50505050565b600980546113c590613449565b80601f01602080910402602001604051908101604052809291908181526020018280546113f190613449565b801561143e5780601f106114135761010080835404028352916020019161143e565b820191906000526020600020905b81548152906001019060200180831161142157829003601f168201915b505050505081565b606061145182611774565b611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906130d9565b60405180910390fd5b600061149a611eb0565b905060008151116114ba57604051806020016040528060008152506114e8565b806114c484611f42565b60096040516020016114d893929190612dcf565b6040516020818303038152906040525b915050919050565b6114f861176c565b73ffffffffffffffffffffffffffffffffffffffff1661151661109e565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613099565b60405180910390fd5b80600d8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61161261176c565b73ffffffffffffffffffffffffffffffffffffffff1661163061109e565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90613099565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90612f19565b60405180910390fd5b6116ff81611be1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661185383610d52565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006118b282611774565b6118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890612fd9565b60405180910390fd5b60006118fc83610d52565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061196b57508373ffffffffffffffffffffffffffffffffffffffff166119538461093e565b73ffffffffffffffffffffffffffffffffffffffff16145b8061197c575061197b8185611576565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119a582610d52565b73ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f2906130b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290612f99565b60405180910390fd5b611a768383836120a3565b611a816000826117e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ad1919061335f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b28919061327e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015611ce257611cbc60076120a8565b611ccf83611cca6007611899565b6120be565b8080611cda906134ac565b915050611caa565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90612fb9565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e479190612e7c565b60405180910390a3505050565b611e5f848484611985565b611e6b848484846120dc565b611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea190612ef9565b60405180910390fd5b50505050565b606060088054611ebf90613449565b80601f0160208091040260200160405190810160405280929190818152602001828054611eeb90613449565b8015611f385780601f10611f0d57610100808354040283529160200191611f38565b820191906000526020600020905b815481529060010190602001808311611f1b57829003601f168201915b5050505050905090565b60606000821415611f8a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061209e565b600082905060005b60008214611fbc578080611fa5906134ac565b915050600a82611fb591906132d4565b9150611f92565b60008167ffffffffffffffff811115611fd857611fd76135e2565b5b6040519080825280601f01601f19166020018201604052801561200a5781602001600182028036833780820191505090505b5090505b6000851461209757600182612023919061335f565b9150600a8561203291906134f5565b603061203e919061327e565b60f81b818381518110612054576120536135b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561209091906132d4565b945061200e565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b6120d8828260405180602001604052806000815250612273565b5050565b60006120fd8473ffffffffffffffffffffffffffffffffffffffff166122ce565b15612266578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261212661176c565b8786866040518563ffffffff1660e01b81526004016121489493929190612e30565b602060405180830381600087803b15801561216257600080fd5b505af192505050801561219357506040513d601f19601f8201168201806040525081019061219091906128b8565b60015b612216573d80600081146121c3576040519150601f19603f3d011682016040523d82523d6000602084013e6121c8565b606091505b5060008151141561220e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220590612ef9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061226b565b600190505b949350505050565b61227d83836122e1565b61228a60008484846120dc565b6122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090612ef9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890613059565b60405180910390fd5b61235a81611774565b1561239a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239190612f39565b60405180910390fd5b6123a6600083836120a3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f6919061327e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546124bb90613449565b90600052602060002090601f0160209004810192826124dd5760008555612524565b82601f106124f657805160ff1916838001178555612524565b82800160010185558215612524579182015b82811115612523578251825591602001919060010190612508565b5b5090506125319190612535565b5090565b5b8082111561254e576000816000905550600101612536565b5090565b6000612565612560846131b9565b613194565b90508281526020810184848401111561258157612580613616565b5b61258c848285613407565b509392505050565b60006125a76125a2846131ea565b613194565b9050828152602081018484840111156125c3576125c2613616565b5b6125ce848285613407565b509392505050565b6000813590506125e581613bad565b92915050565b6000813590506125fa81613bc4565b92915050565b60008135905061260f81613bdb565b92915050565b60008151905061262481613bdb565b92915050565b600082601f83011261263f5761263e613611565b5b813561264f848260208601612552565b91505092915050565b600082601f83011261266d5761266c613611565b5b813561267d848260208601612594565b91505092915050565b60008135905061269581613bf2565b92915050565b6000602082840312156126b1576126b0613620565b5b60006126bf848285016125d6565b91505092915050565b600080604083850312156126df576126de613620565b5b60006126ed858286016125d6565b92505060206126fe858286016125d6565b9150509250929050565b60008060006060848603121561272157612720613620565b5b600061272f868287016125d6565b9350506020612740868287016125d6565b925050604061275186828701612686565b9150509250925092565b6000806000806080858703121561277557612774613620565b5b6000612783878288016125d6565b9450506020612794878288016125d6565b93505060406127a587828801612686565b925050606085013567ffffffffffffffff8111156127c6576127c561361b565b5b6127d28782880161262a565b91505092959194509250565b600080604083850312156127f5576127f4613620565b5b6000612803858286016125d6565b9250506020612814858286016125eb565b9150509250929050565b6000806040838503121561283557612834613620565b5b6000612843858286016125d6565b925050602061285485828601612686565b9150509250929050565b60006020828403121561287457612873613620565b5b6000612882848285016125eb565b91505092915050565b6000602082840312156128a1576128a0613620565b5b60006128af84828501612600565b91505092915050565b6000602082840312156128ce576128cd613620565b5b60006128dc84828501612615565b91505092915050565b6000602082840312156128fb576128fa613620565b5b600082013567ffffffffffffffff8111156129195761291861361b565b5b61292584828501612658565b91505092915050565b60006020828403121561294457612943613620565b5b600061295284828501612686565b91505092915050565b61296481613393565b82525050565b612973816133a5565b82525050565b600061298482613230565b61298e8185613246565b935061299e818560208601613416565b6129a781613625565b840191505092915050565b60006129bd8261323b565b6129c78185613262565b93506129d7818560208601613416565b6129e081613625565b840191505092915050565b60006129f68261323b565b612a008185613273565b9350612a10818560208601613416565b80840191505092915050565b60008154612a2981613449565b612a338186613273565b94506001821660008114612a4e5760018114612a5f57612a92565b60ff19831686528186019350612a92565b612a688561321b565b60005b83811015612a8a57815481890152600182019150602081019050612a6b565b838801955050505b50505092915050565b6000612aa8600b83613262565b9150612ab382613636565b602082019050919050565b6000612acb601583613262565b9150612ad68261365f565b602082019050919050565b6000612aee603283613262565b9150612af982613688565b604082019050919050565b6000612b11602683613262565b9150612b1c826136d7565b604082019050919050565b6000612b34601c83613262565b9150612b3f82613726565b602082019050919050565b6000612b57601d83613262565b9150612b628261374f565b602082019050919050565b6000612b7a601483613262565b9150612b8582613778565b602082019050919050565b6000612b9d602483613262565b9150612ba8826137a1565b604082019050919050565b6000612bc0601983613262565b9150612bcb826137f0565b602082019050919050565b6000612be3602c83613262565b9150612bee82613819565b604082019050919050565b6000612c06603883613262565b9150612c1182613868565b604082019050919050565b6000612c29602a83613262565b9150612c34826138b7565b604082019050919050565b6000612c4c602983613262565b9150612c5782613906565b604082019050919050565b6000612c6f602083613262565b9150612c7a82613955565b602082019050919050565b6000612c92602c83613262565b9150612c9d8261397e565b604082019050919050565b6000612cb5602083613262565b9150612cc0826139cd565b602082019050919050565b6000612cd8602983613262565b9150612ce3826139f6565b604082019050919050565b6000612cfb602f83613262565b9150612d0682613a45565b604082019050919050565b6000612d1e602183613262565b9150612d2982613a94565b604082019050919050565b6000612d41600083613257565b9150612d4c82613ae3565b600082019050919050565b6000612d64603183613262565b9150612d6f82613ae6565b604082019050919050565b6000612d87601883613262565b9150612d9282613b35565b602082019050919050565b6000612daa602583613262565b9150612db582613b5e565b604082019050919050565b612dc9816133fd565b82525050565b6000612ddb82866129eb565b9150612de782856129eb565b9150612df38284612a1c565b9150819050949350505050565b6000612e0b82612d34565b9150819050919050565b6000602082019050612e2a600083018461295b565b92915050565b6000608082019050612e45600083018761295b565b612e52602083018661295b565b612e5f6040830185612dc0565b8181036060830152612e718184612979565b905095945050505050565b6000602082019050612e91600083018461296a565b92915050565b60006020820190508181036000830152612eb181846129b2565b905092915050565b60006020820190508181036000830152612ed281612a9b565b9050919050565b60006020820190508181036000830152612ef281612abe565b9050919050565b60006020820190508181036000830152612f1281612ae1565b9050919050565b60006020820190508181036000830152612f3281612b04565b9050919050565b60006020820190508181036000830152612f5281612b27565b9050919050565b60006020820190508181036000830152612f7281612b4a565b9050919050565b60006020820190508181036000830152612f9281612b6d565b9050919050565b60006020820190508181036000830152612fb281612b90565b9050919050565b60006020820190508181036000830152612fd281612bb3565b9050919050565b60006020820190508181036000830152612ff281612bd6565b9050919050565b6000602082019050818103600083015261301281612bf9565b9050919050565b6000602082019050818103600083015261303281612c1c565b9050919050565b6000602082019050818103600083015261305281612c3f565b9050919050565b6000602082019050818103600083015261307281612c62565b9050919050565b6000602082019050818103600083015261309281612c85565b9050919050565b600060208201905081810360008301526130b281612ca8565b9050919050565b600060208201905081810360008301526130d281612ccb565b9050919050565b600060208201905081810360008301526130f281612cee565b9050919050565b6000602082019050818103600083015261311281612d11565b9050919050565b6000602082019050818103600083015261313281612d57565b9050919050565b6000602082019050818103600083015261315281612d7a565b9050919050565b6000602082019050818103600083015261317281612d9d565b9050919050565b600060208201905061318e6000830184612dc0565b92915050565b600061319e6131af565b90506131aa828261347b565b919050565b6000604051905090565b600067ffffffffffffffff8211156131d4576131d36135e2565b5b6131dd82613625565b9050602081019050919050565b600067ffffffffffffffff821115613205576132046135e2565b5b61320e82613625565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613289826133fd565b9150613294836133fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132c9576132c8613526565b5b828201905092915050565b60006132df826133fd565b91506132ea836133fd565b9250826132fa576132f9613555565b5b828204905092915050565b6000613310826133fd565b915061331b836133fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561335457613353613526565b5b828202905092915050565b600061336a826133fd565b9150613375836133fd565b92508282101561338857613387613526565b5b828203905092915050565b600061339e826133dd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613434578082015181840152602081019050613419565b83811115613443576000848401525b50505050565b6000600282049050600182168061346157607f821691505b6020821081141561347557613474613584565b5b50919050565b61348482613625565b810181811067ffffffffffffffff821117156134a3576134a26135e2565b5b80604052505050565b60006134b7826133fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134ea576134e9613526565b5b600182019050919050565b6000613500826133fd565b915061350b836133fd565b92508261351b5761351a613555565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682045746865722073656e740000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f45786365656473206d6178696d756d204d697a756b6920737570706c79000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f206d6f72652066726565204d697a756b69206c6566740000000000000000600082015250565b7f596f752063616e206f6e6c79206d696e74203130204d697a756b69206174206160008201527f2074696d65000000000000000000000000000000000000000000000000000000602082015250565b613bb681613393565b8114613bc157600080fd5b50565b613bcd816133a5565b8114613bd857600080fd5b50565b613be4816133b1565b8114613bef57600080fd5b50565b613bfb816133fd565b8114613c0657600080fd5b5056fea264697066735822122062e9019f1ac8358be475b1c6b36ce7f27d8205fe8f7db3ca25c063e992fb177b64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a674c4c6d3333714a534276694c516d4442345a36745563614342614e38345557396539586a6f574c4b384e2f00000000000000000000

Deployed Bytecode

0x6080604052600436106101d85760003560e01c806370a0823111610102578063a0712d6811610095578063c87b56dd11610064578063c87b56dd14610665578063d755bf99146106a2578063e985e9c5146106cb578063f2fde38b14610708576101d8565b8063a0712d68146105cc578063a22cb465146105e8578063b88d4fde14610611578063c66828621461063a576101d8565b80638da5cb5b116100d15780638da5cb5b1461052257806391b7f5ed1461054d57806395d89b41146105765780639d1b464a146105a1576101d8565b806370a082311461047a578063715018a6146104b757806379b6ed36146104ce5780637c9ecc25146104f9576101d8565b80632ddbd13a1161017a57806355f804b31161014957806355f804b3146103be5780635c975abb146103e75780636352211e146104125780636c1438621461044f576101d8565b80632ddbd13a146103285780633ccfd60b1461035357806342842e0e1461036a578063485a68a314610393576101d8565b8063081812fc116101b6578063081812fc1461026e578063095ea7b3146102ab57806318160ddd146102d457806323b872dd146102ff576101d8565b806301ffc9a7146101dd57806302329a291461021a57806306fdde0314610243575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061288b565b610731565b6040516102119190612e7c565b60405180910390f35b34801561022657600080fd5b50610241600480360381019061023c919061285e565b610813565b005b34801561024f57600080fd5b506102586108ac565b6040516102659190612e97565b60405180910390f35b34801561027a57600080fd5b506102956004803603810190610290919061292e565b61093e565b6040516102a29190612e15565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd919061281e565b6109c3565b005b3480156102e057600080fd5b506102e9610adb565b6040516102f69190613179565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190612708565b610aec565b005b34801561033457600080fd5b5061033d610b4c565b60405161034a9190613179565b60405180910390f35b34801561035f57600080fd5b50610368610b52565b005b34801561037657600080fd5b50610391600480360381019061038c9190612708565b610c83565b005b34801561039f57600080fd5b506103a8610ca3565b6040516103b59190613179565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906128e5565b610ca9565b005b3480156103f357600080fd5b506103fc610d3f565b6040516104099190612e7c565b60405180910390f35b34801561041e57600080fd5b506104396004803603810190610434919061292e565b610d52565b6040516104469190612e15565b60405180910390f35b34801561045b57600080fd5b50610464610e04565b6040516104719190613179565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c919061269b565b610e15565b6040516104ae9190613179565b60405180910390f35b3480156104c357600080fd5b506104cc610ecd565b005b3480156104da57600080fd5b506104e3610f55565b6040516104f09190612e97565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b919061292e565b610fe3565b005b34801561052e57600080fd5b5061053761109e565b6040516105449190612e15565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f919061292e565b6110c8565b005b34801561058257600080fd5b5061058b61114e565b6040516105989190612e97565b60405180910390f35b3480156105ad57600080fd5b506105b66111e0565b6040516105c39190613179565b60405180910390f35b6105e660048036038101906105e1919061292e565b6111e6565b005b3480156105f457600080fd5b5061060f600480360381019061060a91906127de565b611340565b005b34801561061d57600080fd5b506106386004803603810190610633919061275b565b611356565b005b34801561064657600080fd5b5061064f6113b8565b60405161065c9190612e97565b60405180910390f35b34801561067157600080fd5b5061068c6004803603810190610687919061292e565b611446565b6040516106999190612e97565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c4919061292e565b6114f0565b005b3480156106d757600080fd5b506106f260048036038101906106ed91906126c8565b611576565b6040516106ff9190612e7c565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061269b565b61160a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107fc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080c575061080b82611702565b5b9050919050565b61081b61176c565b73ffffffffffffffffffffffffffffffffffffffff1661083961109e565b73ffffffffffffffffffffffffffffffffffffffff161461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690613099565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546108bb90613449565b80601f01602080910402602001604051908101604052809291908181526020018280546108e790613449565b80156109345780601f1061090957610100808354040283529160200191610934565b820191906000526020600020905b81548152906001019060200180831161091757829003601f168201915b5050505050905090565b600061094982611774565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613079565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ce82610d52565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a36906130f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a5e61176c565b73ffffffffffffffffffffffffffffffffffffffff161480610a8d5750610a8c81610a8761176c565b611576565b5b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390612ff9565b60405180910390fd5b610ad683836117e0565b505050565b6000610ae76007611899565b905090565b610afd610af761176c565b826118a7565b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390613119565b60405180910390fd5b610b47838383611985565b505050565b600c5481565b610b5a61176c565b73ffffffffffffffffffffffffffffffffffffffff16610b7861109e565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613099565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610bf990612e00565b60006040518083038185875af1925050503d8060008114610c36576040519150601f19603f3d011682016040523d82523d6000602084013e610c3b565b606091505b5050905080610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690612f79565b60405180910390fd5b5050565b610c9e83838360405180602001604052806000815250611356565b505050565b600d5481565b610cb161176c565b73ffffffffffffffffffffffffffffffffffffffff16610ccf61109e565b73ffffffffffffffffffffffffffffffffffffffff1614610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90613099565b60405180910390fd5b8060089080519060200190610d3b9291906124af565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290613039565b60405180910390fd5b80915050919050565b6000610e106007611899565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613019565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed561176c565b73ffffffffffffffffffffffffffffffffffffffff16610ef361109e565b73ffffffffffffffffffffffffffffffffffffffff1614610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090613099565b60405180910390fd5b610f536000611be1565b565b600a8054610f6290613449565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613449565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b505050505081565b6000610fef6007611899565b9050600e60009054906101000a900460ff1615611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612eb9565b60405180910390fd5b600d548282611050919061327e565b10611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790613139565b60405180910390fd5b61109a3383611ca7565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110d061176c565b73ffffffffffffffffffffffffffffffffffffffff166110ee61109e565b73ffffffffffffffffffffffffffffffffffffffff1614611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613099565b60405180910390fd5b80600b8190555050565b60606001805461115d90613449565b80601f016020809104026020016040519081016040528092919081815260200182805461118990613449565b80156111d65780601f106111ab576101008083540402835291602001916111d6565b820191906000526020600020905b8154815290600101906020018083116111b957829003601f168201915b5050505050905090565b600b5481565b60006111f26007611899565b9050600e60009054906101000a900460ff1615611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612eb9565b60405180910390fd5b600b8210611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613159565b60405180910390fd5b6001600c54611296919061327e565b82826112a2919061327e565b106112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d990612f59565b60405180910390fd5b81600b546112f09190613305565b341015611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990612ed9565b60405180910390fd5b61133c3383611ca7565b5050565b61135261134b61176c565b8383611ce7565b5050565b61136761136161176c565b836118a7565b6113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90613119565b60405180910390fd5b6113b284848484611e54565b50505050565b600980546113c590613449565b80601f01602080910402602001604051908101604052809291908181526020018280546113f190613449565b801561143e5780601f106114135761010080835404028352916020019161143e565b820191906000526020600020905b81548152906001019060200180831161142157829003601f168201915b505050505081565b606061145182611774565b611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906130d9565b60405180910390fd5b600061149a611eb0565b905060008151116114ba57604051806020016040528060008152506114e8565b806114c484611f42565b60096040516020016114d893929190612dcf565b6040516020818303038152906040525b915050919050565b6114f861176c565b73ffffffffffffffffffffffffffffffffffffffff1661151661109e565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390613099565b60405180910390fd5b80600d8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61161261176c565b73ffffffffffffffffffffffffffffffffffffffff1661163061109e565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90613099565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90612f19565b60405180910390fd5b6116ff81611be1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661185383610d52565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006118b282611774565b6118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890612fd9565b60405180910390fd5b60006118fc83610d52565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061196b57508373ffffffffffffffffffffffffffffffffffffffff166119538461093e565b73ffffffffffffffffffffffffffffffffffffffff16145b8061197c575061197b8185611576565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119a582610d52565b73ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f2906130b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290612f99565b60405180910390fd5b611a768383836120a3565b611a816000826117e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ad1919061335f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b28919061327e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015611ce257611cbc60076120a8565b611ccf83611cca6007611899565b6120be565b8080611cda906134ac565b915050611caa565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90612fb9565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e479190612e7c565b60405180910390a3505050565b611e5f848484611985565b611e6b848484846120dc565b611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea190612ef9565b60405180910390fd5b50505050565b606060088054611ebf90613449565b80601f0160208091040260200160405190810160405280929190818152602001828054611eeb90613449565b8015611f385780601f10611f0d57610100808354040283529160200191611f38565b820191906000526020600020905b815481529060010190602001808311611f1b57829003601f168201915b5050505050905090565b60606000821415611f8a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061209e565b600082905060005b60008214611fbc578080611fa5906134ac565b915050600a82611fb591906132d4565b9150611f92565b60008167ffffffffffffffff811115611fd857611fd76135e2565b5b6040519080825280601f01601f19166020018201604052801561200a5781602001600182028036833780820191505090505b5090505b6000851461209757600182612023919061335f565b9150600a8561203291906134f5565b603061203e919061327e565b60f81b818381518110612054576120536135b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561209091906132d4565b945061200e565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b6120d8828260405180602001604052806000815250612273565b5050565b60006120fd8473ffffffffffffffffffffffffffffffffffffffff166122ce565b15612266578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261212661176c565b8786866040518563ffffffff1660e01b81526004016121489493929190612e30565b602060405180830381600087803b15801561216257600080fd5b505af192505050801561219357506040513d601f19601f8201168201806040525081019061219091906128b8565b60015b612216573d80600081146121c3576040519150601f19603f3d011682016040523d82523d6000602084013e6121c8565b606091505b5060008151141561220e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220590612ef9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061226b565b600190505b949350505050565b61227d83836122e1565b61228a60008484846120dc565b6122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090612ef9565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890613059565b60405180910390fd5b61235a81611774565b1561239a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239190612f39565b60405180910390fd5b6123a6600083836120a3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f6919061327e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546124bb90613449565b90600052602060002090601f0160209004810192826124dd5760008555612524565b82601f106124f657805160ff1916838001178555612524565b82800160010185558215612524579182015b82811115612523578251825591602001919060010190612508565b5b5090506125319190612535565b5090565b5b8082111561254e576000816000905550600101612536565b5090565b6000612565612560846131b9565b613194565b90508281526020810184848401111561258157612580613616565b5b61258c848285613407565b509392505050565b60006125a76125a2846131ea565b613194565b9050828152602081018484840111156125c3576125c2613616565b5b6125ce848285613407565b509392505050565b6000813590506125e581613bad565b92915050565b6000813590506125fa81613bc4565b92915050565b60008135905061260f81613bdb565b92915050565b60008151905061262481613bdb565b92915050565b600082601f83011261263f5761263e613611565b5b813561264f848260208601612552565b91505092915050565b600082601f83011261266d5761266c613611565b5b813561267d848260208601612594565b91505092915050565b60008135905061269581613bf2565b92915050565b6000602082840312156126b1576126b0613620565b5b60006126bf848285016125d6565b91505092915050565b600080604083850312156126df576126de613620565b5b60006126ed858286016125d6565b92505060206126fe858286016125d6565b9150509250929050565b60008060006060848603121561272157612720613620565b5b600061272f868287016125d6565b9350506020612740868287016125d6565b925050604061275186828701612686565b9150509250925092565b6000806000806080858703121561277557612774613620565b5b6000612783878288016125d6565b9450506020612794878288016125d6565b93505060406127a587828801612686565b925050606085013567ffffffffffffffff8111156127c6576127c561361b565b5b6127d28782880161262a565b91505092959194509250565b600080604083850312156127f5576127f4613620565b5b6000612803858286016125d6565b9250506020612814858286016125eb565b9150509250929050565b6000806040838503121561283557612834613620565b5b6000612843858286016125d6565b925050602061285485828601612686565b9150509250929050565b60006020828403121561287457612873613620565b5b6000612882848285016125eb565b91505092915050565b6000602082840312156128a1576128a0613620565b5b60006128af84828501612600565b91505092915050565b6000602082840312156128ce576128cd613620565b5b60006128dc84828501612615565b91505092915050565b6000602082840312156128fb576128fa613620565b5b600082013567ffffffffffffffff8111156129195761291861361b565b5b61292584828501612658565b91505092915050565b60006020828403121561294457612943613620565b5b600061295284828501612686565b91505092915050565b61296481613393565b82525050565b612973816133a5565b82525050565b600061298482613230565b61298e8185613246565b935061299e818560208601613416565b6129a781613625565b840191505092915050565b60006129bd8261323b565b6129c78185613262565b93506129d7818560208601613416565b6129e081613625565b840191505092915050565b60006129f68261323b565b612a008185613273565b9350612a10818560208601613416565b80840191505092915050565b60008154612a2981613449565b612a338186613273565b94506001821660008114612a4e5760018114612a5f57612a92565b60ff19831686528186019350612a92565b612a688561321b565b60005b83811015612a8a57815481890152600182019150602081019050612a6b565b838801955050505b50505092915050565b6000612aa8600b83613262565b9150612ab382613636565b602082019050919050565b6000612acb601583613262565b9150612ad68261365f565b602082019050919050565b6000612aee603283613262565b9150612af982613688565b604082019050919050565b6000612b11602683613262565b9150612b1c826136d7565b604082019050919050565b6000612b34601c83613262565b9150612b3f82613726565b602082019050919050565b6000612b57601d83613262565b9150612b628261374f565b602082019050919050565b6000612b7a601483613262565b9150612b8582613778565b602082019050919050565b6000612b9d602483613262565b9150612ba8826137a1565b604082019050919050565b6000612bc0601983613262565b9150612bcb826137f0565b602082019050919050565b6000612be3602c83613262565b9150612bee82613819565b604082019050919050565b6000612c06603883613262565b9150612c1182613868565b604082019050919050565b6000612c29602a83613262565b9150612c34826138b7565b604082019050919050565b6000612c4c602983613262565b9150612c5782613906565b604082019050919050565b6000612c6f602083613262565b9150612c7a82613955565b602082019050919050565b6000612c92602c83613262565b9150612c9d8261397e565b604082019050919050565b6000612cb5602083613262565b9150612cc0826139cd565b602082019050919050565b6000612cd8602983613262565b9150612ce3826139f6565b604082019050919050565b6000612cfb602f83613262565b9150612d0682613a45565b604082019050919050565b6000612d1e602183613262565b9150612d2982613a94565b604082019050919050565b6000612d41600083613257565b9150612d4c82613ae3565b600082019050919050565b6000612d64603183613262565b9150612d6f82613ae6565b604082019050919050565b6000612d87601883613262565b9150612d9282613b35565b602082019050919050565b6000612daa602583613262565b9150612db582613b5e565b604082019050919050565b612dc9816133fd565b82525050565b6000612ddb82866129eb565b9150612de782856129eb565b9150612df38284612a1c565b9150819050949350505050565b6000612e0b82612d34565b9150819050919050565b6000602082019050612e2a600083018461295b565b92915050565b6000608082019050612e45600083018761295b565b612e52602083018661295b565b612e5f6040830185612dc0565b8181036060830152612e718184612979565b905095945050505050565b6000602082019050612e91600083018461296a565b92915050565b60006020820190508181036000830152612eb181846129b2565b905092915050565b60006020820190508181036000830152612ed281612a9b565b9050919050565b60006020820190508181036000830152612ef281612abe565b9050919050565b60006020820190508181036000830152612f1281612ae1565b9050919050565b60006020820190508181036000830152612f3281612b04565b9050919050565b60006020820190508181036000830152612f5281612b27565b9050919050565b60006020820190508181036000830152612f7281612b4a565b9050919050565b60006020820190508181036000830152612f9281612b6d565b9050919050565b60006020820190508181036000830152612fb281612b90565b9050919050565b60006020820190508181036000830152612fd281612bb3565b9050919050565b60006020820190508181036000830152612ff281612bd6565b9050919050565b6000602082019050818103600083015261301281612bf9565b9050919050565b6000602082019050818103600083015261303281612c1c565b9050919050565b6000602082019050818103600083015261305281612c3f565b9050919050565b6000602082019050818103600083015261307281612c62565b9050919050565b6000602082019050818103600083015261309281612c85565b9050919050565b600060208201905081810360008301526130b281612ca8565b9050919050565b600060208201905081810360008301526130d281612ccb565b9050919050565b600060208201905081810360008301526130f281612cee565b9050919050565b6000602082019050818103600083015261311281612d11565b9050919050565b6000602082019050818103600083015261313281612d57565b9050919050565b6000602082019050818103600083015261315281612d7a565b9050919050565b6000602082019050818103600083015261317281612d9d565b9050919050565b600060208201905061318e6000830184612dc0565b92915050565b600061319e6131af565b90506131aa828261347b565b919050565b6000604051905090565b600067ffffffffffffffff8211156131d4576131d36135e2565b5b6131dd82613625565b9050602081019050919050565b600067ffffffffffffffff821115613205576132046135e2565b5b61320e82613625565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613289826133fd565b9150613294836133fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132c9576132c8613526565b5b828201905092915050565b60006132df826133fd565b91506132ea836133fd565b9250826132fa576132f9613555565b5b828204905092915050565b6000613310826133fd565b915061331b836133fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561335457613353613526565b5b828202905092915050565b600061336a826133fd565b9150613375836133fd565b92508282101561338857613387613526565b5b828203905092915050565b600061339e826133dd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613434578082015181840152602081019050613419565b83811115613443576000848401525b50505050565b6000600282049050600182168061346157607f821691505b6020821081141561347557613474613584565b5b50919050565b61348482613625565b810181811067ffffffffffffffff821117156134a3576134a26135e2565b5b80604052505050565b60006134b7826133fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134ea576134e9613526565b5b600182019050919050565b6000613500826133fd565b915061350b836133fd565b92508261351b5761351a613555565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682045746865722073656e740000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f45786365656473206d6178696d756d204d697a756b6920737570706c79000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f206d6f72652066726565204d697a756b69206c6566740000000000000000600082015250565b7f596f752063616e206f6e6c79206d696e74203130204d697a756b69206174206160008201527f2074696d65000000000000000000000000000000000000000000000000000000602082015250565b613bb681613393565b8114613bc157600080fd5b50565b613bcd816133a5565b8114613bd857600080fd5b50565b613be4816133b1565b8114613bef57600080fd5b50565b613bfb816133fd565b8114613c0657600080fd5b5056fea264697066735822122062e9019f1ac8358be475b1c6b36ce7f27d8205fe8f7db3ca25c063e992fb177b64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a674c4c6d3333714a534276694c516d4442345a36745563614342614e38345557396539586a6f574c4b384e2f00000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmZgLLm33qJSBviLQmDB4Z6tUcaCBaN84UW9e9XjoWLK8N/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5a674c4c6d3333714a534276694c516d4442345a367455
Arg [3] : 63614342614e38345557396539586a6f574c4b384e2f00000000000000000000


Deployed Bytecode Sourcemap

37787:3261:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25207:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40434:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27711:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27234:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39608:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28461:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38098:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40836:209;;;;;;;;;;;;;:::i;:::-;;28871:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38132:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40722:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38167:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25846:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39494:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25576:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;38018:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38448:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40515:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26321:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38051:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38731:517;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28004:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29127:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37974:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39725:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40620:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28230:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25207:305;25309:4;25361:25;25346:40;;;:11;:40;;;;:105;;;;25418:33;25403:48;;;:11;:48;;;;25346:105;:158;;;;25468:36;25492:11;25468:23;:36::i;:::-;25346:158;25326:178;;25207:305;;;:::o;40434:73::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40496:3:::1;40487:6;;:12;;;;;;;;;;;;;;;;;;40434:73:::0;:::o;26152:100::-;26206:13;26239:5;26232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26152:100;:::o;27711:221::-;27787:7;27815:16;27823:7;27815;:16::i;:::-;27807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27900:15;:24;27916:7;27900:24;;;;;;;;;;;;;;;;;;;;;27893:31;;27711:221;;;:::o;27234:411::-;27315:13;27331:23;27346:7;27331:14;:23::i;:::-;27315:39;;27379:5;27373:11;;:2;:11;;;;27365:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27473:5;27457:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27482:37;27499:5;27506:12;:10;:12::i;:::-;27482:16;:37::i;:::-;27457:62;27435:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27616:21;27625:2;27629:7;27616:8;:21::i;:::-;27304:341;27234:411;;:::o;39608:103::-;39652:7;39679:24;:14;:22;:24::i;:::-;39672:31;;39608:103;:::o;28461:339::-;28656:41;28675:12;:10;:12::i;:::-;28689:7;28656:18;:41::i;:::-;28648:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28764:28;28774:4;28780:2;28784:7;28764:9;:28::i;:::-;28461:339;;;:::o;38098:27::-;;;;:::o;40836:209::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40884:14:::1;40901:21;40884:38;;40934:12;40952:10;:15;;40975:6;40952:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40933:53;;;41005:7;40997:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;40873:172;;40836:209::o:0;28871:185::-;29009:39;29026:4;29032:2;29036:7;29009:39;;;;;;;;;;;;:16;:39::i;:::-;28871:185;;;:::o;38132:28::-;;;;:::o;40722:104::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40807:11:::1;40797:7;:21;;;;;;;;;;;;:::i;:::-;;40722:104:::0;:::o;38167:25::-;;;;;;;;;;;;;:::o;25846:239::-;25918:7;25938:13;25954:7;:16;25962:7;25954:16;;;;;;;;;;;;;;;;;;;;;25938:32;;26006:1;25989:19;;:5;:19;;;;25981:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:5;26065:12;;;25846:239;;;:::o;39494:106::-;39541:7;39568:24;:14;:22;:24::i;:::-;39561:31;;39494:106;:::o;25576:208::-;25648:7;25693:1;25676:19;;:5;:19;;;;25668:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25760:9;:16;25770:5;25760:16;;;;;;;;;;;;;;;;25753:23;;25576:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;38018:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38448:275::-;38510:14;38527:24;:14;:22;:24::i;:::-;38510:41;;38571:6;;;;;;;;;;;38570:7;38562:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;38634:7;;38621:10;38612:6;:19;;;;:::i;:::-;:29;38604:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38681:34;38692:10;38704;38681;:34::i;:::-;38499:224;38448:275;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;40515:97::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40595:9:::1;40580:12;:24;;;;40515:97:::0;:::o;26321:104::-;26377:13;26410:7;26403:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26321:104;:::o;38051:40::-;;;;:::o;38731:517::-;38793:14;38810:24;:14;:22;:24::i;:::-;38793:41;;38854:6;;;;;;;;;;;38853:7;38845:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;38908:2;38895:10;:15;38887:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39015:1;39007:5;;:9;;;;:::i;:::-;38994:10;38985:6;:19;;;;:::i;:::-;:31;38963:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39134:10;39119:12;;:25;;;;:::i;:::-;39106:9;:38;;39084:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;39206:34;39217:10;39229;39206;:34::i;:::-;38782:466;38731:517;:::o;28004:155::-;28099:52;28118:12;:10;:12::i;:::-;28132:8;28142;28099:18;:52::i;:::-;28004:155;;:::o;29127:328::-;29302:41;29321:12;:10;:12::i;:::-;29335:7;29302:18;:41::i;:::-;29294:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29408:39;29422:4;29428:2;29432:7;29441:5;29408:13;:39::i;:::-;29127:328;;;;:::o;37974:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39725:642::-;39843:13;39896:16;39904:7;39896;:16::i;:::-;39874:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;40000:28;40031:10;:8;:10::i;:::-;40000:41;;40103:1;40078:14;40072:28;:32;:287;;;;;;;;;;;;;;;;;40196:14;40237:18;:7;:16;:18::i;:::-;40282:13;40153:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40072:287;40052:307;;;39725:642;;;:::o;40620:92::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40696:8:::1;40686:7;:18;;;;40620:92:::0;:::o;28230:164::-;28327:4;28351:18;:25;28370:5;28351:25;;;;;;;;;;;;;;;:35;28377:8;28351:35;;;;;;;;;;;;;;;;;;;;;;;;;28344:42;;28230:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;17976:157::-;18061:4;18100:25;18085:40;;;:11;:40;;;;18078:47;;17976:157;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;30965:127::-;31030:4;31082:1;31054:30;;:7;:16;31062:7;31054:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31047:37;;30965:127;;;:::o;34947:174::-;35049:2;35022:15;:24;35038:7;35022:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35105:7;35101:2;35067:46;;35076:23;35091:7;35076:14;:23::i;:::-;35067:46;;;;;;;;;;;;34947:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;31259:348::-;31352:4;31377:16;31385:7;31377;:16::i;:::-;31369:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:13;31469:23;31484:7;31469:14;:23::i;:::-;31453:39;;31522:5;31511:16;;:7;:16;;;:51;;;;31555:7;31531:31;;:20;31543:7;31531:11;:20::i;:::-;:31;;;31511:51;:87;;;;31566:32;31583:5;31590:7;31566:16;:32::i;:::-;31511:87;31503:96;;;31259:348;;;;:::o;34251:578::-;34410:4;34383:31;;:23;34398:7;34383:14;:23::i;:::-;:31;;;34375:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34493:1;34479:16;;:2;:16;;;;34471:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34549:39;34570:4;34576:2;34580:7;34549:20;:39::i;:::-;34653:29;34670:1;34674:7;34653:8;:29::i;:::-;34714:1;34695:9;:15;34705:4;34695:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34743:1;34726:9;:13;34736:2;34726:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34774:2;34755:7;:16;34763:7;34755:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34813:7;34809:2;34794:27;;34803:4;34794:27;;;;;;;;;;;;34251:578;;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;39256:230::-;39334:9;39329:150;39353:10;39349:1;:14;39329:150;;;39385:26;:14;:24;:26::i;:::-;39426:41;39436:4;39442:24;:14;:22;:24::i;:::-;39426:9;:41::i;:::-;39365:3;;;;;:::i;:::-;;;;39329:150;;;;39256:230;;:::o;35263:315::-;35418:8;35409:17;;:5;:17;;;;35401:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35505:8;35467:18;:25;35486:5;35467:25;;;;;;;;;;;;;;;:35;35493:8;35467:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35551:8;35529:41;;35544:5;35529:41;;;35561:8;35529:41;;;;;;:::i;:::-;;;;;;;;35263:315;;;:::o;30337:::-;30494:28;30504:4;30510:2;30514:7;30494:9;:28::i;:::-;30541:48;30564:4;30570:2;30574:7;30583:5;30541:22;:48::i;:::-;30533:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30337:315;;;;:::o;38340:100::-;38392:13;38425:7;38418:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38340:100;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;37514:126::-;;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;31949:110::-;32025:26;32035:2;32039:7;32025:26;;;;;;;;;;;;:9;:26::i;:::-;31949:110;;:::o;36143:799::-;36298:4;36319:15;:2;:13;;;:15::i;:::-;36315:620;;;36371:2;36355:36;;;36392:12;:10;:12::i;:::-;36406:4;36412:7;36421:5;36355:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36351:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36614:1;36597:6;:13;:18;36593:272;;;36640:60;;;;;;;;;;:::i;:::-;;;;;;;;36593:272;36815:6;36809:13;36800:6;36796:2;36792:15;36785:38;36351:529;36488:41;;;36478:51;;;:6;:51;;;;36471:58;;;;;36315:620;36919:4;36912:11;;36143:799;;;;;;;:::o;32286:321::-;32416:18;32422:2;32426:7;32416:5;:18::i;:::-;32467:54;32498:1;32502:2;32506:7;32515:5;32467:22;:54::i;:::-;32445:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32286:321;;;:::o;7832:387::-;7892:4;8100:12;8167:7;8155:20;8147:28;;8210:1;8203:4;:8;8196:15;;;7832:387;;;:::o;32943:382::-;33037:1;33023:16;;:2;:16;;;;33015:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33096:16;33104:7;33096;:16::i;:::-;33095:17;33087:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33158:45;33187:1;33191:2;33195:7;33158:20;:45::i;:::-;33233:1;33216:9;:13;33226:2;33216:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33264:2;33245:7;:16;33253:7;33245:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33309:7;33305:2;33284:33;;33301:1;33284:33;;;;;;;;;;;;32943:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8869:845::-;8972:3;9009:5;9003:12;9038:36;9064:9;9038:36;:::i;:::-;9090:89;9172:6;9167:3;9090:89;:::i;:::-;9083:96;;9210:1;9199:9;9195:17;9226:1;9221:137;;;;9372:1;9367:341;;;;9188:520;;9221:137;9305:4;9301:9;9290;9286:25;9281:3;9274:38;9341:6;9336:3;9332:16;9325:23;;9221:137;;9367:341;9434:38;9466:5;9434:38;:::i;:::-;9494:1;9508:154;9522:6;9519:1;9516:13;9508:154;;;9596:7;9590:14;9586:1;9581:3;9577:11;9570:35;9646:1;9637:7;9633:15;9622:26;;9544:4;9541:1;9537:12;9532:17;;9508:154;;;9691:6;9686:3;9682:16;9675:23;;9374:334;;9188:520;;8976:738;;8869:845;;;;:::o;9720:366::-;9862:3;9883:67;9947:2;9942:3;9883:67;:::i;:::-;9876:74;;9959:93;10048:3;9959:93;:::i;:::-;10077:2;10072:3;10068:12;10061:19;;9720:366;;;:::o;10092:::-;10234:3;10255:67;10319:2;10314:3;10255:67;:::i;:::-;10248:74;;10331:93;10420:3;10331:93;:::i;:::-;10449:2;10444:3;10440:12;10433:19;;10092:366;;;:::o;10464:::-;10606:3;10627:67;10691:2;10686:3;10627:67;:::i;:::-;10620:74;;10703:93;10792:3;10703:93;:::i;:::-;10821:2;10816:3;10812:12;10805:19;;10464:366;;;:::o;10836:::-;10978:3;10999:67;11063:2;11058:3;10999:67;:::i;:::-;10992:74;;11075:93;11164:3;11075:93;:::i;:::-;11193:2;11188:3;11184:12;11177:19;;10836:366;;;:::o;11208:::-;11350:3;11371:67;11435:2;11430:3;11371:67;:::i;:::-;11364:74;;11447:93;11536:3;11447:93;:::i;:::-;11565:2;11560:3;11556:12;11549:19;;11208:366;;;:::o;11580:::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:::-;12094:3;12115:67;12179:2;12174:3;12115:67;:::i;:::-;12108:74;;12191:93;12280:3;12191:93;:::i;:::-;12309:2;12304:3;12300:12;12293:19;;11952:366;;;:::o;12324:::-;12466:3;12487:67;12551:2;12546:3;12487:67;:::i;:::-;12480:74;;12563:93;12652:3;12563:93;:::i;:::-;12681:2;12676:3;12672:12;12665:19;;12324:366;;;:::o;12696:::-;12838:3;12859:67;12923:2;12918:3;12859:67;:::i;:::-;12852:74;;12935:93;13024:3;12935:93;:::i;:::-;13053:2;13048:3;13044:12;13037:19;;12696:366;;;:::o;13068:::-;13210:3;13231:67;13295:2;13290:3;13231:67;:::i;:::-;13224:74;;13307:93;13396:3;13307:93;:::i;:::-;13425:2;13420:3;13416:12;13409:19;;13068:366;;;:::o;13440:::-;13582:3;13603:67;13667:2;13662:3;13603:67;:::i;:::-;13596:74;;13679:93;13768:3;13679:93;:::i;:::-;13797:2;13792:3;13788:12;13781:19;;13440:366;;;:::o;13812:::-;13954:3;13975:67;14039:2;14034:3;13975:67;:::i;:::-;13968:74;;14051:93;14140:3;14051:93;:::i;:::-;14169:2;14164:3;14160:12;14153:19;;13812:366;;;:::o;14184:::-;14326:3;14347:67;14411:2;14406:3;14347:67;:::i;:::-;14340:74;;14423:93;14512:3;14423:93;:::i;:::-;14541:2;14536:3;14532:12;14525:19;;14184:366;;;:::o;14556:::-;14698:3;14719:67;14783:2;14778:3;14719:67;:::i;:::-;14712:74;;14795:93;14884:3;14795:93;:::i;:::-;14913:2;14908:3;14904:12;14897:19;;14556:366;;;:::o;14928:::-;15070:3;15091:67;15155:2;15150:3;15091:67;:::i;:::-;15084:74;;15167:93;15256:3;15167:93;:::i;:::-;15285:2;15280:3;15276:12;15269:19;;14928:366;;;:::o;15300:::-;15442:3;15463:67;15527:2;15522:3;15463:67;:::i;:::-;15456:74;;15539:93;15628:3;15539:93;:::i;:::-;15657:2;15652:3;15648:12;15641:19;;15300:366;;;:::o;15672:::-;15814:3;15835:67;15899:2;15894:3;15835:67;:::i;:::-;15828:74;;15911:93;16000:3;15911:93;:::i;:::-;16029:2;16024:3;16020:12;16013:19;;15672:366;;;:::o;16044:::-;16186:3;16207:67;16271:2;16266:3;16207:67;:::i;:::-;16200:74;;16283:93;16372:3;16283:93;:::i;:::-;16401:2;16396:3;16392:12;16385:19;;16044:366;;;:::o;16416:::-;16558:3;16579:67;16643:2;16638:3;16579:67;:::i;:::-;16572:74;;16655:93;16744:3;16655:93;:::i;:::-;16773:2;16768:3;16764:12;16757:19;;16416:366;;;:::o;16788:398::-;16947:3;16968:83;17049:1;17044:3;16968:83;:::i;:::-;16961:90;;17060:93;17149:3;17060:93;:::i;:::-;17178:1;17173:3;17169:11;17162:18;;16788:398;;;:::o;17192:366::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:118::-;18395:24;18413:5;18395:24;:::i;:::-;18390:3;18383:37;18308:118;;:::o;18432:589::-;18657:3;18679:95;18770:3;18761:6;18679:95;:::i;:::-;18672:102;;18791:95;18882:3;18873:6;18791:95;:::i;:::-;18784:102;;18903:92;18991:3;18982:6;18903:92;:::i;:::-;18896:99;;19012:3;19005:10;;18432:589;;;;;;:::o;19027:379::-;19211:3;19233:147;19376:3;19233:147;:::i;:::-;19226:154;;19397:3;19390:10;;19027:379;;;:::o;19412:222::-;19505:4;19543:2;19532:9;19528:18;19520:26;;19556:71;19624:1;19613:9;19609:17;19600:6;19556:71;:::i;:::-;19412:222;;;;:::o;19640:640::-;19835:4;19873:3;19862:9;19858:19;19850:27;;19887:71;19955:1;19944:9;19940:17;19931:6;19887:71;:::i;:::-;19968:72;20036:2;20025:9;20021:18;20012:6;19968:72;:::i;:::-;20050;20118:2;20107:9;20103:18;20094:6;20050:72;:::i;:::-;20169:9;20163:4;20159:20;20154:2;20143:9;20139:18;20132:48;20197:76;20268:4;20259:6;20197:76;:::i;:::-;20189:84;;19640:640;;;;;;;:::o;20286:210::-;20373:4;20411:2;20400:9;20396:18;20388:26;;20424:65;20486:1;20475:9;20471:17;20462:6;20424:65;:::i;:::-;20286:210;;;;:::o;20502:313::-;20615:4;20653:2;20642:9;20638:18;20630:26;;20702:9;20696:4;20692:20;20688:1;20677:9;20673:17;20666:47;20730:78;20803:4;20794:6;20730:78;:::i;:::-;20722:86;;20502:313;;;;:::o;20821:419::-;20987:4;21025:2;21014:9;21010:18;21002:26;;21074:9;21068:4;21064:20;21060:1;21049:9;21045:17;21038:47;21102:131;21228:4;21102:131;:::i;:::-;21094:139;;20821:419;;;:::o;21246:::-;21412:4;21450:2;21439:9;21435:18;21427:26;;21499:9;21493:4;21489:20;21485:1;21474:9;21470:17;21463:47;21527:131;21653:4;21527:131;:::i;:::-;21519:139;;21246:419;;;:::o;21671:::-;21837:4;21875:2;21864:9;21860:18;21852:26;;21924:9;21918:4;21914:20;21910:1;21899:9;21895:17;21888:47;21952:131;22078:4;21952:131;:::i;:::-;21944:139;;21671:419;;;:::o;22096:::-;22262:4;22300:2;22289:9;22285:18;22277:26;;22349:9;22343:4;22339:20;22335:1;22324:9;22320:17;22313:47;22377:131;22503:4;22377:131;:::i;:::-;22369:139;;22096:419;;;:::o;22521:::-;22687:4;22725:2;22714:9;22710:18;22702:26;;22774:9;22768:4;22764:20;22760:1;22749:9;22745:17;22738:47;22802:131;22928:4;22802:131;:::i;:::-;22794:139;;22521:419;;;:::o;22946:::-;23112:4;23150:2;23139:9;23135:18;23127:26;;23199:9;23193:4;23189:20;23185:1;23174:9;23170:17;23163:47;23227:131;23353:4;23227:131;:::i;:::-;23219:139;;22946:419;;;:::o;23371:::-;23537:4;23575:2;23564:9;23560:18;23552:26;;23624:9;23618:4;23614:20;23610:1;23599:9;23595:17;23588:47;23652:131;23778:4;23652:131;:::i;:::-;23644:139;;23371:419;;;:::o;23796:::-;23962:4;24000:2;23989:9;23985:18;23977:26;;24049:9;24043:4;24039:20;24035:1;24024:9;24020:17;24013:47;24077:131;24203:4;24077:131;:::i;:::-;24069:139;;23796:419;;;:::o;24221:::-;24387:4;24425:2;24414:9;24410:18;24402:26;;24474:9;24468:4;24464:20;24460:1;24449:9;24445:17;24438:47;24502:131;24628:4;24502:131;:::i;:::-;24494:139;;24221:419;;;:::o;24646:::-;24812:4;24850:2;24839:9;24835:18;24827:26;;24899:9;24893:4;24889:20;24885:1;24874:9;24870:17;24863:47;24927:131;25053:4;24927:131;:::i;:::-;24919:139;;24646:419;;;:::o;25071:::-;25237:4;25275:2;25264:9;25260:18;25252:26;;25324:9;25318:4;25314:20;25310:1;25299:9;25295:17;25288:47;25352:131;25478:4;25352:131;:::i;:::-;25344:139;;25071:419;;;:::o;25496:::-;25662:4;25700:2;25689:9;25685:18;25677:26;;25749:9;25743:4;25739:20;25735:1;25724:9;25720:17;25713:47;25777:131;25903:4;25777:131;:::i;:::-;25769:139;;25496:419;;;:::o;25921:::-;26087:4;26125:2;26114:9;26110:18;26102:26;;26174:9;26168:4;26164:20;26160:1;26149:9;26145:17;26138:47;26202:131;26328:4;26202:131;:::i;:::-;26194:139;;25921:419;;;:::o;26346:::-;26512:4;26550:2;26539:9;26535:18;26527:26;;26599:9;26593:4;26589:20;26585:1;26574:9;26570:17;26563:47;26627:131;26753:4;26627:131;:::i;:::-;26619:139;;26346:419;;;:::o;26771:::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26771:419;;;:::o;27196:::-;27362:4;27400:2;27389:9;27385:18;27377:26;;27449:9;27443:4;27439:20;27435:1;27424:9;27420:17;27413:47;27477:131;27603:4;27477:131;:::i;:::-;27469:139;;27196:419;;;:::o;27621:::-;27787:4;27825:2;27814:9;27810:18;27802:26;;27874:9;27868:4;27864:20;27860:1;27849:9;27845:17;27838:47;27902:131;28028:4;27902:131;:::i;:::-;27894:139;;27621:419;;;:::o;28046:::-;28212:4;28250:2;28239:9;28235:18;28227:26;;28299:9;28293:4;28289:20;28285:1;28274:9;28270:17;28263:47;28327:131;28453:4;28327:131;:::i;:::-;28319:139;;28046:419;;;:::o;28471:::-;28637:4;28675:2;28664:9;28660:18;28652:26;;28724:9;28718:4;28714:20;28710:1;28699:9;28695:17;28688:47;28752:131;28878:4;28752:131;:::i;:::-;28744:139;;28471:419;;;:::o;28896:::-;29062:4;29100:2;29089:9;29085:18;29077:26;;29149:9;29143:4;29139:20;29135:1;29124:9;29120:17;29113:47;29177:131;29303:4;29177:131;:::i;:::-;29169:139;;28896:419;;;:::o;29321:::-;29487:4;29525:2;29514:9;29510:18;29502:26;;29574:9;29568:4;29564:20;29560:1;29549:9;29545:17;29538:47;29602:131;29728:4;29602:131;:::i;:::-;29594:139;;29321:419;;;:::o;29746:::-;29912:4;29950:2;29939:9;29935:18;29927:26;;29999:9;29993:4;29989:20;29985:1;29974:9;29970:17;29963:47;30027:131;30153:4;30027:131;:::i;:::-;30019:139;;29746:419;;;:::o;30171:222::-;30264:4;30302:2;30291:9;30287:18;30279:26;;30315:71;30383:1;30372:9;30368:17;30359:6;30315:71;:::i;:::-;30171:222;;;;:::o;30399:129::-;30433:6;30460:20;;:::i;:::-;30450:30;;30489:33;30517:4;30509:6;30489:33;:::i;:::-;30399:129;;;:::o;30534:75::-;30567:6;30600:2;30594:9;30584:19;;30534:75;:::o;30615:307::-;30676:4;30766:18;30758:6;30755:30;30752:56;;;30788:18;;:::i;:::-;30752:56;30826:29;30848:6;30826:29;:::i;:::-;30818:37;;30910:4;30904;30900:15;30892:23;;30615:307;;;:::o;30928:308::-;30990:4;31080:18;31072:6;31069:30;31066:56;;;31102:18;;:::i;:::-;31066:56;31140:29;31162:6;31140:29;:::i;:::-;31132:37;;31224:4;31218;31214:15;31206:23;;30928:308;;;:::o;31242:141::-;31291:4;31314:3;31306:11;;31337:3;31334:1;31327:14;31371:4;31368:1;31358:18;31350:26;;31242:141;;;:::o;31389:98::-;31440:6;31474:5;31468:12;31458:22;;31389:98;;;:::o;31493:99::-;31545:6;31579:5;31573:12;31563:22;;31493:99;;;:::o;31598:168::-;31681:11;31715:6;31710:3;31703:19;31755:4;31750:3;31746:14;31731:29;;31598:168;;;;:::o;31772:147::-;31873:11;31910:3;31895:18;;31772:147;;;;:::o;31925:169::-;32009:11;32043:6;32038:3;32031:19;32083:4;32078:3;32074:14;32059:29;;31925:169;;;;:::o;32100:148::-;32202:11;32239:3;32224:18;;32100:148;;;;:::o;32254:305::-;32294:3;32313:20;32331:1;32313:20;:::i;:::-;32308:25;;32347:20;32365:1;32347:20;:::i;:::-;32342:25;;32501:1;32433:66;32429:74;32426:1;32423:81;32420:107;;;32507:18;;:::i;:::-;32420:107;32551:1;32548;32544:9;32537:16;;32254:305;;;;:::o;32565:185::-;32605:1;32622:20;32640:1;32622:20;:::i;:::-;32617:25;;32656:20;32674:1;32656:20;:::i;:::-;32651:25;;32695:1;32685:35;;32700:18;;:::i;:::-;32685:35;32742:1;32739;32735:9;32730:14;;32565:185;;;;:::o;32756:348::-;32796:7;32819:20;32837:1;32819:20;:::i;:::-;32814:25;;32853:20;32871:1;32853:20;:::i;:::-;32848:25;;33041:1;32973:66;32969:74;32966:1;32963:81;32958:1;32951:9;32944:17;32940:105;32937:131;;;33048:18;;:::i;:::-;32937:131;33096:1;33093;33089:9;33078:20;;32756:348;;;;:::o;33110:191::-;33150:4;33170:20;33188:1;33170:20;:::i;:::-;33165:25;;33204:20;33222:1;33204:20;:::i;:::-;33199:25;;33243:1;33240;33237:8;33234:34;;;33248:18;;:::i;:::-;33234:34;33293:1;33290;33286:9;33278:17;;33110:191;;;;:::o;33307:96::-;33344:7;33373:24;33391:5;33373:24;:::i;:::-;33362:35;;33307:96;;;:::o;33409:90::-;33443:7;33486:5;33479:13;33472:21;33461:32;;33409:90;;;:::o;33505:149::-;33541:7;33581:66;33574:5;33570:78;33559:89;;33505:149;;;:::o;33660:126::-;33697:7;33737:42;33730:5;33726:54;33715:65;;33660:126;;;:::o;33792:77::-;33829:7;33858:5;33847:16;;33792:77;;;:::o;33875:154::-;33959:6;33954:3;33949;33936:30;34021:1;34012:6;34007:3;34003:16;33996:27;33875:154;;;:::o;34035:307::-;34103:1;34113:113;34127:6;34124:1;34121:13;34113:113;;;34212:1;34207:3;34203:11;34197:18;34193:1;34188:3;34184:11;34177:39;34149:2;34146:1;34142:10;34137:15;;34113:113;;;34244:6;34241:1;34238:13;34235:101;;;34324:1;34315:6;34310:3;34306:16;34299:27;34235:101;34084:258;34035:307;;;:::o;34348:320::-;34392:6;34429:1;34423:4;34419:12;34409:22;;34476:1;34470:4;34466:12;34497:18;34487:81;;34553:4;34545:6;34541:17;34531:27;;34487:81;34615:2;34607:6;34604:14;34584:18;34581:38;34578:84;;;34634:18;;:::i;:::-;34578:84;34399:269;34348:320;;;:::o;34674:281::-;34757:27;34779:4;34757:27;:::i;:::-;34749:6;34745:40;34887:6;34875:10;34872:22;34851:18;34839:10;34836:34;34833:62;34830:88;;;34898:18;;:::i;:::-;34830:88;34938:10;34934:2;34927:22;34717:238;34674:281;;:::o;34961:233::-;35000:3;35023:24;35041:5;35023:24;:::i;:::-;35014:33;;35069:66;35062:5;35059:77;35056:103;;;35139:18;;:::i;:::-;35056:103;35186:1;35179:5;35175:13;35168:20;;34961:233;;;:::o;35200:176::-;35232:1;35249:20;35267:1;35249:20;:::i;:::-;35244:25;;35283:20;35301:1;35283:20;:::i;:::-;35278:25;;35322:1;35312:35;;35327:18;;:::i;:::-;35312:35;35368:1;35365;35361:9;35356:14;;35200:176;;;;:::o;35382:180::-;35430:77;35427:1;35420:88;35527:4;35524:1;35517:15;35551:4;35548:1;35541:15;35568:180;35616:77;35613:1;35606:88;35713:4;35710:1;35703:15;35737:4;35734:1;35727:15;35754:180;35802:77;35799:1;35792:88;35899:4;35896:1;35889:15;35923:4;35920:1;35913:15;35940:180;35988:77;35985:1;35978:88;36085:4;36082:1;36075:15;36109:4;36106:1;36099:15;36126:180;36174:77;36171:1;36164:88;36271:4;36268:1;36261:15;36295:4;36292:1;36285:15;36312:117;36421:1;36418;36411:12;36435:117;36544:1;36541;36534:12;36558:117;36667:1;36664;36657:12;36681:117;36790:1;36787;36780:12;36804:102;36845:6;36896:2;36892:7;36887:2;36880:5;36876:14;36872:28;36862:38;;36804:102;;;:::o;36912:161::-;37052:13;37048:1;37040:6;37036:14;37029:37;36912:161;:::o;37079:171::-;37219:23;37215:1;37207:6;37203:14;37196:47;37079:171;:::o;37256:237::-;37396:34;37392:1;37384:6;37380:14;37373:58;37465:20;37460:2;37452:6;37448:15;37441:45;37256:237;:::o;37499:225::-;37639:34;37635:1;37627:6;37623:14;37616:58;37708:8;37703:2;37695:6;37691:15;37684:33;37499:225;:::o;37730:178::-;37870:30;37866:1;37858:6;37854:14;37847:54;37730:178;:::o;37914:179::-;38054:31;38050:1;38042:6;38038:14;38031:55;37914:179;:::o;38099:170::-;38239:22;38235:1;38227:6;38223:14;38216:46;38099:170;:::o;38275:223::-;38415:34;38411:1;38403:6;38399:14;38392:58;38484:6;38479:2;38471:6;38467:15;38460:31;38275:223;:::o;38504:175::-;38644:27;38640:1;38632:6;38628:14;38621:51;38504:175;:::o;38685:231::-;38825:34;38821:1;38813:6;38809:14;38802:58;38894:14;38889:2;38881:6;38877:15;38870:39;38685:231;:::o;38922:243::-;39062:34;39058:1;39050:6;39046:14;39039:58;39131:26;39126:2;39118:6;39114:15;39107:51;38922:243;:::o;39171:229::-;39311:34;39307:1;39299:6;39295:14;39288:58;39380:12;39375:2;39367:6;39363:15;39356:37;39171:229;:::o;39406:228::-;39546:34;39542:1;39534:6;39530:14;39523:58;39615:11;39610:2;39602:6;39598:15;39591:36;39406:228;:::o;39640:182::-;39780:34;39776:1;39768:6;39764:14;39757:58;39640:182;:::o;39828:231::-;39968:34;39964:1;39956:6;39952:14;39945:58;40037:14;40032:2;40024:6;40020:15;40013:39;39828:231;:::o;40065:182::-;40205:34;40201:1;40193:6;40189:14;40182:58;40065:182;:::o;40253:228::-;40393:34;40389:1;40381:6;40377:14;40370:58;40462:11;40457:2;40449:6;40445:15;40438:36;40253:228;:::o;40487:234::-;40627:34;40623:1;40615:6;40611:14;40604:58;40696:17;40691:2;40683:6;40679:15;40672:42;40487:234;:::o;40727:220::-;40867:34;40863:1;40855:6;40851:14;40844:58;40936:3;40931:2;40923:6;40919:15;40912:28;40727:220;:::o;40953:114::-;;:::o;41073:236::-;41213:34;41209:1;41201:6;41197:14;41190:58;41282:19;41277:2;41269:6;41265:15;41258:44;41073:236;:::o;41315:174::-;41455:26;41451:1;41443:6;41439:14;41432:50;41315:174;:::o;41495:224::-;41635:34;41631:1;41623:6;41619:14;41612:58;41704:7;41699:2;41691:6;41687:15;41680:32;41495:224;:::o;41725:122::-;41798:24;41816:5;41798:24;:::i;:::-;41791:5;41788:35;41778:63;;41837:1;41834;41827:12;41778:63;41725:122;:::o;41853:116::-;41923:21;41938:5;41923:21;:::i;:::-;41916:5;41913:32;41903:60;;41959:1;41956;41949:12;41903:60;41853:116;:::o;41975:120::-;42047:23;42064:5;42047:23;:::i;:::-;42040:5;42037:34;42027:62;;42085:1;42082;42075:12;42027:62;41975:120;:::o;42101:122::-;42174:24;42192:5;42174:24;:::i;:::-;42167:5;42164:35;42154:63;;42213:1;42210;42203:12;42154:63;42101:122;:::o

Swarm Source

ipfs://62e9019f1ac8358be475b1c6b36ce7f27d8205fe8f7db3ca25c063e992fb177b
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.