ETH Price: $2,650.75 (+0.54%)

Token

MonstroCities Mounts (MONSTROMOUNTS)
 

Overview

Max Total Supply

60 MONSTROMOUNTS

Holders

26

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
The MonstroCities: Deployer
Balance
1 MONSTROMOUNTS
0x692D7e00ea2F78527a4aBa96694E9Eb63AeDA1Eb
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:
MonstroCitiesMounts

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-03
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-03
*/

/**
 *Submitted for verification at Etherscan.io on 2021-08-18
*/

/**
 *Submitted for verification at Etherscan.io on 2021-06-18
*/

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/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/IERC721Receiver.sol



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

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

// File: @openzeppelin/contracts/utils/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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

// File: @openzeppelin/contracts/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/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}. 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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: @openzeppelin/contracts/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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

pragma solidity ^0.8.0;



abstract contract MONSTRO {
  function ownerOf(uint256 tokenId) public virtual view returns (address);
  function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256);
  function balanceOf(address owner) external virtual view returns (uint256 balance);
}

contract MonstroCitiesMounts is ERC721Enumerable, Ownable {  
  MONSTRO private monstro;

  uint constant public MAX_MOUNT_ADOPTION = 8000;
    uint constant public CURRENT_MINT = 2452;
        uint constant public MAX_MINT = 1;
  string public MonstroProvenance;
  bool public saleIsActive = false;
    bool public snapshot = false;
  uint256 public collectionStartingIndex;
  uint256 public collectionStartingIndexBlock;
  uint256 public maxMounts;
  uint256 public setBlockTimestamp;
  uint256 public revealTimestamp;
  string private baseURI;
   uint256 constant public PRICE = 0.01 ether;
  
  
uint256 public constant SNAPSHOT_TIME = 1630713600;

  constructor(
    string memory name,
    string memory symbol,
    uint256 maxNftSupply,
    uint256 saleStart,
    address dependentContractAddress
  ) ERC721(name, symbol) {
    maxMounts = maxNftSupply;
    revealTimestamp = saleStart + (86400 * 7);
    setBlockTimestamp = saleStart + (86400 * 6);
    monstro = MONSTRO(dependentContractAddress);
  }

  function setRevealTimestamp(uint256 revealTimeStamp) public onlyOwner {
    revealTimestamp = revealTimeStamp;
  }
  
      function getPrice() public view returns (uint256) {
       require(totalSupply() < MAX_MOUNT_ADOPTION, "Sale has already ended, no more Monsters left to sell.");
       
            return 10000000000000000;  //   0.01 ETH
 
    }
  

  function setStartingBlockTimestamp(uint256 startingBlockTimestamp) public onlyOwner {
    setBlockTimestamp = startingBlockTimestamp;
  }

  function setProvenanceHash(string memory provenanceHash) public onlyOwner {
    MonstroProvenance = provenanceHash;
  }

  function isMinted(uint256 tokenId) external view returns (bool) {
    require(tokenId < maxMounts, "tokenId outside collection bounds");

    return _exists(tokenId);
  }

  function _baseURI() internal view override returns (string memory) {
    return baseURI;
  }
  
  function setBaseURI(string memory uri) public onlyOwner {
    baseURI = uri;
  }

  function flipSaleState() public onlyOwner {
    saleIsActive = !saleIsActive;
  }
  
    function flipSnapshot() public onlyOwner {
    snapshot = !snapshot;
  }
  

  function trySetStartingIndexBlock() private {
    if (
      collectionStartingIndexBlock == 0 &&
      (totalSupply() == maxMounts || block.timestamp >= setBlockTimestamp)
    ) {
      collectionStartingIndexBlock = block.number;
    }
  }


  function mintMount(uint256 monstroTokenId) public {


    require(saleIsActive, "Sale must be active to mint a Mount");
    require(totalSupply() < maxMounts, "Purchase would exceed max supply of Mounts");
    require(monstroTokenId < CURRENT_MINT, "Requested tokenId exceeds upper bound");
    require(monstro.ownerOf(monstroTokenId) == msg.sender, "Must own the Monster for requested tokenId to mint a Mount");
    
    _safeMint(msg.sender, monstroTokenId);
    trySetStartingIndexBlock();
    }
  

  /**
    * Set the starting index for the collection
    */
  function setStartingIndex() public {
    require(collectionStartingIndex == 0, "Starting index is already set");
    require(collectionStartingIndexBlock != 0, "Starting index block must be set");
    require(
      block.timestamp >= revealTimestamp || totalSupply() == maxMounts, 
      "Must be on or after the reveal time to set starting index"
    );

    collectionStartingIndex = uint256(blockhash(collectionStartingIndexBlock)) % maxMounts;

    // Just a sanity case in the worst case if this function is called late (EVM only stores last 256 block hashes)
    if ((block.number - collectionStartingIndexBlock) > 255) {
      collectionStartingIndex = uint256(blockhash(block.number - 1)) % maxMounts;
    }

    // Prevent default sequence
    if (collectionStartingIndex == 0) {
      collectionStartingIndex = collectionStartingIndex + 1;
    }
  }

  /**
    * Set the starting index block for the collection, essentially unblocking
    * setting starting index
    */
  function emergencySetStartingIndexBlock() public onlyOwner {
    require(collectionStartingIndexBlock == 0, "Starting index block is already set");
    require(collectionStartingIndex == 0, "Starting index is already set");

    collectionStartingIndexBlock = block.number;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxNftSupply","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"},{"internalType":"address","name":"dependentContractAddress","type":"address"}],"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":[],"name":"CURRENT_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MOUNT_ADOPTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MonstroProvenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNAPSHOT_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionStartingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionStartingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencySetStartingIndexBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSnapshot","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":"getPrice","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"monstroTokenId","type":"uint256"}],"name":"mintMount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTimestamp","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":"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"revealTimeStamp","type":"uint256"}],"name":"setRevealTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startingBlockTimestamp","type":"uint256"}],"name":"setStartingBlockTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"}]

60806040526000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b5060405162004f0238038062004f0283398181016040528101906200006d91906200032d565b8484816000908051906020019062000087929190620001dd565b508060019080519060200190620000a0929190620001dd565b5050506000620000b5620001d560201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508260108190555062093a80826200016c919062000440565b6012819055506207e9008262000183919062000440565b60118190555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506200064f565b600033905090565b828054620001eb9062000511565b90600052602060002090601f0160209004810192826200020f57600085556200025b565b82601f106200022a57805160ff19168380011785556200025b565b828001600101855582156200025b579182015b828111156200025a5782518255916020019190600101906200023d565b5b5090506200026a91906200026e565b5090565b5b80821115620002895760008160009055506001016200026f565b5090565b6000620002a46200029e846200040a565b620003e1565b905082815260208101848484011115620002bd57600080fd5b620002ca848285620004db565b509392505050565b600081519050620002e3816200061b565b92915050565b600082601f830112620002fb57600080fd5b81516200030d8482602086016200028d565b91505092915050565b600081519050620003278162000635565b92915050565b600080600080600060a086880312156200034657600080fd5b600086015167ffffffffffffffff8111156200036157600080fd5b6200036f88828901620002e9565b955050602086015167ffffffffffffffff8111156200038d57600080fd5b6200039b88828901620002e9565b9450506040620003ae8882890162000316565b9350506060620003c18882890162000316565b9250506080620003d488828901620002d2565b9150509295509295909350565b6000620003ed62000400565b9050620003fb828262000547565b919050565b6000604051905090565b600067ffffffffffffffff821115620004285762000427620005db565b5b62000433826200060a565b9050602081019050919050565b60006200044d82620004d1565b91506200045a83620004d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200049257620004916200057d565b5b828201905092915050565b6000620004aa82620004b1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620004fb578082015181840152602081019050620004de565b838111156200050b576000848401525b50505050565b600060028204905060018216806200052a57607f821691505b60208210811415620005415762000540620005ac565b5b50919050565b62000552826200060a565b810181811067ffffffffffffffff82111715620005745762000573620005db565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62000626816200049d565b81146200063257600080fd5b50565b6200064081620004d1565b81146200064c57600080fd5b50565b6148a3806200065f6000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806370a0823111610151578063995061ca116100c3578063e985e9c511610087578063e985e9c5146106f0578063e986655014610720578063eb8d24441461072a578063f0292a0314610748578063f2fde38b14610766578063f62f3c111461078257610269565b8063995061ca1461064c5780639fe8cf001461066a578063a22cb46514610688578063b88d4fde146106a4578063c87b56dd146106c057610269565b80638da5cb5b116101155780638da5cb5b1461059a5780638ea6abdd146105b857806395d89b41146105d65780639711715a146105f4578063988301651461061257806398d5fdca1461062e57610269565b806370a082311461051a578063715018a61461054a5780637d17fcbe14610554578063818aa5531461055e5780638d859f3e1461057c57610269565b80632f745c59116101ea5780633f1aac52116101ae5780633f1aac521461044657806342842e0e146104645780634f6ccce71461048057806355f804b3146104b05780636352211e146104cc5780636e2792a4146104fc57610269565b80632f745c59146103b657806333c41a90146103e657806334918dfd1461041657806336974706146104205780633a66cc671461042a57610269565b80631096952311610231578063109695231461032457806318160ddd1461034057806323b872dd1461035e57806329a58d481461037a5780632f2eda311461039857610269565b8063018a2c371461026e57806301ffc9a71461028a57806306fdde03146102ba578063081812fc146102d8578063095ea7b314610308575b600080fd5b6102886004803603810190610283919061333c565b6107a0565b005b6102a4600480360381019061029f91906132a9565b610826565b6040516102b19190613894565b60405180910390f35b6102c26108a0565b6040516102cf91906138af565b60405180910390f35b6102f260048036038101906102ed919061333c565b610932565b6040516102ff919061382d565b60405180910390f35b610322600480360381019061031d919061326d565b6109b7565b005b61033e600480360381019061033991906132fb565b610acf565b005b610348610b65565b6040516103559190613c51565b60405180910390f35b61037860048036038101906103739190613167565b610b72565b005b610382610bd2565b60405161038f9190613c51565b60405180910390f35b6103a0610bd8565b6040516103ad9190613c51565b60405180910390f35b6103d060048036038101906103cb919061326d565b610bde565b6040516103dd9190613c51565b60405180910390f35b61040060048036038101906103fb919061333c565b610c83565b60405161040d9190613894565b60405180910390f35b61041e610cd9565b005b610428610d81565b005b610444600480360381019061043f919061333c565b610e29565b005b61044e610eaf565b60405161045b9190613c51565b60405180910390f35b61047e60048036038101906104799190613167565b610eb7565b005b61049a6004803603810190610495919061333c565b610ed7565b6040516104a79190613c51565b60405180910390f35b6104ca60048036038101906104c591906132fb565b610f6e565b005b6104e660048036038101906104e1919061333c565b611004565b6040516104f3919061382d565b60405180910390f35b6105046110b6565b60405161051191906138af565b60405180910390f35b610534600480360381019061052f91906130d9565b611144565b6040516105419190613c51565b60405180910390f35b6105526111fc565b005b61055c611339565b005b610566611448565b6040516105739190613c51565b60405180910390f35b61058461144e565b6040516105919190613c51565b60405180910390f35b6105a2611459565b6040516105af919061382d565b60405180910390f35b6105c0611483565b6040516105cd9190613c51565b60405180910390f35b6105de611489565b6040516105eb91906138af565b60405180910390f35b6105fc61151b565b6040516106099190613894565b60405180910390f35b61062c6004803603810190610627919061333c565b61152e565b005b610636611739565b6040516106439190613c51565b60405180910390f35b610654611793565b6040516106619190613c51565b60405180910390f35b610672611799565b60405161067f9190613c51565b60405180910390f35b6106a2600480360381019061069d9190613231565b61179f565b005b6106be60048036038101906106b991906131b6565b611920565b005b6106da60048036038101906106d5919061333c565b611982565b6040516106e791906138af565b60405180910390f35b61070a6004803603810190610705919061312b565b611a29565b6040516107179190613894565b60405180910390f35b610728611abd565b005b610732611c18565b60405161073f9190613894565b60405180910390f35b610750611c2b565b60405161075d9190613c51565b60405180910390f35b610780600480360381019061077b91906130d9565b611c30565b005b61078a611ddc565b6040516107979190613c51565b60405180910390f35b6107a8611de2565b73ffffffffffffffffffffffffffffffffffffffff166107c6611459565b73ffffffffffffffffffffffffffffffffffffffff161461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390613af1565b60405180910390fd5b8060128190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610899575061089882611dea565b5b9050919050565b6060600080546108af90613ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546108db90613ea7565b80156109285780601f106108fd57610100808354040283529160200191610928565b820191906000526020600020905b81548152906001019060200180831161090b57829003601f168201915b5050505050905090565b600061093d82611ecc565b61097c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097390613ad1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c282611004565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613b91565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a52611de2565b73ffffffffffffffffffffffffffffffffffffffff161480610a815750610a8081610a7b611de2565b611a29565b5b610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790613a11565b60405180910390fd5b610aca8383611f38565b505050565b610ad7611de2565b73ffffffffffffffffffffffffffffffffffffffff16610af5611459565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613af1565b60405180910390fd5b80600c9080519060200190610b61929190612ee8565b5050565b6000600880549050905090565b610b83610b7d611de2565b82611ff1565b610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990613bd1565b60405180910390fd5b610bcd8383836120cf565b505050565b600e5481565b600f5481565b6000610be983611144565b8210610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c21906138d1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006010548210610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090613b71565b60405180910390fd5b610cd282611ecc565b9050919050565b610ce1611de2565b73ffffffffffffffffffffffffffffffffffffffff16610cff611459565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613af1565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b610d89611de2565b73ffffffffffffffffffffffffffffffffffffffff16610da7611459565b73ffffffffffffffffffffffffffffffffffffffff1614610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613af1565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b610e31611de2565b73ffffffffffffffffffffffffffffffffffffffff16610e4f611459565b73ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90613af1565b60405180910390fd5b8060118190555050565b636132b70081565b610ed283838360405180602001604052806000815250611920565b505050565b6000610ee1610b65565b8210610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613bf1565b60405180910390fd5b60088281548110610f5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f76611de2565b73ffffffffffffffffffffffffffffffffffffffff16610f94611459565b73ffffffffffffffffffffffffffffffffffffffff1614610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190613af1565b60405180910390fd5b8060139080519060200190611000929190612ee8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613a71565b60405180910390fd5b80915050919050565b600c80546110c390613ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546110ef90613ea7565b801561113c5780601f106111115761010080835404028352916020019161113c565b820191906000526020600020905b81548152906001019060200180831161111f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac90613a51565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611204611de2565b73ffffffffffffffffffffffffffffffffffffffff16611222611459565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613af1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611341611de2565b73ffffffffffffffffffffffffffffffffffffffff1661135f611459565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90613af1565b60405180910390fd5b6000600f54146113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f190613b11565b60405180910390fd5b6000600e541461143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906139d1565b60405180910390fd5b43600f81905550565b60115481565b662386f26fc1000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61099481565b60606001805461149890613ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546114c490613ea7565b80156115115780601f106114e657610100808354040283529160200191611511565b820191906000526020600020905b8154815290600101906020018083116114f457829003601f168201915b5050505050905090565b600d60019054906101000a900460ff1681565b600d60009054906101000a900460ff1661157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613a31565b60405180910390fd5b601054611588610b65565b106115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613ab1565b60405180910390fd5b610994811061160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906139f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161167e9190613c51565b60206040518083038186803b15801561169657600080fd5b505afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce9190613102565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613c11565b60405180910390fd5b61172e338261232b565b611736612349565b50565b6000611f40611746610b65565b10611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90613c31565b60405180910390fd5b662386f26fc10000905090565b60105481565b611f4081565b6117a7611de2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90613971565b60405180910390fd5b8060056000611822611de2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118cf611de2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119149190613894565b60405180910390a35050565b61193161192b611de2565b83611ff1565b611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613bd1565b60405180910390fd5b61197c8484848461237f565b50505050565b606061198d82611ecc565b6119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390613b51565b60405180910390fd5b60006119d66123db565b905060008151116119f65760405180602001604052806000815250611a21565b80611a008461246d565b604051602001611a11929190613809565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600e5414611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af9906139d1565b60405180910390fd5b6000600f541415611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90613bb1565b60405180910390fd5b60125442101580611b615750601054611b5f610b65565b145b611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613991565b60405180910390fd5b601054600f544060001c611bb49190613f53565b600e8190555060ff600f5443611bca9190613dbd565b1115611bf557601054600143611be09190613dbd565b4060001c611bee9190613f53565b600e819055505b6000600e541415611c16576001600e54611c0f9190613d36565b600e819055505b565b600d60009054906101000a900460ff1681565b600181565b611c38611de2565b73ffffffffffffffffffffffffffffffffffffffff16611c56611459565b73ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390613af1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1390613911565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611eb557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ec55750611ec48261261a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fab83611004565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ffc82611ecc565b61203b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612032906139b1565b60405180910390fd5b600061204683611004565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b557508373ffffffffffffffffffffffffffffffffffffffff1661209d84610932565b73ffffffffffffffffffffffffffffffffffffffff16145b806120c657506120c58185611a29565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120ef82611004565b73ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c90613b31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90613951565b60405180910390fd5b6121c0838383612684565b6121cb600082611f38565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221b9190613dbd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122729190613d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612345828260405180602001604052806000815250612798565b5050565b6000600f541480156123705750601054612361610b65565b148061236f57506011544210155b5b1561237d5743600f819055505b565b61238a8484846120cf565b612396848484846127f3565b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906138f1565b60405180910390fd5b50505050565b6060601380546123ea90613ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461241690613ea7565b80156124635780601f1061243857610100808354040283529160200191612463565b820191906000526020600020905b81548152906001019060200180831161244657829003601f168201915b5050505050905090565b606060008214156124b5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612615565b600082905060005b600082146124e75780806124d090613f0a565b915050600a826124e09190613d8c565b91506124bd565b60008167ffffffffffffffff811115612529577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561255b5781602001600182028036833780820191505090505b5090505b6000851461260e576001826125749190613dbd565b9150600a856125839190613f53565b603061258f9190613d36565b60f81b8183815181106125cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126079190613d8c565b945061255f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268f83838361298a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d2576126cd8161298f565b612711565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127105761270f83826129d8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127545761274f81612b45565b612793565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612792576127918282612c88565b5b5b505050565b6127a28383612d07565b6127af60008484846127f3565b6127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e5906138f1565b60405180910390fd5b505050565b60006128148473ffffffffffffffffffffffffffffffffffffffff16612ed5565b1561297d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283d611de2565b8786866040518563ffffffff1660e01b815260040161285f9493929190613848565b602060405180830381600087803b15801561287957600080fd5b505af19250505080156128aa57506040513d601f19601f820116820180604052508101906128a791906132d2565b60015b61292d573d80600081146128da576040519150601f19603f3d011682016040523d82523d6000602084013e6128df565b606091505b50600081511415612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c906138f1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612982565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129e584611144565b6129ef9190613dbd565b9050600060076000848152602001908152602001600020549050818114612ad4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b599190613dbd565b9050600060096000848152602001908152602001600020549050600060088381548110612baf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612bf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c9383611144565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e90613a91565b60405180910390fd5b612d8081611ecc565b15612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db790613931565b60405180910390fd5b612dcc60008383612684565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e1c9190613d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ef490613ea7565b90600052602060002090601f016020900481019282612f165760008555612f5d565b82601f10612f2f57805160ff1916838001178555612f5d565b82800160010185558215612f5d579182015b82811115612f5c578251825591602001919060010190612f41565b5b509050612f6a9190612f6e565b5090565b5b80821115612f87576000816000905550600101612f6f565b5090565b6000612f9e612f9984613c91565b613c6c565b905082815260208101848484011115612fb657600080fd5b612fc1848285613e65565b509392505050565b6000612fdc612fd784613cc2565b613c6c565b905082815260208101848484011115612ff457600080fd5b612fff848285613e65565b509392505050565b60008135905061301681614811565b92915050565b60008151905061302b81614811565b92915050565b60008135905061304081614828565b92915050565b6000813590506130558161483f565b92915050565b60008151905061306a8161483f565b92915050565b600082601f83011261308157600080fd5b8135613091848260208601612f8b565b91505092915050565b600082601f8301126130ab57600080fd5b81356130bb848260208601612fc9565b91505092915050565b6000813590506130d381614856565b92915050565b6000602082840312156130eb57600080fd5b60006130f984828501613007565b91505092915050565b60006020828403121561311457600080fd5b60006131228482850161301c565b91505092915050565b6000806040838503121561313e57600080fd5b600061314c85828601613007565b925050602061315d85828601613007565b9150509250929050565b60008060006060848603121561317c57600080fd5b600061318a86828701613007565b935050602061319b86828701613007565b92505060406131ac868287016130c4565b9150509250925092565b600080600080608085870312156131cc57600080fd5b60006131da87828801613007565b94505060206131eb87828801613007565b93505060406131fc878288016130c4565b925050606085013567ffffffffffffffff81111561321957600080fd5b61322587828801613070565b91505092959194509250565b6000806040838503121561324457600080fd5b600061325285828601613007565b925050602061326385828601613031565b9150509250929050565b6000806040838503121561328057600080fd5b600061328e85828601613007565b925050602061329f858286016130c4565b9150509250929050565b6000602082840312156132bb57600080fd5b60006132c984828501613046565b91505092915050565b6000602082840312156132e457600080fd5b60006132f28482850161305b565b91505092915050565b60006020828403121561330d57600080fd5b600082013567ffffffffffffffff81111561332757600080fd5b6133338482850161309a565b91505092915050565b60006020828403121561334e57600080fd5b600061335c848285016130c4565b91505092915050565b61336e81613df1565b82525050565b61337d81613e03565b82525050565b600061338e82613cf3565b6133988185613d09565b93506133a8818560208601613e74565b6133b181614040565b840191505092915050565b60006133c782613cfe565b6133d18185613d1a565b93506133e1818560208601613e74565b6133ea81614040565b840191505092915050565b600061340082613cfe565b61340a8185613d2b565b935061341a818560208601613e74565b80840191505092915050565b6000613433602b83613d1a565b915061343e82614051565b604082019050919050565b6000613456603283613d1a565b9150613461826140a0565b604082019050919050565b6000613479602683613d1a565b9150613484826140ef565b604082019050919050565b600061349c601c83613d1a565b91506134a78261413e565b602082019050919050565b60006134bf602483613d1a565b91506134ca82614167565b604082019050919050565b60006134e2601983613d1a565b91506134ed826141b6565b602082019050919050565b6000613505603983613d1a565b9150613510826141df565b604082019050919050565b6000613528602c83613d1a565b91506135338261422e565b604082019050919050565b600061354b601d83613d1a565b91506135568261427d565b602082019050919050565b600061356e602583613d1a565b9150613579826142a6565b604082019050919050565b6000613591603883613d1a565b915061359c826142f5565b604082019050919050565b60006135b4602383613d1a565b91506135bf82614344565b604082019050919050565b60006135d7602a83613d1a565b91506135e282614393565b604082019050919050565b60006135fa602983613d1a565b9150613605826143e2565b604082019050919050565b600061361d602083613d1a565b915061362882614431565b602082019050919050565b6000613640602a83613d1a565b915061364b8261445a565b604082019050919050565b6000613663602c83613d1a565b915061366e826144a9565b604082019050919050565b6000613686602083613d1a565b9150613691826144f8565b602082019050919050565b60006136a9602383613d1a565b91506136b482614521565b604082019050919050565b60006136cc602983613d1a565b91506136d782614570565b604082019050919050565b60006136ef602f83613d1a565b91506136fa826145bf565b604082019050919050565b6000613712602183613d1a565b915061371d8261460e565b604082019050919050565b6000613735602183613d1a565b91506137408261465d565b604082019050919050565b6000613758602083613d1a565b9150613763826146ac565b602082019050919050565b600061377b603183613d1a565b9150613786826146d5565b604082019050919050565b600061379e602c83613d1a565b91506137a982614724565b604082019050919050565b60006137c1603a83613d1a565b91506137cc82614773565b604082019050919050565b60006137e4603683613d1a565b91506137ef826147c2565b604082019050919050565b61380381613e5b565b82525050565b600061381582856133f5565b915061382182846133f5565b91508190509392505050565b60006020820190506138426000830184613365565b92915050565b600060808201905061385d6000830187613365565b61386a6020830186613365565b61387760408301856137fa565b81810360608301526138898184613383565b905095945050505050565b60006020820190506138a96000830184613374565b92915050565b600060208201905081810360008301526138c981846133bc565b905092915050565b600060208201905081810360008301526138ea81613426565b9050919050565b6000602082019050818103600083015261390a81613449565b9050919050565b6000602082019050818103600083015261392a8161346c565b9050919050565b6000602082019050818103600083015261394a8161348f565b9050919050565b6000602082019050818103600083015261396a816134b2565b9050919050565b6000602082019050818103600083015261398a816134d5565b9050919050565b600060208201905081810360008301526139aa816134f8565b9050919050565b600060208201905081810360008301526139ca8161351b565b9050919050565b600060208201905081810360008301526139ea8161353e565b9050919050565b60006020820190508181036000830152613a0a81613561565b9050919050565b60006020820190508181036000830152613a2a81613584565b9050919050565b60006020820190508181036000830152613a4a816135a7565b9050919050565b60006020820190508181036000830152613a6a816135ca565b9050919050565b60006020820190508181036000830152613a8a816135ed565b9050919050565b60006020820190508181036000830152613aaa81613610565b9050919050565b60006020820190508181036000830152613aca81613633565b9050919050565b60006020820190508181036000830152613aea81613656565b9050919050565b60006020820190508181036000830152613b0a81613679565b9050919050565b60006020820190508181036000830152613b2a8161369c565b9050919050565b60006020820190508181036000830152613b4a816136bf565b9050919050565b60006020820190508181036000830152613b6a816136e2565b9050919050565b60006020820190508181036000830152613b8a81613705565b9050919050565b60006020820190508181036000830152613baa81613728565b9050919050565b60006020820190508181036000830152613bca8161374b565b9050919050565b60006020820190508181036000830152613bea8161376e565b9050919050565b60006020820190508181036000830152613c0a81613791565b9050919050565b60006020820190508181036000830152613c2a816137b4565b9050919050565b60006020820190508181036000830152613c4a816137d7565b9050919050565b6000602082019050613c6660008301846137fa565b92915050565b6000613c76613c87565b9050613c828282613ed9565b919050565b6000604051905090565b600067ffffffffffffffff821115613cac57613cab614011565b5b613cb582614040565b9050602081019050919050565b600067ffffffffffffffff821115613cdd57613cdc614011565b5b613ce682614040565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d4182613e5b565b9150613d4c83613e5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8157613d80613f84565b5b828201905092915050565b6000613d9782613e5b565b9150613da283613e5b565b925082613db257613db1613fb3565b5b828204905092915050565b6000613dc882613e5b565b9150613dd383613e5b565b925082821015613de657613de5613f84565b5b828203905092915050565b6000613dfc82613e3b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e92578082015181840152602081019050613e77565b83811115613ea1576000848401525b50505050565b60006002820490506001821680613ebf57607f821691505b60208210811415613ed357613ed2613fe2565b5b50919050565b613ee282614040565b810181811067ffffffffffffffff82111715613f0157613f00614011565b5b80604052505050565b6000613f1582613e5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f4857613f47613f84565b5b600182019050919050565b6000613f5e82613e5b565b9150613f6983613e5b565b925082613f7957613f78613fb3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206265206f6e206f72206166746572207468652072657665616c207460008201527f696d6520746f20736574207374617274696e6720696e64657800000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f52657175657374656420746f6b656e496420657863656564732075707065722060008201527f626f756e64000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742061204d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204d6f756e747300000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5374617274696e6720696e64657820626c6f636b20697320616c72656164792060008201527f7365740000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f746f6b656e4964206f75747369646520636f6c6c656374696f6e20626f756e6460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d757374206f776e20746865204d6f6e7374657220666f72207265717565737460008201527f656420746f6b656e496420746f206d696e742061204d6f756e74000000000000602082015250565b7f53616c652068617320616c726561647920656e6465642c206e6f206d6f72652060008201527f4d6f6e7374657273206c65667420746f2073656c6c2e00000000000000000000602082015250565b61481a81613df1565b811461482557600080fd5b50565b61483181613e03565b811461483c57600080fd5b50565b61484881613e0f565b811461485357600080fd5b50565b61485f81613e5b565b811461486a57600080fd5b5056fea26469706673582212201ef9a43401dad61d03001a370b57537146f893f17cc8df4370d18581dee2e0aa64736f6c6343000803003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ac18fcebb80051091ccd3dc3d5ef813d911bbc200000000000000000000000000000000000000000000000000000000000000144d6f6e7374726f436974696573204d6f756e7473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d4f4e5354524f4d4f554e545300000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102695760003560e01c806370a0823111610151578063995061ca116100c3578063e985e9c511610087578063e985e9c5146106f0578063e986655014610720578063eb8d24441461072a578063f0292a0314610748578063f2fde38b14610766578063f62f3c111461078257610269565b8063995061ca1461064c5780639fe8cf001461066a578063a22cb46514610688578063b88d4fde146106a4578063c87b56dd146106c057610269565b80638da5cb5b116101155780638da5cb5b1461059a5780638ea6abdd146105b857806395d89b41146105d65780639711715a146105f4578063988301651461061257806398d5fdca1461062e57610269565b806370a082311461051a578063715018a61461054a5780637d17fcbe14610554578063818aa5531461055e5780638d859f3e1461057c57610269565b80632f745c59116101ea5780633f1aac52116101ae5780633f1aac521461044657806342842e0e146104645780634f6ccce71461048057806355f804b3146104b05780636352211e146104cc5780636e2792a4146104fc57610269565b80632f745c59146103b657806333c41a90146103e657806334918dfd1461041657806336974706146104205780633a66cc671461042a57610269565b80631096952311610231578063109695231461032457806318160ddd1461034057806323b872dd1461035e57806329a58d481461037a5780632f2eda311461039857610269565b8063018a2c371461026e57806301ffc9a71461028a57806306fdde03146102ba578063081812fc146102d8578063095ea7b314610308575b600080fd5b6102886004803603810190610283919061333c565b6107a0565b005b6102a4600480360381019061029f91906132a9565b610826565b6040516102b19190613894565b60405180910390f35b6102c26108a0565b6040516102cf91906138af565b60405180910390f35b6102f260048036038101906102ed919061333c565b610932565b6040516102ff919061382d565b60405180910390f35b610322600480360381019061031d919061326d565b6109b7565b005b61033e600480360381019061033991906132fb565b610acf565b005b610348610b65565b6040516103559190613c51565b60405180910390f35b61037860048036038101906103739190613167565b610b72565b005b610382610bd2565b60405161038f9190613c51565b60405180910390f35b6103a0610bd8565b6040516103ad9190613c51565b60405180910390f35b6103d060048036038101906103cb919061326d565b610bde565b6040516103dd9190613c51565b60405180910390f35b61040060048036038101906103fb919061333c565b610c83565b60405161040d9190613894565b60405180910390f35b61041e610cd9565b005b610428610d81565b005b610444600480360381019061043f919061333c565b610e29565b005b61044e610eaf565b60405161045b9190613c51565b60405180910390f35b61047e60048036038101906104799190613167565b610eb7565b005b61049a6004803603810190610495919061333c565b610ed7565b6040516104a79190613c51565b60405180910390f35b6104ca60048036038101906104c591906132fb565b610f6e565b005b6104e660048036038101906104e1919061333c565b611004565b6040516104f3919061382d565b60405180910390f35b6105046110b6565b60405161051191906138af565b60405180910390f35b610534600480360381019061052f91906130d9565b611144565b6040516105419190613c51565b60405180910390f35b6105526111fc565b005b61055c611339565b005b610566611448565b6040516105739190613c51565b60405180910390f35b61058461144e565b6040516105919190613c51565b60405180910390f35b6105a2611459565b6040516105af919061382d565b60405180910390f35b6105c0611483565b6040516105cd9190613c51565b60405180910390f35b6105de611489565b6040516105eb91906138af565b60405180910390f35b6105fc61151b565b6040516106099190613894565b60405180910390f35b61062c6004803603810190610627919061333c565b61152e565b005b610636611739565b6040516106439190613c51565b60405180910390f35b610654611793565b6040516106619190613c51565b60405180910390f35b610672611799565b60405161067f9190613c51565b60405180910390f35b6106a2600480360381019061069d9190613231565b61179f565b005b6106be60048036038101906106b991906131b6565b611920565b005b6106da60048036038101906106d5919061333c565b611982565b6040516106e791906138af565b60405180910390f35b61070a6004803603810190610705919061312b565b611a29565b6040516107179190613894565b60405180910390f35b610728611abd565b005b610732611c18565b60405161073f9190613894565b60405180910390f35b610750611c2b565b60405161075d9190613c51565b60405180910390f35b610780600480360381019061077b91906130d9565b611c30565b005b61078a611ddc565b6040516107979190613c51565b60405180910390f35b6107a8611de2565b73ffffffffffffffffffffffffffffffffffffffff166107c6611459565b73ffffffffffffffffffffffffffffffffffffffff161461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390613af1565b60405180910390fd5b8060128190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610899575061089882611dea565b5b9050919050565b6060600080546108af90613ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546108db90613ea7565b80156109285780601f106108fd57610100808354040283529160200191610928565b820191906000526020600020905b81548152906001019060200180831161090b57829003601f168201915b5050505050905090565b600061093d82611ecc565b61097c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097390613ad1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c282611004565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613b91565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a52611de2565b73ffffffffffffffffffffffffffffffffffffffff161480610a815750610a8081610a7b611de2565b611a29565b5b610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790613a11565b60405180910390fd5b610aca8383611f38565b505050565b610ad7611de2565b73ffffffffffffffffffffffffffffffffffffffff16610af5611459565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613af1565b60405180910390fd5b80600c9080519060200190610b61929190612ee8565b5050565b6000600880549050905090565b610b83610b7d611de2565b82611ff1565b610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990613bd1565b60405180910390fd5b610bcd8383836120cf565b505050565b600e5481565b600f5481565b6000610be983611144565b8210610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c21906138d1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006010548210610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090613b71565b60405180910390fd5b610cd282611ecc565b9050919050565b610ce1611de2565b73ffffffffffffffffffffffffffffffffffffffff16610cff611459565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613af1565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b610d89611de2565b73ffffffffffffffffffffffffffffffffffffffff16610da7611459565b73ffffffffffffffffffffffffffffffffffffffff1614610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613af1565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b610e31611de2565b73ffffffffffffffffffffffffffffffffffffffff16610e4f611459565b73ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90613af1565b60405180910390fd5b8060118190555050565b636132b70081565b610ed283838360405180602001604052806000815250611920565b505050565b6000610ee1610b65565b8210610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990613bf1565b60405180910390fd5b60088281548110610f5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f76611de2565b73ffffffffffffffffffffffffffffffffffffffff16610f94611459565b73ffffffffffffffffffffffffffffffffffffffff1614610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190613af1565b60405180910390fd5b8060139080519060200190611000929190612ee8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613a71565b60405180910390fd5b80915050919050565b600c80546110c390613ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546110ef90613ea7565b801561113c5780601f106111115761010080835404028352916020019161113c565b820191906000526020600020905b81548152906001019060200180831161111f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac90613a51565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611204611de2565b73ffffffffffffffffffffffffffffffffffffffff16611222611459565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613af1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611341611de2565b73ffffffffffffffffffffffffffffffffffffffff1661135f611459565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90613af1565b60405180910390fd5b6000600f54146113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f190613b11565b60405180910390fd5b6000600e541461143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906139d1565b60405180910390fd5b43600f81905550565b60115481565b662386f26fc1000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61099481565b60606001805461149890613ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546114c490613ea7565b80156115115780601f106114e657610100808354040283529160200191611511565b820191906000526020600020905b8154815290600101906020018083116114f457829003601f168201915b5050505050905090565b600d60019054906101000a900460ff1681565b600d60009054906101000a900460ff1661157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613a31565b60405180910390fd5b601054611588610b65565b106115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613ab1565b60405180910390fd5b610994811061160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906139f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161167e9190613c51565b60206040518083038186803b15801561169657600080fd5b505afa1580156116aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ce9190613102565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613c11565b60405180910390fd5b61172e338261232b565b611736612349565b50565b6000611f40611746610b65565b10611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90613c31565b60405180910390fd5b662386f26fc10000905090565b60105481565b611f4081565b6117a7611de2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90613971565b60405180910390fd5b8060056000611822611de2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118cf611de2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119149190613894565b60405180910390a35050565b61193161192b611de2565b83611ff1565b611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613bd1565b60405180910390fd5b61197c8484848461237f565b50505050565b606061198d82611ecc565b6119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390613b51565b60405180910390fd5b60006119d66123db565b905060008151116119f65760405180602001604052806000815250611a21565b80611a008461246d565b604051602001611a11929190613809565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600e5414611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af9906139d1565b60405180910390fd5b6000600f541415611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90613bb1565b60405180910390fd5b60125442101580611b615750601054611b5f610b65565b145b611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613991565b60405180910390fd5b601054600f544060001c611bb49190613f53565b600e8190555060ff600f5443611bca9190613dbd565b1115611bf557601054600143611be09190613dbd565b4060001c611bee9190613f53565b600e819055505b6000600e541415611c16576001600e54611c0f9190613d36565b600e819055505b565b600d60009054906101000a900460ff1681565b600181565b611c38611de2565b73ffffffffffffffffffffffffffffffffffffffff16611c56611459565b73ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390613af1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1390613911565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611eb557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ec55750611ec48261261a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fab83611004565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ffc82611ecc565b61203b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612032906139b1565b60405180910390fd5b600061204683611004565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b557508373ffffffffffffffffffffffffffffffffffffffff1661209d84610932565b73ffffffffffffffffffffffffffffffffffffffff16145b806120c657506120c58185611a29565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120ef82611004565b73ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c90613b31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90613951565b60405180910390fd5b6121c0838383612684565b6121cb600082611f38565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221b9190613dbd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122729190613d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612345828260405180602001604052806000815250612798565b5050565b6000600f541480156123705750601054612361610b65565b148061236f57506011544210155b5b1561237d5743600f819055505b565b61238a8484846120cf565b612396848484846127f3565b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906138f1565b60405180910390fd5b50505050565b6060601380546123ea90613ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461241690613ea7565b80156124635780601f1061243857610100808354040283529160200191612463565b820191906000526020600020905b81548152906001019060200180831161244657829003601f168201915b5050505050905090565b606060008214156124b5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612615565b600082905060005b600082146124e75780806124d090613f0a565b915050600a826124e09190613d8c565b91506124bd565b60008167ffffffffffffffff811115612529577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561255b5781602001600182028036833780820191505090505b5090505b6000851461260e576001826125749190613dbd565b9150600a856125839190613f53565b603061258f9190613d36565b60f81b8183815181106125cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126079190613d8c565b945061255f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268f83838361298a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d2576126cd8161298f565b612711565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127105761270f83826129d8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127545761274f81612b45565b612793565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612792576127918282612c88565b5b5b505050565b6127a28383612d07565b6127af60008484846127f3565b6127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e5906138f1565b60405180910390fd5b505050565b60006128148473ffffffffffffffffffffffffffffffffffffffff16612ed5565b1561297d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283d611de2565b8786866040518563ffffffff1660e01b815260040161285f9493929190613848565b602060405180830381600087803b15801561287957600080fd5b505af19250505080156128aa57506040513d601f19601f820116820180604052508101906128a791906132d2565b60015b61292d573d80600081146128da576040519150601f19603f3d011682016040523d82523d6000602084013e6128df565b606091505b50600081511415612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c906138f1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612982565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129e584611144565b6129ef9190613dbd565b9050600060076000848152602001908152602001600020549050818114612ad4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b599190613dbd565b9050600060096000848152602001908152602001600020549050600060088381548110612baf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612bf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c9383611144565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e90613a91565b60405180910390fd5b612d8081611ecc565b15612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db790613931565b60405180910390fd5b612dcc60008383612684565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e1c9190613d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ef490613ea7565b90600052602060002090601f016020900481019282612f165760008555612f5d565b82601f10612f2f57805160ff1916838001178555612f5d565b82800160010185558215612f5d579182015b82811115612f5c578251825591602001919060010190612f41565b5b509050612f6a9190612f6e565b5090565b5b80821115612f87576000816000905550600101612f6f565b5090565b6000612f9e612f9984613c91565b613c6c565b905082815260208101848484011115612fb657600080fd5b612fc1848285613e65565b509392505050565b6000612fdc612fd784613cc2565b613c6c565b905082815260208101848484011115612ff457600080fd5b612fff848285613e65565b509392505050565b60008135905061301681614811565b92915050565b60008151905061302b81614811565b92915050565b60008135905061304081614828565b92915050565b6000813590506130558161483f565b92915050565b60008151905061306a8161483f565b92915050565b600082601f83011261308157600080fd5b8135613091848260208601612f8b565b91505092915050565b600082601f8301126130ab57600080fd5b81356130bb848260208601612fc9565b91505092915050565b6000813590506130d381614856565b92915050565b6000602082840312156130eb57600080fd5b60006130f984828501613007565b91505092915050565b60006020828403121561311457600080fd5b60006131228482850161301c565b91505092915050565b6000806040838503121561313e57600080fd5b600061314c85828601613007565b925050602061315d85828601613007565b9150509250929050565b60008060006060848603121561317c57600080fd5b600061318a86828701613007565b935050602061319b86828701613007565b92505060406131ac868287016130c4565b9150509250925092565b600080600080608085870312156131cc57600080fd5b60006131da87828801613007565b94505060206131eb87828801613007565b93505060406131fc878288016130c4565b925050606085013567ffffffffffffffff81111561321957600080fd5b61322587828801613070565b91505092959194509250565b6000806040838503121561324457600080fd5b600061325285828601613007565b925050602061326385828601613031565b9150509250929050565b6000806040838503121561328057600080fd5b600061328e85828601613007565b925050602061329f858286016130c4565b9150509250929050565b6000602082840312156132bb57600080fd5b60006132c984828501613046565b91505092915050565b6000602082840312156132e457600080fd5b60006132f28482850161305b565b91505092915050565b60006020828403121561330d57600080fd5b600082013567ffffffffffffffff81111561332757600080fd5b6133338482850161309a565b91505092915050565b60006020828403121561334e57600080fd5b600061335c848285016130c4565b91505092915050565b61336e81613df1565b82525050565b61337d81613e03565b82525050565b600061338e82613cf3565b6133988185613d09565b93506133a8818560208601613e74565b6133b181614040565b840191505092915050565b60006133c782613cfe565b6133d18185613d1a565b93506133e1818560208601613e74565b6133ea81614040565b840191505092915050565b600061340082613cfe565b61340a8185613d2b565b935061341a818560208601613e74565b80840191505092915050565b6000613433602b83613d1a565b915061343e82614051565b604082019050919050565b6000613456603283613d1a565b9150613461826140a0565b604082019050919050565b6000613479602683613d1a565b9150613484826140ef565b604082019050919050565b600061349c601c83613d1a565b91506134a78261413e565b602082019050919050565b60006134bf602483613d1a565b91506134ca82614167565b604082019050919050565b60006134e2601983613d1a565b91506134ed826141b6565b602082019050919050565b6000613505603983613d1a565b9150613510826141df565b604082019050919050565b6000613528602c83613d1a565b91506135338261422e565b604082019050919050565b600061354b601d83613d1a565b91506135568261427d565b602082019050919050565b600061356e602583613d1a565b9150613579826142a6565b604082019050919050565b6000613591603883613d1a565b915061359c826142f5565b604082019050919050565b60006135b4602383613d1a565b91506135bf82614344565b604082019050919050565b60006135d7602a83613d1a565b91506135e282614393565b604082019050919050565b60006135fa602983613d1a565b9150613605826143e2565b604082019050919050565b600061361d602083613d1a565b915061362882614431565b602082019050919050565b6000613640602a83613d1a565b915061364b8261445a565b604082019050919050565b6000613663602c83613d1a565b915061366e826144a9565b604082019050919050565b6000613686602083613d1a565b9150613691826144f8565b602082019050919050565b60006136a9602383613d1a565b91506136b482614521565b604082019050919050565b60006136cc602983613d1a565b91506136d782614570565b604082019050919050565b60006136ef602f83613d1a565b91506136fa826145bf565b604082019050919050565b6000613712602183613d1a565b915061371d8261460e565b604082019050919050565b6000613735602183613d1a565b91506137408261465d565b604082019050919050565b6000613758602083613d1a565b9150613763826146ac565b602082019050919050565b600061377b603183613d1a565b9150613786826146d5565b604082019050919050565b600061379e602c83613d1a565b91506137a982614724565b604082019050919050565b60006137c1603a83613d1a565b91506137cc82614773565b604082019050919050565b60006137e4603683613d1a565b91506137ef826147c2565b604082019050919050565b61380381613e5b565b82525050565b600061381582856133f5565b915061382182846133f5565b91508190509392505050565b60006020820190506138426000830184613365565b92915050565b600060808201905061385d6000830187613365565b61386a6020830186613365565b61387760408301856137fa565b81810360608301526138898184613383565b905095945050505050565b60006020820190506138a96000830184613374565b92915050565b600060208201905081810360008301526138c981846133bc565b905092915050565b600060208201905081810360008301526138ea81613426565b9050919050565b6000602082019050818103600083015261390a81613449565b9050919050565b6000602082019050818103600083015261392a8161346c565b9050919050565b6000602082019050818103600083015261394a8161348f565b9050919050565b6000602082019050818103600083015261396a816134b2565b9050919050565b6000602082019050818103600083015261398a816134d5565b9050919050565b600060208201905081810360008301526139aa816134f8565b9050919050565b600060208201905081810360008301526139ca8161351b565b9050919050565b600060208201905081810360008301526139ea8161353e565b9050919050565b60006020820190508181036000830152613a0a81613561565b9050919050565b60006020820190508181036000830152613a2a81613584565b9050919050565b60006020820190508181036000830152613a4a816135a7565b9050919050565b60006020820190508181036000830152613a6a816135ca565b9050919050565b60006020820190508181036000830152613a8a816135ed565b9050919050565b60006020820190508181036000830152613aaa81613610565b9050919050565b60006020820190508181036000830152613aca81613633565b9050919050565b60006020820190508181036000830152613aea81613656565b9050919050565b60006020820190508181036000830152613b0a81613679565b9050919050565b60006020820190508181036000830152613b2a8161369c565b9050919050565b60006020820190508181036000830152613b4a816136bf565b9050919050565b60006020820190508181036000830152613b6a816136e2565b9050919050565b60006020820190508181036000830152613b8a81613705565b9050919050565b60006020820190508181036000830152613baa81613728565b9050919050565b60006020820190508181036000830152613bca8161374b565b9050919050565b60006020820190508181036000830152613bea8161376e565b9050919050565b60006020820190508181036000830152613c0a81613791565b9050919050565b60006020820190508181036000830152613c2a816137b4565b9050919050565b60006020820190508181036000830152613c4a816137d7565b9050919050565b6000602082019050613c6660008301846137fa565b92915050565b6000613c76613c87565b9050613c828282613ed9565b919050565b6000604051905090565b600067ffffffffffffffff821115613cac57613cab614011565b5b613cb582614040565b9050602081019050919050565b600067ffffffffffffffff821115613cdd57613cdc614011565b5b613ce682614040565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d4182613e5b565b9150613d4c83613e5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8157613d80613f84565b5b828201905092915050565b6000613d9782613e5b565b9150613da283613e5b565b925082613db257613db1613fb3565b5b828204905092915050565b6000613dc882613e5b565b9150613dd383613e5b565b925082821015613de657613de5613f84565b5b828203905092915050565b6000613dfc82613e3b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e92578082015181840152602081019050613e77565b83811115613ea1576000848401525b50505050565b60006002820490506001821680613ebf57607f821691505b60208210811415613ed357613ed2613fe2565b5b50919050565b613ee282614040565b810181811067ffffffffffffffff82111715613f0157613f00614011565b5b80604052505050565b6000613f1582613e5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f4857613f47613f84565b5b600182019050919050565b6000613f5e82613e5b565b9150613f6983613e5b565b925082613f7957613f78613fb3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206265206f6e206f72206166746572207468652072657665616c207460008201527f696d6520746f20736574207374617274696e6720696e64657800000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f52657175657374656420746f6b656e496420657863656564732075707065722060008201527f626f756e64000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e742061204d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204d6f756e747300000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5374617274696e6720696e64657820626c6f636b20697320616c72656164792060008201527f7365740000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f746f6b656e4964206f75747369646520636f6c6c656374696f6e20626f756e6460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d757374206f776e20746865204d6f6e7374657220666f72207265717565737460008201527f656420746f6b656e496420746f206d696e742061204d6f756e74000000000000602082015250565b7f53616c652068617320616c726561647920656e6465642c206e6f206d6f72652060008201527f4d6f6e7374657273206c65667420746f2073656c6c2e00000000000000000000602082015250565b61481a81613df1565b811461482557600080fd5b50565b61483181613e03565b811461483c57600080fd5b50565b61484881613e0f565b811461485357600080fd5b50565b61485f81613e5b565b811461486a57600080fd5b5056fea26469706673582212201ef9a43401dad61d03001a370b57537146f893f17cc8df4370d18581dee2e0aa64736f6c63430008030033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ac18fcebb80051091ccd3dc3d5ef813d911bbc200000000000000000000000000000000000000000000000000000000000000144d6f6e7374726f436974696573204d6f756e7473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d4f4e5354524f4d4f554e545300000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): MonstroCities Mounts
Arg [1] : symbol (string): MONSTROMOUNTS
Arg [2] : maxNftSupply (uint256): 8000
Arg [3] : saleStart (uint256): 0
Arg [4] : dependentContractAddress (address): 0x2Ac18FCEBB80051091cCd3dc3d5Ef813d911BBC2

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001f40
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000002ac18fcebb80051091ccd3dc3d5ef813d911bbc2
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [6] : 4d6f6e7374726f436974696573204d6f756e7473000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [8] : 4d4f4e5354524f4d4f554e545300000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43291:4370:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44337:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34537:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21742:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23202:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22739:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44855:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35190:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24092:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43636:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43679:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34858:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44982:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45352:83;;;:::i;:::-;;45445:74;;;:::i;:::-;;44710:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43909:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24468:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35380:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45264:82;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21436:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43528:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21166:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42409:148;;;:::i;:::-;;47376:282;;;:::i;:::-;;43756:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43856:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41758:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43439:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21911:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43603:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45785:508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44465:235;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43727:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43386:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23495:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24690:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22086:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23861:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46367:879;;;:::i;:::-;;43564:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43490:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42712:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43793:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44337:116;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44432:15:::1;44414;:33;;;;44337:116:::0;:::o;34537:237::-;34639:4;34678:35;34663:50;;;:11;:50;;;;:103;;;;34730:36;34754:11;34730:23;:36::i;:::-;34663:103;34656:110;;34537:237;;;:::o;21742:100::-;21796:13;21829:5;21822:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21742:100;:::o;23202:221::-;23278:7;23306:16;23314:7;23306;:16::i;:::-;23298:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23391:15;:24;23407:7;23391:24;;;;;;;;;;;;;;;;;;;;;23384:31;;23202:221;;;:::o;22739:397::-;22820:13;22836:23;22851:7;22836:14;:23::i;:::-;22820:39;;22884:5;22878:11;;:2;:11;;;;22870:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22964:5;22948:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22973:37;22990:5;22997:12;:10;:12::i;:::-;22973:16;:37::i;:::-;22948:62;22940:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;23107:21;23116:2;23120:7;23107:8;:21::i;:::-;22739:397;;;:::o;44855:121::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44956:14:::1;44936:17;:34;;;;;;;;;;;;:::i;:::-;;44855:121:::0;:::o;35190:113::-;35251:7;35278:10;:17;;;;35271:24;;35190:113;:::o;24092:305::-;24253:41;24272:12;:10;:12::i;:::-;24286:7;24253:18;:41::i;:::-;24245:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24361:28;24371:4;24377:2;24381:7;24361:9;:28::i;:::-;24092:305;;;:::o;43636:38::-;;;;:::o;43679:43::-;;;;:::o;34858:256::-;34955:7;34991:23;35008:5;34991:16;:23::i;:::-;34983:5;:31;34975:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35080:12;:19;35093:5;35080:19;;;;;;;;;;;;;;;:26;35100:5;35080:26;;;;;;;;;;;;35073:33;;34858:256;;;;:::o;44982:174::-;45040:4;45071:9;;45061:7;:19;45053:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45134:16;45142:7;45134;:16::i;:::-;45127:23;;44982:174;;;:::o;45352:83::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45417:12:::1;;;;;;;;;;;45416:13;45401:12;;:28;;;;;;;;;;;;;;;;;;45352:83::o:0;45445:74::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45505:8:::1;;;;;;;;;;;45504:9;45493:8;;:20;;;;;;;;;;;;;;;;;;45445:74::o:0;44710:139::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44821:22:::1;44801:17;:42;;;;44710:139:::0;:::o;43909:50::-;43949:10;43909:50;:::o;24468:151::-;24572:39;24589:4;24595:2;24599:7;24572:39;;;;;;;;;;;;:16;:39::i;:::-;24468:151;;;:::o;35380:233::-;35455:7;35491:30;:28;:30::i;:::-;35483:5;:38;35475:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35588:10;35599:5;35588:17;;;;;;;;;;;;;;;;;;;;;;;;35581:24;;35380:233;;;:::o;45264:82::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45337:3:::1;45327:7;:13;;;;;;;;;;;;:::i;:::-;;45264:82:::0;:::o;21436:239::-;21508:7;21528:13;21544:7;:16;21552:7;21544:16;;;;;;;;;;;;;;;;;;;;;21528:32;;21596:1;21579:19;;:5;:19;;;;21571:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21662:5;21655:12;;;21436:239;;;:::o;43528:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21166:208::-;21238:7;21283:1;21266:19;;:5;:19;;;;21258:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21350:9;:16;21360:5;21350:16;;;;;;;;;;;;;;;;21343:23;;21166:208;;;:::o;42409:148::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42516:1:::1;42479:40;;42500:6;;;;;;;;;;;42479:40;;;;;;;;;;;;42547:1;42530:6;;:19;;;;;;;;;;;;;;;;;;42409:148::o:0;47376:282::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47482:1:::1;47450:28;;:33;47442:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;47565:1;47538:23;;:28;47530:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47640:12;47609:28;:43;;;;47376:282::o:0;43756:32::-;;;;:::o;43856:42::-;43888:10;43856:42;:::o;41758:87::-;41804:7;41831:6;;;;;;;;;;;41824:13;;41758:87;:::o;43439:40::-;43475:4;43439:40;:::o;21911:104::-;21967:13;22000:7;21993:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21911:104;:::o;43603:28::-;;;;;;;;;;;;;:::o;45785:508::-;45854:12;;;;;;;;;;;45846:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45937:9;;45921:13;:11;:13::i;:::-;:25;45913:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43475:4;46008:14;:29;46000:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;46129:10;46094:45;;:7;;;;;;;;;;;:15;;;46110:14;46094:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;46086:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;46215:37;46225:10;46237:14;46215:9;:37::i;:::-;46259:26;:24;:26::i;:::-;45785:508;:::o;44465:235::-;44506:7;43428:4;44533:13;:11;:13::i;:::-;:34;44525:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;44657:17;44650:24;;44465:235;:::o;43727:24::-;;;;:::o;43386:46::-;43428:4;43386:46;:::o;23495:295::-;23610:12;:10;:12::i;:::-;23598:24;;:8;:24;;;;23590:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23710:8;23665:18;:32;23684:12;:10;:12::i;:::-;23665:32;;;;;;;;;;;;;;;:42;23698:8;23665:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23763:8;23734:48;;23749:12;:10;:12::i;:::-;23734:48;;;23773:8;23734:48;;;;;;:::i;:::-;;;;;;;;23495:295;;:::o;24690:285::-;24822:41;24841:12;:10;:12::i;:::-;24855:7;24822:18;:41::i;:::-;24814:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24928:39;24942:4;24948:2;24952:7;24961:5;24928:13;:39::i;:::-;24690:285;;;;:::o;22086:360::-;22159:13;22193:16;22201:7;22193;:16::i;:::-;22185:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22274:21;22298:10;:8;:10::i;:::-;22274:34;;22350:1;22332:7;22326:21;:25;:112;;;;;;;;;;;;;;;;;22391:7;22400:18;:7;:16;:18::i;:::-;22374:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22326:112;22319:119;;;22086:360;;;:::o;23861:164::-;23958:4;23982:18;:25;24001:5;23982:25;;;;;;;;;;;;;;;:35;24008:8;23982:35;;;;;;;;;;;;;;;;;;;;;;;;;23975:42;;23861:164;;;;:::o;46367:879::-;46444:1;46417:23;;:28;46409:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46526:1;46494:28;;:33;;46486:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;46606:15;;46587;:34;;:64;;;;46642:9;;46625:13;:11;:13::i;:::-;:26;46587:64;46571:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;46813:9;;46780:28;;46770:39;46762:48;;:60;;;;:::i;:::-;46736:23;:86;;;;47000:3;46968:28;;46953:12;:43;;;;:::i;:::-;46952:51;46948:148;;;47079:9;;47073:1;47058:12;:16;;;;:::i;:::-;47048:27;47040:36;;:48;;;;:::i;:::-;47014:23;:74;;;;46948:148;47168:1;47141:23;;:28;47137:104;;;47232:1;47206:23;;:27;;;;:::i;:::-;47180:23;:53;;;;47137:104;46367:879::o;43564:32::-;;;;;;;;;;;;;:::o;43490:33::-;43522:1;43490:33;:::o;42712:244::-;41989:12;:10;:12::i;:::-;41978:23;;:7;:5;:7::i;:::-;:23;;;41970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42821:1:::1;42801:22;;:8;:22;;;;42793:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42911:8;42882:38;;42903:6;;;;;;;;;;;42882:38;;;;;;;;;;;;42940:8;42931:6;;:17;;;;;;;;;;;;;;;;;;42712:244:::0;:::o;43793:30::-;;;;:::o;16098:98::-;16151:7;16178:10;16171:17;;16098:98;:::o;20810:292::-;20912:4;20951:25;20936:40;;;:11;:40;;;;:105;;;;21008:33;20993:48;;;:11;:48;;;;20936:105;:158;;;;21058:36;21082:11;21058:23;:36::i;:::-;20936:158;20929:165;;20810:292;;;:::o;26442:127::-;26507:4;26559:1;26531:30;;:7;:16;26539:7;26531:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26524:37;;26442:127;;;:::o;30319:174::-;30421:2;30394:15;:24;30410:7;30394:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30477:7;30473:2;30439:46;;30448:23;30463:7;30448:14;:23::i;:::-;30439:46;;;;;;;;;;;;30319:174;;:::o;26736:348::-;26829:4;26854:16;26862:7;26854;:16::i;:::-;26846:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26930:13;26946:23;26961:7;26946:14;:23::i;:::-;26930:39;;26999:5;26988:16;;:7;:16;;;:51;;;;27032:7;27008:31;;:20;27020:7;27008:11;:20::i;:::-;:31;;;26988:51;:87;;;;27043:32;27060:5;27067:7;27043:16;:32::i;:::-;26988:87;26980:96;;;26736:348;;;;:::o;29657:544::-;29782:4;29755:31;;:23;29770:7;29755:14;:23::i;:::-;:31;;;29747:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29865:1;29851:16;;:2;:16;;;;29843:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29921:39;29942:4;29948:2;29952:7;29921:20;:39::i;:::-;30025:29;30042:1;30046:7;30025:8;:29::i;:::-;30086:1;30067:9;:15;30077:4;30067:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30115:1;30098:9;:13;30108:2;30098:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30146:2;30127:7;:16;30135:7;30127:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30185:7;30181:2;30166:27;;30175:4;30166:27;;;;;;;;;;;;29657:544;;;:::o;27426:110::-;27502:26;27512:2;27516:7;27502:26;;;;;;;;;;;;:9;:26::i;:::-;27426:110;;:::o;45529:248::-;45624:1;45592:28;;:33;:112;;;;;45654:9;;45637:13;:11;:13::i;:::-;:26;:66;;;;45686:17;;45667:15;:36;;45637:66;45592:112;45580:192;;;45752:12;45721:28;:43;;;;45580:192;45529:248::o;25857:272::-;25971:28;25981:4;25987:2;25991:7;25971:9;:28::i;:::-;26018:48;26041:4;26047:2;26051:7;26060:5;26018:22;:48::i;:::-;26010:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25857:272;;;;:::o;45162:94::-;45214:13;45243:7;45236:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45162:94;:::o;16753:723::-;16809:13;17039:1;17030:5;:10;17026:53;;;17057:10;;;;;;;;;;;;;;;;;;;;;17026:53;17089:12;17104:5;17089:20;;17120:14;17145:78;17160:1;17152:4;:9;17145:78;;17178:8;;;;;:::i;:::-;;;;17209:2;17201:10;;;;;:::i;:::-;;;17145:78;;;17233:19;17265:6;17255:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17233:39;;17283:154;17299:1;17290:5;:10;17283:154;;17327:1;17317:11;;;;;:::i;:::-;;;17394:2;17386:5;:10;;;;:::i;:::-;17373:2;:24;;;;:::i;:::-;17360:39;;17343:6;17350;17343:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17423:2;17414:11;;;;;:::i;:::-;;;17283:154;;;17461:6;17447:21;;;;;16753:723;;;;:::o;19308:157::-;19393:4;19432:25;19417:40;;;:11;:40;;;;19410:47;;19308:157;;;:::o;36226:555::-;36336:45;36363:4;36369:2;36373:7;36336:26;:45::i;:::-;36414:1;36398:18;;:4;:18;;;36394:187;;;36433:40;36465:7;36433:31;:40::i;:::-;36394:187;;;36503:2;36495:10;;:4;:10;;;36491:90;;36522:47;36555:4;36561:7;36522:32;:47::i;:::-;36491:90;36394:187;36609:1;36595:16;;:2;:16;;;36591:183;;;36628:45;36665:7;36628:36;:45::i;:::-;36591:183;;;36701:4;36695:10;;:2;:10;;;36691:83;;36722:40;36750:2;36754:7;36722:27;:40::i;:::-;36691:83;36591:183;36226:555;;;:::o;27763:250::-;27859:18;27865:2;27869:7;27859:5;:18::i;:::-;27896:54;27927:1;27931:2;27935:7;27944:5;27896:22;:54::i;:::-;27888:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27763:250;;;:::o;31058:843::-;31179:4;31205:15;:2;:13;;;:15::i;:::-;31201:693;;;31257:2;31241:36;;;31278:12;:10;:12::i;:::-;31292:4;31298:7;31307:5;31241:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31237:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31504:1;31487:6;:13;:18;31483:341;;;31530:60;;;;;;;;;;:::i;:::-;;;;;;;;31483:341;31774:6;31768:13;31759:6;31755:2;31751:15;31744:38;31237:602;31374:45;;;31364:55;;;:6;:55;;;;31357:62;;;;;31201:693;31878:4;31871:11;;31058:843;;;;;;;:::o;32514:93::-;;;;:::o;37504:164::-;37608:10;:17;;;;37581:15;:24;37597:7;37581:24;;;;;;;;;;;:44;;;;37636:10;37652:7;37636:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37504:164;:::o;38295:988::-;38561:22;38611:1;38586:22;38603:4;38586:16;:22::i;:::-;:26;;;;:::i;:::-;38561:51;;38623:18;38644:17;:26;38662:7;38644:26;;;;;;;;;;;;38623:47;;38791:14;38777:10;:28;38773:328;;38822:19;38844:12;:18;38857:4;38844:18;;;;;;;;;;;;;;;:34;38863:14;38844:34;;;;;;;;;;;;38822:56;;38928:11;38895:12;:18;38908:4;38895:18;;;;;;;;;;;;;;;:30;38914:10;38895:30;;;;;;;;;;;:44;;;;39045:10;39012:17;:30;39030:11;39012:30;;;;;;;;;;;:43;;;;38773:328;;39197:17;:26;39215:7;39197:26;;;;;;;;;;;39190:33;;;39241:12;:18;39254:4;39241:18;;;;;;;;;;;;;;;:34;39260:14;39241:34;;;;;;;;;;;39234:41;;;38295:988;;;;:::o;39578:1079::-;39831:22;39876:1;39856:10;:17;;;;:21;;;;:::i;:::-;39831:46;;39888:18;39909:15;:24;39925:7;39909:24;;;;;;;;;;;;39888:45;;40260:19;40282:10;40293:14;40282:26;;;;;;;;;;;;;;;;;;;;;;;;40260:48;;40346:11;40321:10;40332;40321:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40457:10;40426:15;:28;40442:11;40426:28;;;;;;;;;;;:41;;;;40598:15;:24;40614:7;40598:24;;;;;;;;;;;40591:31;;;40633:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39578:1079;;;;:::o;37082:221::-;37167:14;37184:20;37201:2;37184:16;:20::i;:::-;37167:37;;37242:7;37215:12;:16;37228:2;37215:16;;;;;;;;;;;;;;;:24;37232:6;37215:24;;;;;;;;;;;:34;;;;37289:6;37260:17;:26;37278:7;37260:26;;;;;;;;;;;:35;;;;37082:221;;;:::o;28349:382::-;28443:1;28429:16;;:2;:16;;;;28421:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28502:16;28510:7;28502;:16::i;:::-;28501:17;28493:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28564:45;28593:1;28597:2;28601:7;28564:20;:45::i;:::-;28639:1;28622:9;:13;28632:2;28622:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28670:2;28651:7;:16;28659:7;28651:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28715:7;28711:2;28690:33;;28707:1;28690:33;;;;;;;;;;;;28349:382;;:::o;8215:422::-;8275:4;8483:12;8594:7;8582:20;8574:28;;8628:1;8621:4;:8;8614:15;;;8215:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:143::-;;940:6;934:13;925:22;;956:33;983:5;956:33;:::i;:::-;915:80;;;;:::o;1001:133::-;;1082:6;1069:20;1060:29;;1098:30;1122:5;1098:30;:::i;:::-;1050:84;;;;:::o;1140:137::-;;1223:6;1210:20;1201:29;;1239:32;1265:5;1239:32;:::i;:::-;1191:86;;;;:::o;1283:141::-;;1370:6;1364:13;1355:22;;1386:32;1412:5;1386:32;:::i;:::-;1345:79;;;;:::o;1443:271::-;;1547:3;1540:4;1532:6;1528:17;1524:27;1514:2;;1565:1;1562;1555:12;1514:2;1605:6;1592:20;1630:78;1704:3;1696:6;1689:4;1681:6;1677:17;1630:78;:::i;:::-;1621:87;;1504:210;;;;;:::o;1734:273::-;;1839:3;1832:4;1824:6;1820:17;1816:27;1806:2;;1857:1;1854;1847:12;1806:2;1897:6;1884:20;1922:79;1997:3;1989:6;1982:4;1974:6;1970:17;1922:79;:::i;:::-;1913:88;;1796:211;;;;;:::o;2013:139::-;;2097:6;2084:20;2075:29;;2113:33;2140:5;2113:33;:::i;:::-;2065:87;;;;:::o;2158:262::-;;2266:2;2254:9;2245:7;2241:23;2237:32;2234:2;;;2282:1;2279;2272:12;2234:2;2325:1;2350:53;2395:7;2386:6;2375:9;2371:22;2350:53;:::i;:::-;2340:63;;2296:117;2224:196;;;;:::o;2426:284::-;;2545:2;2533:9;2524:7;2520:23;2516:32;2513:2;;;2561:1;2558;2551:12;2513:2;2604:1;2629:64;2685:7;2676:6;2665:9;2661:22;2629:64;:::i;:::-;2619:74;;2575:128;2503:207;;;;:::o;2716:407::-;;;2841:2;2829:9;2820:7;2816:23;2812:32;2809:2;;;2857:1;2854;2847:12;2809:2;2900:1;2925:53;2970:7;2961:6;2950:9;2946:22;2925:53;:::i;:::-;2915:63;;2871:117;3027:2;3053:53;3098:7;3089:6;3078:9;3074:22;3053:53;:::i;:::-;3043:63;;2998:118;2799:324;;;;;:::o;3129:552::-;;;;3271:2;3259:9;3250:7;3246:23;3242:32;3239:2;;;3287:1;3284;3277:12;3239:2;3330:1;3355:53;3400:7;3391:6;3380:9;3376:22;3355:53;:::i;:::-;3345:63;;3301:117;3457:2;3483:53;3528:7;3519:6;3508:9;3504:22;3483:53;:::i;:::-;3473:63;;3428:118;3585:2;3611:53;3656:7;3647:6;3636:9;3632:22;3611:53;:::i;:::-;3601:63;;3556:118;3229:452;;;;;:::o;3687:809::-;;;;;3855:3;3843:9;3834:7;3830:23;3826:33;3823:2;;;3872:1;3869;3862:12;3823:2;3915:1;3940:53;3985:7;3976:6;3965:9;3961:22;3940:53;:::i;:::-;3930:63;;3886:117;4042:2;4068:53;4113:7;4104:6;4093:9;4089:22;4068:53;:::i;:::-;4058:63;;4013:118;4170:2;4196:53;4241:7;4232:6;4221:9;4217:22;4196:53;:::i;:::-;4186:63;;4141:118;4326:2;4315:9;4311:18;4298:32;4357:18;4349:6;4346:30;4343:2;;;4389:1;4386;4379:12;4343:2;4417:62;4471:7;4462:6;4451:9;4447:22;4417:62;:::i;:::-;4407:72;;4269:220;3813:683;;;;;;;:::o;4502:401::-;;;4624:2;4612:9;4603:7;4599:23;4595:32;4592:2;;;4640:1;4637;4630:12;4592:2;4683:1;4708:53;4753:7;4744:6;4733:9;4729:22;4708:53;:::i;:::-;4698:63;;4654:117;4810:2;4836:50;4878:7;4869:6;4858:9;4854:22;4836:50;:::i;:::-;4826:60;;4781:115;4582:321;;;;;:::o;4909:407::-;;;5034:2;5022:9;5013:7;5009:23;5005:32;5002:2;;;5050:1;5047;5040:12;5002:2;5093:1;5118:53;5163:7;5154:6;5143:9;5139:22;5118:53;:::i;:::-;5108:63;;5064:117;5220:2;5246:53;5291:7;5282:6;5271:9;5267:22;5246:53;:::i;:::-;5236:63;;5191:118;4992:324;;;;;:::o;5322:260::-;;5429:2;5417:9;5408:7;5404:23;5400:32;5397:2;;;5445:1;5442;5435:12;5397:2;5488:1;5513:52;5557:7;5548:6;5537:9;5533:22;5513:52;:::i;:::-;5503:62;;5459:116;5387:195;;;;:::o;5588:282::-;;5706:2;5694:9;5685:7;5681:23;5677:32;5674:2;;;5722:1;5719;5712:12;5674:2;5765:1;5790:63;5845:7;5836:6;5825:9;5821:22;5790:63;:::i;:::-;5780:73;;5736:127;5664:206;;;;:::o;5876:375::-;;5994:2;5982:9;5973:7;5969:23;5965:32;5962:2;;;6010:1;6007;6000:12;5962:2;6081:1;6070:9;6066:17;6053:31;6111:18;6103:6;6100:30;6097:2;;;6143:1;6140;6133:12;6097:2;6171:63;6226:7;6217:6;6206:9;6202:22;6171:63;:::i;:::-;6161:73;;6024:220;5952:299;;;;:::o;6257:262::-;;6365:2;6353:9;6344:7;6340:23;6336:32;6333:2;;;6381:1;6378;6371:12;6333:2;6424:1;6449:53;6494:7;6485:6;6474:9;6470:22;6449:53;:::i;:::-;6439:63;;6395:117;6323:196;;;;:::o;6525:118::-;6612:24;6630:5;6612:24;:::i;:::-;6607:3;6600:37;6590:53;;:::o;6649:109::-;6730:21;6745:5;6730:21;:::i;:::-;6725:3;6718:34;6708:50;;:::o;6764:360::-;;6878:38;6910:5;6878:38;:::i;:::-;6932:70;6995:6;6990:3;6932:70;:::i;:::-;6925:77;;7011:52;7056:6;7051:3;7044:4;7037:5;7033:16;7011:52;:::i;:::-;7088:29;7110:6;7088:29;:::i;:::-;7083:3;7079:39;7072:46;;6854:270;;;;;:::o;7130:364::-;;7246:39;7279:5;7246:39;:::i;:::-;7301:71;7365:6;7360:3;7301:71;:::i;:::-;7294:78;;7381:52;7426:6;7421:3;7414:4;7407:5;7403:16;7381:52;:::i;:::-;7458:29;7480:6;7458:29;:::i;:::-;7453:3;7449:39;7442:46;;7222:272;;;;;:::o;7500:377::-;;7634:39;7667:5;7634:39;:::i;:::-;7689:89;7771:6;7766:3;7689:89;:::i;:::-;7682:96;;7787:52;7832:6;7827:3;7820:4;7813:5;7809:16;7787:52;:::i;:::-;7864:6;7859:3;7855:16;7848:23;;7610:267;;;;;:::o;7883:366::-;;8046:67;8110:2;8105:3;8046:67;:::i;:::-;8039:74;;8122:93;8211:3;8122:93;:::i;:::-;8240:2;8235:3;8231:12;8224:19;;8029:220;;;:::o;8255:366::-;;8418:67;8482:2;8477:3;8418:67;:::i;:::-;8411:74;;8494:93;8583:3;8494:93;:::i;:::-;8612:2;8607:3;8603:12;8596:19;;8401:220;;;:::o;8627:366::-;;8790:67;8854:2;8849:3;8790:67;:::i;:::-;8783:74;;8866:93;8955:3;8866:93;:::i;:::-;8984:2;8979:3;8975:12;8968:19;;8773:220;;;:::o;8999:366::-;;9162:67;9226:2;9221:3;9162:67;:::i;:::-;9155:74;;9238:93;9327:3;9238:93;:::i;:::-;9356:2;9351:3;9347:12;9340:19;;9145:220;;;:::o;9371:366::-;;9534:67;9598:2;9593:3;9534:67;:::i;:::-;9527:74;;9610:93;9699:3;9610:93;:::i;:::-;9728:2;9723:3;9719:12;9712:19;;9517:220;;;:::o;9743:366::-;;9906:67;9970:2;9965:3;9906:67;:::i;:::-;9899:74;;9982:93;10071:3;9982:93;:::i;:::-;10100:2;10095:3;10091:12;10084:19;;9889:220;;;:::o;10115:366::-;;10278:67;10342:2;10337:3;10278:67;:::i;:::-;10271:74;;10354:93;10443:3;10354:93;:::i;:::-;10472:2;10467:3;10463:12;10456:19;;10261:220;;;:::o;10487:366::-;;10650:67;10714:2;10709:3;10650:67;:::i;:::-;10643:74;;10726:93;10815:3;10726:93;:::i;:::-;10844:2;10839:3;10835:12;10828:19;;10633:220;;;:::o;10859:366::-;;11022:67;11086:2;11081:3;11022:67;:::i;:::-;11015:74;;11098:93;11187:3;11098:93;:::i;:::-;11216:2;11211:3;11207:12;11200:19;;11005:220;;;:::o;11231:366::-;;11394:67;11458:2;11453:3;11394:67;:::i;:::-;11387:74;;11470:93;11559:3;11470:93;:::i;:::-;11588:2;11583:3;11579:12;11572:19;;11377:220;;;:::o;11603:366::-;;11766:67;11830:2;11825:3;11766:67;:::i;:::-;11759:74;;11842:93;11931:3;11842:93;:::i;:::-;11960:2;11955:3;11951:12;11944:19;;11749:220;;;:::o;11975:366::-;;12138:67;12202:2;12197:3;12138:67;:::i;:::-;12131:74;;12214:93;12303:3;12214:93;:::i;:::-;12332:2;12327:3;12323:12;12316:19;;12121:220;;;:::o;12347:366::-;;12510:67;12574:2;12569:3;12510:67;:::i;:::-;12503:74;;12586:93;12675:3;12586:93;:::i;:::-;12704:2;12699:3;12695:12;12688:19;;12493:220;;;:::o;12719:366::-;;12882:67;12946:2;12941:3;12882:67;:::i;:::-;12875:74;;12958:93;13047:3;12958:93;:::i;:::-;13076:2;13071:3;13067:12;13060:19;;12865:220;;;:::o;13091:366::-;;13254:67;13318:2;13313:3;13254:67;:::i;:::-;13247:74;;13330:93;13419:3;13330:93;:::i;:::-;13448:2;13443:3;13439:12;13432:19;;13237:220;;;:::o;13463:366::-;;13626:67;13690:2;13685:3;13626:67;:::i;:::-;13619:74;;13702:93;13791:3;13702:93;:::i;:::-;13820:2;13815:3;13811:12;13804:19;;13609:220;;;:::o;13835:366::-;;13998:67;14062:2;14057:3;13998:67;:::i;:::-;13991:74;;14074:93;14163:3;14074:93;:::i;:::-;14192:2;14187:3;14183:12;14176:19;;13981:220;;;:::o;14207:366::-;;14370:67;14434:2;14429:3;14370:67;:::i;:::-;14363:74;;14446:93;14535:3;14446:93;:::i;:::-;14564:2;14559:3;14555:12;14548:19;;14353:220;;;:::o;14579:366::-;;14742:67;14806:2;14801:3;14742:67;:::i;:::-;14735:74;;14818:93;14907:3;14818:93;:::i;:::-;14936:2;14931:3;14927:12;14920:19;;14725:220;;;:::o;14951:366::-;;15114:67;15178:2;15173:3;15114:67;:::i;:::-;15107:74;;15190:93;15279:3;15190:93;:::i;:::-;15308:2;15303:3;15299:12;15292:19;;15097:220;;;:::o;15323:366::-;;15486:67;15550:2;15545:3;15486:67;:::i;:::-;15479:74;;15562:93;15651:3;15562:93;:::i;:::-;15680:2;15675:3;15671:12;15664:19;;15469:220;;;:::o;15695:366::-;;15858:67;15922:2;15917:3;15858:67;:::i;:::-;15851:74;;15934:93;16023:3;15934:93;:::i;:::-;16052:2;16047:3;16043:12;16036:19;;15841:220;;;:::o;16067:366::-;;16230:67;16294:2;16289:3;16230:67;:::i;:::-;16223:74;;16306:93;16395:3;16306:93;:::i;:::-;16424:2;16419:3;16415:12;16408:19;;16213:220;;;:::o;16439:366::-;;16602:67;16666:2;16661:3;16602:67;:::i;:::-;16595:74;;16678:93;16767:3;16678:93;:::i;:::-;16796:2;16791:3;16787:12;16780:19;;16585:220;;;:::o;16811:366::-;;16974:67;17038:2;17033:3;16974:67;:::i;:::-;16967:74;;17050:93;17139:3;17050:93;:::i;:::-;17168:2;17163:3;17159:12;17152:19;;16957:220;;;:::o;17183:366::-;;17346:67;17410:2;17405:3;17346:67;:::i;:::-;17339:74;;17422:93;17511:3;17422:93;:::i;:::-;17540:2;17535:3;17531:12;17524:19;;17329:220;;;:::o;17555:366::-;;17718:67;17782:2;17777:3;17718:67;:::i;:::-;17711:74;;17794:93;17883:3;17794:93;:::i;:::-;17912:2;17907:3;17903:12;17896:19;;17701:220;;;:::o;17927:366::-;;18090:67;18154:2;18149:3;18090:67;:::i;:::-;18083:74;;18166:93;18255:3;18166:93;:::i;:::-;18284:2;18279:3;18275:12;18268:19;;18073:220;;;:::o;18299:118::-;18386:24;18404:5;18386:24;:::i;:::-;18381:3;18374:37;18364:53;;:::o;18423:435::-;;18625:95;18716:3;18707:6;18625:95;:::i;:::-;18618:102;;18737:95;18828:3;18819:6;18737:95;:::i;:::-;18730:102;;18849:3;18842:10;;18607:251;;;;;:::o;18864:222::-;;18995:2;18984:9;18980:18;18972:26;;19008:71;19076:1;19065:9;19061:17;19052:6;19008:71;:::i;:::-;18962:124;;;;:::o;19092:640::-;;19325:3;19314:9;19310:19;19302:27;;19339:71;19407:1;19396:9;19392:17;19383:6;19339:71;:::i;:::-;19420:72;19488:2;19477:9;19473:18;19464:6;19420:72;:::i;:::-;19502;19570:2;19559:9;19555:18;19546:6;19502:72;:::i;:::-;19621:9;19615:4;19611:20;19606:2;19595:9;19591:18;19584:48;19649:76;19720:4;19711:6;19649:76;:::i;:::-;19641:84;;19292:440;;;;;;;:::o;19738:210::-;;19863:2;19852:9;19848:18;19840:26;;19876:65;19938:1;19927:9;19923:17;19914:6;19876:65;:::i;:::-;19830:118;;;;:::o;19954:313::-;;20105:2;20094:9;20090:18;20082:26;;20154:9;20148:4;20144:20;20140:1;20129:9;20125:17;20118:47;20182:78;20255:4;20246:6;20182:78;:::i;:::-;20174:86;;20072:195;;;;:::o;20273:419::-;;20477:2;20466:9;20462:18;20454:26;;20526:9;20520:4;20516:20;20512:1;20501:9;20497:17;20490:47;20554:131;20680:4;20554:131;:::i;:::-;20546:139;;20444:248;;;:::o;20698:419::-;;20902:2;20891:9;20887:18;20879:26;;20951:9;20945:4;20941:20;20937:1;20926:9;20922:17;20915:47;20979:131;21105:4;20979:131;:::i;:::-;20971:139;;20869:248;;;:::o;21123:419::-;;21327:2;21316:9;21312:18;21304:26;;21376:9;21370:4;21366:20;21362:1;21351:9;21347:17;21340:47;21404:131;21530:4;21404:131;:::i;:::-;21396:139;;21294:248;;;:::o;21548:419::-;;21752:2;21741:9;21737:18;21729:26;;21801:9;21795:4;21791:20;21787:1;21776:9;21772:17;21765:47;21829:131;21955:4;21829:131;:::i;:::-;21821:139;;21719:248;;;:::o;21973:419::-;;22177:2;22166:9;22162:18;22154:26;;22226:9;22220:4;22216:20;22212:1;22201:9;22197:17;22190:47;22254:131;22380:4;22254:131;:::i;:::-;22246:139;;22144:248;;;:::o;22398:419::-;;22602:2;22591:9;22587:18;22579:26;;22651:9;22645:4;22641:20;22637:1;22626:9;22622:17;22615:47;22679:131;22805:4;22679:131;:::i;:::-;22671:139;;22569:248;;;:::o;22823:419::-;;23027:2;23016:9;23012:18;23004:26;;23076:9;23070:4;23066:20;23062:1;23051:9;23047:17;23040:47;23104:131;23230:4;23104:131;:::i;:::-;23096:139;;22994:248;;;:::o;23248:419::-;;23452:2;23441:9;23437:18;23429:26;;23501:9;23495:4;23491:20;23487:1;23476:9;23472:17;23465:47;23529:131;23655:4;23529:131;:::i;:::-;23521:139;;23419:248;;;:::o;23673:419::-;;23877:2;23866:9;23862:18;23854:26;;23926:9;23920:4;23916:20;23912:1;23901:9;23897:17;23890:47;23954:131;24080:4;23954:131;:::i;:::-;23946:139;;23844:248;;;:::o;24098:419::-;;24302:2;24291:9;24287:18;24279:26;;24351:9;24345:4;24341:20;24337:1;24326:9;24322:17;24315:47;24379:131;24505:4;24379:131;:::i;:::-;24371:139;;24269:248;;;:::o;24523:419::-;;24727:2;24716:9;24712:18;24704:26;;24776:9;24770:4;24766:20;24762:1;24751:9;24747:17;24740:47;24804:131;24930:4;24804:131;:::i;:::-;24796:139;;24694:248;;;:::o;24948:419::-;;25152:2;25141:9;25137:18;25129:26;;25201:9;25195:4;25191:20;25187:1;25176:9;25172:17;25165:47;25229:131;25355:4;25229:131;:::i;:::-;25221:139;;25119:248;;;:::o;25373:419::-;;25577:2;25566:9;25562:18;25554:26;;25626:9;25620:4;25616:20;25612:1;25601:9;25597:17;25590:47;25654:131;25780:4;25654:131;:::i;:::-;25646:139;;25544:248;;;:::o;25798:419::-;;26002:2;25991:9;25987:18;25979:26;;26051:9;26045:4;26041:20;26037:1;26026:9;26022:17;26015:47;26079:131;26205:4;26079:131;:::i;:::-;26071:139;;25969:248;;;:::o;26223:419::-;;26427:2;26416:9;26412:18;26404:26;;26476:9;26470:4;26466:20;26462:1;26451:9;26447:17;26440:47;26504:131;26630:4;26504:131;:::i;:::-;26496:139;;26394:248;;;:::o;26648:419::-;;26852:2;26841:9;26837:18;26829:26;;26901:9;26895:4;26891:20;26887:1;26876:9;26872:17;26865:47;26929:131;27055:4;26929:131;:::i;:::-;26921:139;;26819:248;;;:::o;27073:419::-;;27277:2;27266:9;27262:18;27254:26;;27326:9;27320:4;27316:20;27312:1;27301:9;27297:17;27290:47;27354:131;27480:4;27354:131;:::i;:::-;27346:139;;27244:248;;;:::o;27498:419::-;;27702:2;27691:9;27687:18;27679:26;;27751:9;27745:4;27741:20;27737:1;27726:9;27722:17;27715:47;27779:131;27905:4;27779:131;:::i;:::-;27771:139;;27669:248;;;:::o;27923:419::-;;28127:2;28116:9;28112:18;28104:26;;28176:9;28170:4;28166:20;28162:1;28151:9;28147:17;28140:47;28204:131;28330:4;28204:131;:::i;:::-;28196:139;;28094:248;;;:::o;28348:419::-;;28552:2;28541:9;28537:18;28529:26;;28601:9;28595:4;28591:20;28587:1;28576:9;28572:17;28565:47;28629:131;28755:4;28629:131;:::i;:::-;28621:139;;28519:248;;;:::o;28773:419::-;;28977:2;28966:9;28962:18;28954:26;;29026:9;29020:4;29016:20;29012:1;29001:9;28997:17;28990:47;29054:131;29180:4;29054:131;:::i;:::-;29046:139;;28944:248;;;:::o;29198:419::-;;29402:2;29391:9;29387:18;29379:26;;29451:9;29445:4;29441:20;29437:1;29426:9;29422:17;29415:47;29479:131;29605:4;29479:131;:::i;:::-;29471:139;;29369:248;;;:::o;29623:419::-;;29827:2;29816:9;29812:18;29804:26;;29876:9;29870:4;29866:20;29862:1;29851:9;29847:17;29840:47;29904:131;30030:4;29904:131;:::i;:::-;29896:139;;29794:248;;;:::o;30048:419::-;;30252:2;30241:9;30237:18;30229:26;;30301:9;30295:4;30291:20;30287:1;30276:9;30272:17;30265:47;30329:131;30455:4;30329:131;:::i;:::-;30321:139;;30219:248;;;:::o;30473:419::-;;30677:2;30666:9;30662:18;30654:26;;30726:9;30720:4;30716:20;30712:1;30701:9;30697:17;30690:47;30754:131;30880:4;30754:131;:::i;:::-;30746:139;;30644:248;;;:::o;30898:419::-;;31102:2;31091:9;31087:18;31079:26;;31151:9;31145:4;31141:20;31137:1;31126:9;31122:17;31115:47;31179:131;31305:4;31179:131;:::i;:::-;31171:139;;31069:248;;;:::o;31323:419::-;;31527:2;31516:9;31512:18;31504:26;;31576:9;31570:4;31566:20;31562:1;31551:9;31547:17;31540:47;31604:131;31730:4;31604:131;:::i;:::-;31596:139;;31494:248;;;:::o;31748:419::-;;31952:2;31941:9;31937:18;31929:26;;32001:9;31995:4;31991:20;31987:1;31976:9;31972:17;31965:47;32029:131;32155:4;32029:131;:::i;:::-;32021:139;;31919:248;;;:::o;32173:222::-;;32304:2;32293:9;32289:18;32281:26;;32317:71;32385:1;32374:9;32370:17;32361:6;32317:71;:::i;:::-;32271:124;;;;:::o;32401:129::-;;32462:20;;:::i;:::-;32452:30;;32491:33;32519:4;32511:6;32491:33;:::i;:::-;32442:88;;;:::o;32536:75::-;;32602:2;32596:9;32586:19;;32576:35;:::o;32617:307::-;;32768:18;32760:6;32757:30;32754:2;;;32790:18;;:::i;:::-;32754:2;32828:29;32850:6;32828:29;:::i;:::-;32820:37;;32912:4;32906;32902:15;32894:23;;32683:241;;;:::o;32930:308::-;;33082:18;33074:6;33071:30;33068:2;;;33104:18;;:::i;:::-;33068:2;33142:29;33164:6;33142:29;:::i;:::-;33134:37;;33226:4;33220;33216:15;33208:23;;32997:241;;;:::o;33244:98::-;;33329:5;33323:12;33313:22;;33302:40;;;:::o;33348:99::-;;33434:5;33428:12;33418:22;;33407:40;;;:::o;33453:168::-;;33570:6;33565:3;33558:19;33610:4;33605:3;33601:14;33586:29;;33548:73;;;;:::o;33627:169::-;;33745:6;33740:3;33733:19;33785:4;33780:3;33776:14;33761:29;;33723:73;;;;:::o;33802:148::-;;33941:3;33926:18;;33916:34;;;;:::o;33956:305::-;;34015:20;34033:1;34015:20;:::i;:::-;34010:25;;34049:20;34067:1;34049:20;:::i;:::-;34044:25;;34203:1;34135:66;34131:74;34128:1;34125:81;34122:2;;;34209:18;;:::i;:::-;34122:2;34253:1;34250;34246:9;34239:16;;34000:261;;;;:::o;34267:185::-;;34324:20;34342:1;34324:20;:::i;:::-;34319:25;;34358:20;34376:1;34358:20;:::i;:::-;34353:25;;34397:1;34387:2;;34402:18;;:::i;:::-;34387:2;34444:1;34441;34437:9;34432:14;;34309:143;;;;:::o;34458:191::-;;34518:20;34536:1;34518:20;:::i;:::-;34513:25;;34552:20;34570:1;34552:20;:::i;:::-;34547:25;;34591:1;34588;34585:8;34582:2;;;34596:18;;:::i;:::-;34582:2;34641:1;34638;34634:9;34626:17;;34503:146;;;;:::o;34655:96::-;;34721:24;34739:5;34721:24;:::i;:::-;34710:35;;34700:51;;;:::o;34757:90::-;;34834:5;34827:13;34820:21;34809:32;;34799:48;;;:::o;34853:149::-;;34929:66;34922:5;34918:78;34907:89;;34897:105;;;:::o;35008:126::-;;35085:42;35078:5;35074:54;35063:65;;35053:81;;;:::o;35140:77::-;;35206:5;35195:16;;35185:32;;;:::o;35223:154::-;35307:6;35302:3;35297;35284:30;35369:1;35360:6;35355:3;35351:16;35344:27;35274:103;;;:::o;35383:307::-;35451:1;35461:113;35475:6;35472:1;35469:13;35461:113;;;35560:1;35555:3;35551:11;35545:18;35541:1;35536:3;35532:11;35525:39;35497:2;35494:1;35490:10;35485:15;;35461:113;;;35592:6;35589:1;35586:13;35583:2;;;35672:1;35663:6;35658:3;35654:16;35647:27;35583:2;35432:258;;;;:::o;35696:320::-;;35777:1;35771:4;35767:12;35757:22;;35824:1;35818:4;35814:12;35845:18;35835:2;;35901:4;35893:6;35889:17;35879:27;;35835:2;35963;35955:6;35952:14;35932:18;35929:38;35926:2;;;35982:18;;:::i;:::-;35926:2;35747:269;;;;:::o;36022:281::-;36105:27;36127:4;36105:27;:::i;:::-;36097:6;36093:40;36235:6;36223:10;36220:22;36199:18;36187:10;36184:34;36181:62;36178:2;;;36246:18;;:::i;:::-;36178:2;36286:10;36282:2;36275:22;36065:238;;;:::o;36309:233::-;;36371:24;36389:5;36371:24;:::i;:::-;36362:33;;36417:66;36410:5;36407:77;36404:2;;;36487:18;;:::i;:::-;36404:2;36534:1;36527:5;36523:13;36516:20;;36352:190;;;:::o;36548:176::-;;36597:20;36615:1;36597:20;:::i;:::-;36592:25;;36631:20;36649:1;36631:20;:::i;:::-;36626:25;;36670:1;36660:2;;36675:18;;:::i;:::-;36660:2;36716:1;36713;36709:9;36704:14;;36582:142;;;;:::o;36730:180::-;36778:77;36775:1;36768:88;36875:4;36872:1;36865:15;36899:4;36896:1;36889:15;36916:180;36964:77;36961:1;36954:88;37061:4;37058:1;37051:15;37085:4;37082:1;37075:15;37102:180;37150:77;37147:1;37140:88;37247:4;37244:1;37237:15;37271:4;37268:1;37261:15;37288:180;37336:77;37333:1;37326:88;37433:4;37430:1;37423:15;37457:4;37454:1;37447:15;37474:102;;37566:2;37562:7;37557:2;37550:5;37546:14;37542:28;37532:38;;37522:54;;;:::o;37582:230::-;37722:34;37718:1;37710:6;37706:14;37699:58;37791:13;37786:2;37778:6;37774:15;37767:38;37688:124;:::o;37818:237::-;37958:34;37954:1;37946:6;37942:14;37935:58;38027:20;38022:2;38014:6;38010:15;38003:45;37924:131;:::o;38061:225::-;38201:34;38197:1;38189:6;38185:14;38178:58;38270:8;38265:2;38257:6;38253:15;38246:33;38167:119;:::o;38292:178::-;38432:30;38428:1;38420:6;38416:14;38409:54;38398:72;:::o;38476:223::-;38616:34;38612:1;38604:6;38600:14;38593:58;38685:6;38680:2;38672:6;38668:15;38661:31;38582:117;:::o;38705:175::-;38845:27;38841:1;38833:6;38829:14;38822:51;38811:69;:::o;38886:244::-;39026:34;39022:1;39014:6;39010:14;39003:58;39095:27;39090:2;39082:6;39078:15;39071:52;38992:138;:::o;39136:231::-;39276:34;39272:1;39264:6;39260:14;39253:58;39345:14;39340:2;39332:6;39328:15;39321:39;39242:125;:::o;39373:179::-;39513:31;39509:1;39501:6;39497:14;39490:55;39479:73;:::o;39558:224::-;39698:34;39694:1;39686:6;39682:14;39675:58;39767:7;39762:2;39754:6;39750:15;39743:32;39664:118;:::o;39788:243::-;39928:34;39924:1;39916:6;39912:14;39905:58;39997:26;39992:2;39984:6;39980:15;39973:51;39894:137;:::o;40037:222::-;40177:34;40173:1;40165:6;40161:14;40154:58;40246:5;40241:2;40233:6;40229:15;40222:30;40143:116;:::o;40265:229::-;40405:34;40401:1;40393:6;40389:14;40382:58;40474:12;40469:2;40461:6;40457:15;40450:37;40371:123;:::o;40500:228::-;40640:34;40636:1;40628:6;40624:14;40617:58;40709:11;40704:2;40696:6;40692:15;40685:36;40606:122;:::o;40734:182::-;40874:34;40870:1;40862:6;40858:14;40851:58;40840:76;:::o;40922:229::-;41062:34;41058:1;41050:6;41046:14;41039:58;41131:12;41126:2;41118:6;41114:15;41107:37;41028:123;:::o;41157:231::-;41297:34;41293:1;41285:6;41281:14;41274:58;41366:14;41361:2;41353:6;41349:15;41342:39;41263:125;:::o;41394:182::-;41534:34;41530:1;41522:6;41518:14;41511:58;41500:76;:::o;41582:222::-;41722:34;41718:1;41710:6;41706:14;41699:58;41791:5;41786:2;41778:6;41774:15;41767:30;41688:116;:::o;41810:228::-;41950:34;41946:1;41938:6;41934:14;41927:58;42019:11;42014:2;42006:6;42002:15;41995:36;41916:122;:::o;42044:234::-;42184:34;42180:1;42172:6;42168:14;42161:58;42253:17;42248:2;42240:6;42236:15;42229:42;42150:128;:::o;42284:220::-;42424:34;42420:1;42412:6;42408:14;42401:58;42493:3;42488:2;42480:6;42476:15;42469:28;42390:114;:::o;42510:220::-;42650:34;42646:1;42638:6;42634:14;42627:58;42719:3;42714:2;42706:6;42702:15;42695:28;42616:114;:::o;42736:182::-;42876:34;42872:1;42864:6;42860:14;42853:58;42842:76;:::o;42924:236::-;43064:34;43060:1;43052:6;43048:14;43041:58;43133:19;43128:2;43120:6;43116:15;43109:44;43030:130;:::o;43166:231::-;43306:34;43302:1;43294:6;43290:14;43283:58;43375:14;43370:2;43362:6;43358:15;43351:39;43272:125;:::o;43403:245::-;43543:34;43539:1;43531:6;43527:14;43520:58;43612:28;43607:2;43599:6;43595:15;43588:53;43509:139;:::o;43654:241::-;43794:34;43790:1;43782:6;43778:14;43771:58;43863:24;43858:2;43850:6;43846:15;43839:49;43760:135;:::o;43901:122::-;43974:24;43992:5;43974:24;:::i;:::-;43967:5;43964:35;43954:2;;44013:1;44010;44003:12;43954:2;43944:79;:::o;44029:116::-;44099:21;44114:5;44099:21;:::i;:::-;44092:5;44089:32;44079:2;;44135:1;44132;44125:12;44079:2;44069:76;:::o;44151:120::-;44223:23;44240:5;44223:23;:::i;:::-;44216:5;44213:34;44203:2;;44261:1;44258;44251:12;44203:2;44193:78;:::o;44277:122::-;44350:24;44368:5;44350:24;:::i;:::-;44343:5;44340:35;44330:2;;44389:1;44386;44379:12;44330:2;44320:79;:::o

Swarm Source

ipfs://1ef9a43401dad61d03001a370b57537146f893f17cc8df4370d18581dee2e0aa
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.