ETH Price: $2,560.82 (+6.53%)
 

Overview

Max Total Supply

9,900 Elder Torch

Holders

398

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 Elder Torch
0x54dd60a79bdb243c5446cef430e7149487b8339f
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:
ElderTorch

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-05
*/

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

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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


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

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

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

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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


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

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


abstract contract Ownable is Context {
    address private _owner;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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

        return account.code.length > 0;
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

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

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

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

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

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

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

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

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


interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}

contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

        _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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

interface IProof {
    function verification(address _address,string memory signedMessage) external view returns (bool);
}

contract ElderTorch is ERC721A, Ownable {
    using Strings for uint256;
    
    IProof private Proof;

    bool public revealed = false;
    uint256 public SaleTime = 1657065600;
    uint256 public PublicSaleTime = 1657076400;
    
    address constant receiver = 0xD146e86E62DdDc70B9d02cfb00434400cF58c0BF;
    
    // Constants
    uint256 public constant MAX_TOTALSUPPLY = 10000; 
    uint256 public constant MAX_SUPPLY = 9900; 
    uint256 public constant MAX_FREESUPPLY = 8000; 
    
    
    uint256 public constant maxBalance = 5 ; 
    uint256 public constant maxFreeMint = 2 ; 

    uint256 public mintPrice = 0.016 ether; 

    string baseURI; 
    string public notRevealedUri;
    string public baseExtension = ".json"; 

    mapping(uint256 => string) private _tokenURIs;
    mapping(address => uint256) private mintQuantity;

    uint256 public freeAmount; 
    uint256 public paymentAmount; 

    event mintPayable(address from, address to,uint256 amount, uint256 tokenQuantity);

    constructor(string memory initBaseURI, string memory initNotRevealedUri)
        ERC721A("Elder Torch", "")
    {
        setBaseURI(initBaseURI);
        setNotRevealedURI(initNotRevealedUri);
    }

    function mintElderTorch(uint256 tokenQuantity,string memory signedMessage) public payable {
       
        require(
            totalSupply() + tokenQuantity <= MAX_SUPPLY,
            "Sale would exceed max supply"
        );
        
      
        require((Proof.verification(msg.sender,signedMessage) == true && block.timestamp >= SaleTime )|| block.timestamp >= PublicSaleTime, "Sale must be active to mint Elder Torch");
        
        
        require(
            mintQuantity[msg.sender] + tokenQuantity <= maxBalance,
            "Sale would exceed max balance"
        );
        

        mintQuantity[msg.sender] += tokenQuantity;

        if(mintQuantity[msg.sender] > maxFreeMint || (freeAmount + tokenQuantity) > MAX_FREESUPPLY){
           
            require(tokenQuantity <= maxBalance - maxFreeMint, "Sale would exceed max times");
           
            require((paymentAmount + tokenQuantity) <= (MAX_SUPPLY - MAX_FREESUPPLY) ,"Not enough times");

            if((freeAmount + tokenQuantity) > MAX_FREESUPPLY && freeAmount < MAX_FREESUPPLY){

                uint256 quantity =  tokenQuantity - (MAX_FREESUPPLY - freeAmount);   
                require(
                   quantity * mintPrice <= msg.value,
                    "Not enough ether sent"
                );
                emit mintPayable(msg.sender, address(this), quantity * mintPrice, quantity);
                paymentAmount += quantity;

            }else{

                require(
                    tokenQuantity * mintPrice <= msg.value,
                    "Not enough ether sent"
                );
                emit mintPayable(msg.sender, address(this), tokenQuantity * mintPrice, tokenQuantity );
                paymentAmount += tokenQuantity;
            }
            

        }else{
            
            require(tokenQuantity <= maxFreeMint, "Sale would exceed max times");
  
            require((freeAmount + tokenQuantity) <= MAX_FREESUPPLY ,"Not enough free times");
            
            freeAmount += tokenQuantity;
        }
        
       
        _safeMint(msg.sender, tokenQuantity);        
    }


    function safeMint(address to, uint256 tokenQuantity) public onlyOwner {
        _safeMint(to, tokenQuantity);
    }


    function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        if (revealed == false) {
            return notRevealedUri;
        }

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.
        return
            string(abi.encodePacked(base, tokenId.toString(), baseExtension));
    }

    function setProofContract(address _address) external onlyOwner {
        Proof = IProof(_address);
    }
   
    function flipReveal() public onlyOwner {
        revealed = !revealed;
    }

     // internal
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
    
    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

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

    function setSaleTime(uint256 _timestamp) public onlyOwner {
        SaleTime = _timestamp;
        PublicSaleTime = _timestamp + 3 * 3600;
    }

    function setPublicSaleTime(uint256 _timestamp) public onlyOwner {
        PublicSaleTime = _timestamp;
    }
    
    function setMintPrice(uint256 _mintPrice) public onlyOwner {
        mintPrice = _mintPrice;
    }
    
    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(receiver).transfer(balance);
    }

    
    function getBalance() public view returns(uint256) {
        return address(this).balance;
    }
    
    function getMintQuantity() public view returns(uint256){
        return mintQuantity[msg.sender];
    }

    
    function getFreeQuantity() public view returns(uint256){
        return MAX_FREESUPPLY - freeAmount;
    }

    function getPaymentQuantity() public view returns(uint256){
        return MAX_SUPPLY - MAX_FREESUPPLY - paymentAmount;
    }

    
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"initBaseURI","type":"string"},{"internalType":"string","name":"initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mintPayable","type":"event"},{"inputs":[],"name":"MAX_FREESUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PublicSaleTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SaleTime","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaymentQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"},{"internalType":"string","name":"signedMessage","type":"string"}],"name":"mintElderTorch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"paymentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setProofContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPublicSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600960146101000a81548160ff0219169083151502179055506362c4d080600a556362c4fab0600b556638d7ea4c680000600c556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600f908051906020019062000087929190620003e8565b503480156200009557600080fd5b5060405162004da838038062004da88339818101604052810190620000bb919062000516565b6040518060400160405280600b81526020017f456c64657220546f72636800000000000000000000000000000000000000000081525060405180602001604052806000815250816002908051906020019062000119929190620003e8565b50806003908051906020019062000132929190620003e8565b50620001436200019560201b60201c565b60008190555050506200016b6200015f6200019a60201b60201c565b620001a260201b60201c565b6200017c826200026860201b60201c565b6200018d816200031360201b60201c565b5050620007a2565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002786200019a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029e620003be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ee90620005c2565b60405180910390fd5b80600d90805190602001906200030f929190620003e8565b5050565b620003236200019a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000349620003be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039990620005c2565b60405180910390fd5b80600e9080519060200190620003ba929190620003e8565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003f6906200068a565b90600052602060002090601f0160209004810192826200041a576000855562000466565b82601f106200043557805160ff191683800117855562000466565b8280016001018555821562000466579182015b828111156200046557825182559160200191906001019062000448565b5b50905062000475919062000479565b5090565b5b80821115620004945760008160009055506001016200047a565b5090565b6000620004af620004a9846200060d565b620005e4565b905082815260208101848484011115620004ce57620004cd62000759565b5b620004db84828562000654565b509392505050565b600082601f830112620004fb57620004fa62000754565b5b81516200050d84826020860162000498565b91505092915050565b6000806040838503121562000530576200052f62000763565b5b600083015167ffffffffffffffff8111156200055157620005506200075e565b5b6200055f85828601620004e3565b925050602083015167ffffffffffffffff8111156200058357620005826200075e565b5b6200059185828601620004e3565b9150509250929050565b6000620005aa60208362000643565b9150620005b78262000779565b602082019050919050565b60006020820190508181036000830152620005dd816200059b565b9050919050565b6000620005f062000603565b9050620005fe8282620006c0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200062b576200062a62000725565b5b620006368262000768565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200067457808201518184015260208101905062000657565b8381111562000684576000848401525b50505050565b60006002820490506001821680620006a357607f821691505b60208210811415620006ba57620006b9620006f6565b5b50919050565b620006cb8262000768565b810181811067ffffffffffffffff82111715620006ed57620006ec62000725565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6145f680620007b26000396000f3fe6080604052600436106102725760003560e01c806370a082311161014f578063b88d4fde116100c1578063da3ef23f1161007a578063da3ef23f1461090e578063e985e9c514610937578063f2c4ce1e14610974578063f2fde38b1461099d578063f4a0a528146109c6578063f4e33848146109ef57610272565b8063b88d4fde146107fe578063bd5e9e8114610827578063c2b9f99314610850578063c35905c61461087b578063c6682862146108a6578063c87b56dd146108d157610272565b80638da5cb5b116101135780638da5cb5b1461070057806395d89b411461072b578063a144819414610756578063a22cb4651461077f578063a591252d146107a8578063afed23d4146107d357610272565b806370a082311461062b578063715018a61461066857806373ad468a1461067f5780637671a9c5146106aa5780638247ebbc146106d557610272565b806332cb6b0c116101e85780634ccbfd5a116101ac5780634ccbfd5a146105195780634d842d5414610544578063518302271461056f57806355f804b31461059a5780636352211e146105c35780636817c76c1461060057610272565b806332cb6b0c1461046e5780633b84d9c6146104995780633bd2b67d146104b05780633ccfd60b146104d957806342842e0e146104f057610272565b8063095ea7b31161023a578063095ea7b31461037257806311b7e5e71461039b57806312065fe0146103c457806318160ddd146103ef5780631e88a9771461041a57806323b872dd1461044557610272565b806301ffc9a7146102775780630451a9f1146102b457806306fdde03146102df578063081812fc1461030a578063081c8c4414610347575b600080fd5b34801561028357600080fd5b5061029e6004803603810190610299919061381f565b610a0b565b6040516102ab9190613d29565b60405180910390f35b3480156102c057600080fd5b506102c9610aed565b6040516102d69190613ea6565b60405180910390f35b3480156102eb57600080fd5b506102f4610af3565b6040516103019190613d44565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c91906138c2565b610b85565b60405161033e9190613c4d565b60405180910390f35b34801561035357600080fd5b5061035c610c01565b6040516103699190613d44565b60405180910390f35b34801561037e57600080fd5b50610399600480360381019061039491906137b2565b610c8f565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906138c2565b610d94565b005b3480156103d057600080fd5b506103d9610e1a565b6040516103e69190613ea6565b60405180910390f35b3480156103fb57600080fd5b50610404610e22565b6040516104119190613ea6565b60405180910390f35b34801561042657600080fd5b5061042f610e39565b60405161043c9190613ea6565b60405180910390f35b34801561045157600080fd5b5061046c6004803603810190610467919061369c565b610e5d565b005b34801561047a57600080fd5b50610483610e6d565b6040516104909190613ea6565b60405180910390f35b3480156104a557600080fd5b506104ae610e73565b005b3480156104bc57600080fd5b506104d760048036038101906104d291906138c2565b610f1b565b005b3480156104e557600080fd5b506104ee610fb5565b005b3480156104fc57600080fd5b506105176004803603810190610512919061369c565b611094565b005b34801561052557600080fd5b5061052e6110b4565b60405161053b9190613ea6565b60405180910390f35b34801561055057600080fd5b506105596110fb565b6040516105669190613ea6565b60405180910390f35b34801561057b57600080fd5b50610584611101565b6040516105919190613d29565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613879565b611114565b005b3480156105cf57600080fd5b506105ea60048036038101906105e591906138c2565b6111aa565b6040516105f79190613c4d565b60405180910390f35b34801561060c57600080fd5b506106156111c0565b6040516106229190613ea6565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d919061362f565b6111c6565b60405161065f9190613ea6565b60405180910390f35b34801561067457600080fd5b5061067d611296565b005b34801561068b57600080fd5b5061069461131e565b6040516106a19190613ea6565b60405180910390f35b3480156106b657600080fd5b506106bf611323565b6040516106cc9190613ea6565b60405180910390f35b3480156106e157600080fd5b506106ea611329565b6040516106f79190613ea6565b60405180910390f35b34801561070c57600080fd5b5061071561132f565b6040516107229190613c4d565b60405180910390f35b34801561073757600080fd5b50610740611359565b60405161074d9190613d44565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906137b2565b6113eb565b005b34801561078b57600080fd5b506107a660048036038101906107a19190613772565b611475565b005b3480156107b457600080fd5b506107bd6115ed565b6040516107ca9190613ea6565b60405180910390f35b3480156107df57600080fd5b506107e86115f2565b6040516107f59190613ea6565b60405180910390f35b34801561080a57600080fd5b50610825600480360381019061082091906136ef565b6115f8565b005b34801561083357600080fd5b5061084e6004803603810190610849919061362f565b611670565b005b34801561085c57600080fd5b50610865611730565b6040516108729190613ea6565b60405180910390f35b34801561088757600080fd5b50610890611747565b60405161089d9190613ea6565b60405180910390f35b3480156108b257600080fd5b506108bb61174d565b6040516108c89190613d44565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f391906138c2565b6117db565b6040516109059190613d44565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190613879565b6119ff565b005b34801561094357600080fd5b5061095e6004803603810190610959919061365c565b611a95565b60405161096b9190613d29565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613879565b611b29565b005b3480156109a957600080fd5b506109c460048036038101906109bf919061362f565b611bbf565b005b3480156109d257600080fd5b506109ed60048036038101906109e891906138c2565b611cb7565b005b610a096004803603810190610a0491906138ef565b611d3d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae65750610ae58261230b565b5b9050919050565b60125481565b606060028054610b029061416b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e9061416b565b8015610b7b5780601f10610b5057610100808354040283529160200191610b7b565b820191906000526020600020905b815481529060010190602001808311610b5e57829003601f168201915b5050505050905090565b6000610b9082612375565b610bc6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e8054610c0e9061416b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a9061416b565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b505050505081565b6000610c9a826111aa565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d02576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d216123c3565b73ffffffffffffffffffffffffffffffffffffffff1614610d8457610d4d81610d486123c3565b611a95565b610d83576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610d8f8383836123cb565b505050565b610d9c6123c3565b73ffffffffffffffffffffffffffffffffffffffff16610dba61132f565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613e26565b60405180910390fd5b80600b8190555050565b600047905090565b6000610e2c61247d565b6001546000540303905090565b6000601354611f406126ac610e4e9190614081565b610e589190614081565b905090565b610e68838383612482565b505050565b6126ac81565b610e7b6123c3565b73ffffffffffffffffffffffffffffffffffffffff16610e9961132f565b73ffffffffffffffffffffffffffffffffffffffff1614610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee690613e26565b60405180910390fd5b600960149054906101000a900460ff1615600960146101000a81548160ff021916908315150217905550565b610f236123c3565b73ffffffffffffffffffffffffffffffffffffffff16610f4161132f565b73ffffffffffffffffffffffffffffffffffffffff1614610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e90613e26565b60405180910390fd5b80600a81905550612a3081610fac9190613fa0565b600b8190555050565b610fbd6123c3565b73ffffffffffffffffffffffffffffffffffffffff16610fdb61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890613e26565b60405180910390fd5b600047905073d146e86e62dddc70b9d02cfb00434400cf58c0bf73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611090573d6000803e3d6000fd5b5050565b6110af838383604051806020016040528060008152506115f8565b505050565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600b5481565b600960149054906101000a900460ff1681565b61111c6123c3565b73ffffffffffffffffffffffffffffffffffffffff1661113a61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613e26565b60405180910390fd5b80600d90805190602001906111a69291906133eb565b5050565b60006111b582612938565b600001519050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561122e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61129e6123c3565b73ffffffffffffffffffffffffffffffffffffffff166112bc61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990613e26565b60405180910390fd5b61131c6000612bc3565b565b600581565b61271081565b611f4081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546113689061416b565b80601f01602080910402602001604051908101604052809291908181526020018280546113949061416b565b80156113e15780601f106113b6576101008083540402835291602001916113e1565b820191906000526020600020905b8154815290600101906020018083116113c457829003601f168201915b5050505050905090565b6113f36123c3565b73ffffffffffffffffffffffffffffffffffffffff1661141161132f565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90613e26565b60405180910390fd5b6114718282612c89565b5050565b61147d6123c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114ef6123c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159c6123c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e19190613d29565b60405180910390a35050565b600281565b600a5481565b611603848484612482565b6116228373ffffffffffffffffffffffffffffffffffffffff16612ca7565b1561166a5761163384848484612cca565b611669576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6116786123c3565b73ffffffffffffffffffffffffffffffffffffffff1661169661132f565b73ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613e26565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601254611f406117429190614081565b905090565b60135481565b600f805461175a9061416b565b80601f01602080910402602001604051908101604052809291908181526020018280546117869061416b565b80156117d35780601f106117a8576101008083540402835291602001916117d3565b820191906000526020600020905b8154815290600101906020018083116117b657829003601f168201915b505050505081565b60606117e682612375565b611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90613e46565b60405180910390fd5b60001515600960149054906101000a900460ff16151514156118d357600e805461184e9061416b565b80601f016020809104026020016040519081016040528092919081815260200182805461187a9061416b565b80156118c75780601f1061189c576101008083540402835291602001916118c7565b820191906000526020600020905b8154815290600101906020018083116118aa57829003601f168201915b505050505090506119fa565b60006010600084815260200190815260200160002080546118f39061416b565b80601f016020809104026020016040519081016040528092919081815260200182805461191f9061416b565b801561196c5780601f106119415761010080835404028352916020019161196c565b820191906000526020600020905b81548152906001019060200180831161194f57829003601f168201915b50505050509050600061197d612e2a565b90506000815114156119935781925050506119fa565b6000825111156119c85780826040516020016119b0929190613bf8565b604051602081830303815290604052925050506119fa565b806119d285612ebc565b600f6040516020016119e693929190613c1c565b604051602081830303815290604052925050505b919050565b611a076123c3565b73ffffffffffffffffffffffffffffffffffffffff16611a2561132f565b73ffffffffffffffffffffffffffffffffffffffff1614611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613e26565b60405180910390fd5b80600f9080519060200190611a919291906133eb565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b316123c3565b73ffffffffffffffffffffffffffffffffffffffff16611b4f61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613e26565b60405180910390fd5b80600e9080519060200190611bbb9291906133eb565b5050565b611bc76123c3565b73ffffffffffffffffffffffffffffffffffffffff16611be561132f565b73ffffffffffffffffffffffffffffffffffffffff1614611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613e26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290613d86565b60405180910390fd5b611cb481612bc3565b50565b611cbf6123c3565b73ffffffffffffffffffffffffffffffffffffffff16611cdd61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e26565b60405180910390fd5b80600c8190555050565b6126ac82611d49610e22565b611d539190613fa0565b1115611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b90613da6565b60405180910390fd5b60011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406946a733846040518363ffffffff1660e01b8152600401611df5929190613cf9565b60206040518083038186803b158015611e0d57600080fd5b505afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4591906137f2565b1515148015611e565750600a544210155b80611e635750600b544210155b611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990613e86565b60405180910390fd5b600582601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eef9190613fa0565b1115611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790613e06565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f7f9190613fa0565b925050819055506002601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611fe25750611f4082601254611fe09190613fa0565b115b1561224d5760026005611ff59190614081565b821115612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90613d66565b60405180910390fd5b611f406126ac6120479190614081565b826013546120559190613fa0565b1115612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90613dc6565b60405180910390fd5b611f40826012546120a79190613fa0565b1180156120b75750611f40601254105b15612194576000601254611f406120ce9190614081565b836120d99190614081565b905034600c54826120ea9190614027565b111561212b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212290613e66565b60405180910390fd5b7f89e7d427cf08d2b598935ffdcce8944b84a40ddfe83d99946a0ae519eab2996a3330600c548461215c9190614027565b8460405161216d9493929190613cb4565b60405180910390a180601360008282546121879190613fa0565b9250508190555050612248565b34600c54836121a39190614027565b11156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90613e66565b60405180910390fd5b7f89e7d427cf08d2b598935ffdcce8944b84a40ddfe83d99946a0ae519eab2996a3330600c54856122159190614027565b856040516122269493929190613cb4565b60405180910390a181601360008282546122409190613fa0565b925050819055505b6122fd565b6002821115612291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228890613d66565b60405180910390fd5b611f40826012546122a29190613fa0565b11156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90613de6565b60405180910390fd5b81601260008282546122f59190613fa0565b925050819055505b6123073383612c89565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161238061247d565b1115801561238f575060005482105b80156123bc575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061248d82612938565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124f8576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166125196123c3565b73ffffffffffffffffffffffffffffffffffffffff1614806125485750612547856125426123c3565b611a95565b5b8061258d57506125566123c3565b73ffffffffffffffffffffffffffffffffffffffff1661257584610b85565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806125c6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561262d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61263a858585600161301d565b612646600084876123cb565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128c65760005482146128c557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129318585856001613023565b5050505050565b612940613471565b60008290508061294e61247d565b11612b8c57600054811015612b8b576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612b8957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a6d578092505050612bbe565b5b600115612b8857818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b83578092505050612bbe565b612a6e565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ca3828260405180602001604052806000815250613029565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cf06123c3565b8786866040518563ffffffff1660e01b8152600401612d129493929190613c68565b602060405180830381600087803b158015612d2c57600080fd5b505af1925050508015612d5d57506040513d601f19601f82011682018060405250810190612d5a919061384c565b60015b612dd7573d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b50600081511415612dcf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600d8054612e399061416b565b80601f0160208091040260200160405190810160405280929190818152602001828054612e659061416b565b8015612eb25780601f10612e8757610100808354040283529160200191612eb2565b820191906000526020600020905b815481529060010190602001808311612e9557829003601f168201915b5050505050905090565b60606000821415612f04576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613018565b600082905060005b60008214612f36578080612f1f906141ce565b915050600a82612f2f9190613ff6565b9150612f0c565b60008167ffffffffffffffff811115612f5257612f51614304565b5b6040519080825280601f01601f191660200182016040528015612f845781602001600182028036833780820191505090505b5090505b6000851461301157600182612f9d9190614081565b9150600a85612fac9190614217565b6030612fb89190613fa0565b60f81b818381518110612fce57612fcd6142d5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561300a9190613ff6565b9450612f88565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613096576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156130d1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130de600085838661301d565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061329f8673ffffffffffffffffffffffffffffffffffffffff16612ca7565b15613364575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133146000878480600101955087612cca565b61334a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106132a557826000541461335f57600080fd5b6133cf565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613365575b8160008190555050506133e56000858386613023565b50505050565b8280546133f79061416b565b90600052602060002090601f0160209004810192826134195760008555613460565b82601f1061343257805160ff1916838001178555613460565b82800160010185558215613460579182015b8281111561345f578251825591602001919060010190613444565b5b50905061346d91906134b4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134cd5760008160009055506001016134b5565b5090565b60006134e46134df84613ee6565b613ec1565b905082815260208101848484011115613500576134ff614338565b5b61350b848285614129565b509392505050565b600061352661352184613f17565b613ec1565b90508281526020810184848401111561354257613541614338565b5b61354d848285614129565b509392505050565b60008135905061356481614564565b92915050565b6000813590506135798161457b565b92915050565b60008151905061358e8161457b565b92915050565b6000813590506135a381614592565b92915050565b6000815190506135b881614592565b92915050565b600082601f8301126135d3576135d2614333565b5b81356135e38482602086016134d1565b91505092915050565b600082601f83011261360157613600614333565b5b8135613611848260208601613513565b91505092915050565b600081359050613629816145a9565b92915050565b60006020828403121561364557613644614342565b5b600061365384828501613555565b91505092915050565b6000806040838503121561367357613672614342565b5b600061368185828601613555565b925050602061369285828601613555565b9150509250929050565b6000806000606084860312156136b5576136b4614342565b5b60006136c386828701613555565b93505060206136d486828701613555565b92505060406136e58682870161361a565b9150509250925092565b6000806000806080858703121561370957613708614342565b5b600061371787828801613555565b945050602061372887828801613555565b93505060406137398782880161361a565b925050606085013567ffffffffffffffff81111561375a5761375961433d565b5b613766878288016135be565b91505092959194509250565b6000806040838503121561378957613788614342565b5b600061379785828601613555565b92505060206137a88582860161356a565b9150509250929050565b600080604083850312156137c9576137c8614342565b5b60006137d785828601613555565b92505060206137e88582860161361a565b9150509250929050565b60006020828403121561380857613807614342565b5b60006138168482850161357f565b91505092915050565b60006020828403121561383557613834614342565b5b600061384384828501613594565b91505092915050565b60006020828403121561386257613861614342565b5b6000613870848285016135a9565b91505092915050565b60006020828403121561388f5761388e614342565b5b600082013567ffffffffffffffff8111156138ad576138ac61433d565b5b6138b9848285016135ec565b91505092915050565b6000602082840312156138d8576138d7614342565b5b60006138e68482850161361a565b91505092915050565b6000806040838503121561390657613905614342565b5b60006139148582860161361a565b925050602083013567ffffffffffffffff8111156139355761393461433d565b5b613941858286016135ec565b9150509250929050565b613954816140b5565b82525050565b613963816140c7565b82525050565b600061397482613f5d565b61397e8185613f73565b935061398e818560208601614138565b61399781614347565b840191505092915050565b60006139ad82613f68565b6139b78185613f84565b93506139c7818560208601614138565b6139d081614347565b840191505092915050565b60006139e682613f68565b6139f08185613f95565b9350613a00818560208601614138565b80840191505092915050565b60008154613a198161416b565b613a238186613f95565b94506001821660008114613a3e5760018114613a4f57613a82565b60ff19831686528186019350613a82565b613a5885613f48565b60005b83811015613a7a57815481890152600182019150602081019050613a5b565b838801955050505b50505092915050565b6000613a98601b83613f84565b9150613aa382614358565b602082019050919050565b6000613abb602683613f84565b9150613ac682614381565b604082019050919050565b6000613ade601c83613f84565b9150613ae9826143d0565b602082019050919050565b6000613b01601083613f84565b9150613b0c826143f9565b602082019050919050565b6000613b24601583613f84565b9150613b2f82614422565b602082019050919050565b6000613b47601d83613f84565b9150613b528261444b565b602082019050919050565b6000613b6a602083613f84565b9150613b7582614474565b602082019050919050565b6000613b8d602f83613f84565b9150613b988261449d565b604082019050919050565b6000613bb0601583613f84565b9150613bbb826144ec565b602082019050919050565b6000613bd3602783613f84565b9150613bde82614515565b604082019050919050565b613bf28161411f565b82525050565b6000613c0482856139db565b9150613c1082846139db565b91508190509392505050565b6000613c2882866139db565b9150613c3482856139db565b9150613c408284613a0c565b9150819050949350505050565b6000602082019050613c62600083018461394b565b92915050565b6000608082019050613c7d600083018761394b565b613c8a602083018661394b565b613c976040830185613be9565b8181036060830152613ca98184613969565b905095945050505050565b6000608082019050613cc9600083018761394b565b613cd6602083018661394b565b613ce36040830185613be9565b613cf06060830184613be9565b95945050505050565b6000604082019050613d0e600083018561394b565b8181036020830152613d2081846139a2565b90509392505050565b6000602082019050613d3e600083018461395a565b92915050565b60006020820190508181036000830152613d5e81846139a2565b905092915050565b60006020820190508181036000830152613d7f81613a8b565b9050919050565b60006020820190508181036000830152613d9f81613aae565b9050919050565b60006020820190508181036000830152613dbf81613ad1565b9050919050565b60006020820190508181036000830152613ddf81613af4565b9050919050565b60006020820190508181036000830152613dff81613b17565b9050919050565b60006020820190508181036000830152613e1f81613b3a565b9050919050565b60006020820190508181036000830152613e3f81613b5d565b9050919050565b60006020820190508181036000830152613e5f81613b80565b9050919050565b60006020820190508181036000830152613e7f81613ba3565b9050919050565b60006020820190508181036000830152613e9f81613bc6565b9050919050565b6000602082019050613ebb6000830184613be9565b92915050565b6000613ecb613edc565b9050613ed7828261419d565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0157613f00614304565b5b613f0a82614347565b9050602081019050919050565b600067ffffffffffffffff821115613f3257613f31614304565b5b613f3b82614347565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fab8261411f565b9150613fb68361411f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613feb57613fea614248565b5b828201905092915050565b60006140018261411f565b915061400c8361411f565b92508261401c5761401b614277565b5b828204905092915050565b60006140328261411f565b915061403d8361411f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561407657614075614248565b5b828202905092915050565b600061408c8261411f565b91506140978361411f565b9250828210156140aa576140a9614248565b5b828203905092915050565b60006140c0826140ff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561415657808201518184015260208101905061413b565b83811115614165576000848401525b50505050565b6000600282049050600182168061418357607f821691505b60208210811415614197576141966142a6565b5b50919050565b6141a682614347565b810181811067ffffffffffffffff821117156141c5576141c4614304565b5b80604052505050565b60006141d98261411f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420c5761420b614248565b5b600182019050919050565b60006142228261411f565b915061422d8361411f565b92508261423d5761423c614277565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520776f756c6420657863656564206d61782074696d65730000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f4e6f7420656e6f7567682074696d657300000000000000000000000000000000600082015250565b7f4e6f7420656e6f75676820667265652074696d65730000000000000000000000600082015250565b7f53616c6520776f756c6420657863656564206d61782062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420456c646560008201527f7220546f72636800000000000000000000000000000000000000000000000000602082015250565b61456d816140b5565b811461457857600080fd5b50565b614584816140c7565b811461458f57600080fd5b50565b61459b816140d3565b81146145a657600080fd5b50565b6145b28161411f565b81146145bd57600080fd5b5056fea2646970667358221220bddf1d365a9b505a60072a4a3fba74af54bcdfd2fd118e2c498ab4ebbfeb0a2864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f63646e2e6d6f6e73746572636176652e7774662f697066732f746f7263682e676966000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c806370a082311161014f578063b88d4fde116100c1578063da3ef23f1161007a578063da3ef23f1461090e578063e985e9c514610937578063f2c4ce1e14610974578063f2fde38b1461099d578063f4a0a528146109c6578063f4e33848146109ef57610272565b8063b88d4fde146107fe578063bd5e9e8114610827578063c2b9f99314610850578063c35905c61461087b578063c6682862146108a6578063c87b56dd146108d157610272565b80638da5cb5b116101135780638da5cb5b1461070057806395d89b411461072b578063a144819414610756578063a22cb4651461077f578063a591252d146107a8578063afed23d4146107d357610272565b806370a082311461062b578063715018a61461066857806373ad468a1461067f5780637671a9c5146106aa5780638247ebbc146106d557610272565b806332cb6b0c116101e85780634ccbfd5a116101ac5780634ccbfd5a146105195780634d842d5414610544578063518302271461056f57806355f804b31461059a5780636352211e146105c35780636817c76c1461060057610272565b806332cb6b0c1461046e5780633b84d9c6146104995780633bd2b67d146104b05780633ccfd60b146104d957806342842e0e146104f057610272565b8063095ea7b31161023a578063095ea7b31461037257806311b7e5e71461039b57806312065fe0146103c457806318160ddd146103ef5780631e88a9771461041a57806323b872dd1461044557610272565b806301ffc9a7146102775780630451a9f1146102b457806306fdde03146102df578063081812fc1461030a578063081c8c4414610347575b600080fd5b34801561028357600080fd5b5061029e6004803603810190610299919061381f565b610a0b565b6040516102ab9190613d29565b60405180910390f35b3480156102c057600080fd5b506102c9610aed565b6040516102d69190613ea6565b60405180910390f35b3480156102eb57600080fd5b506102f4610af3565b6040516103019190613d44565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c91906138c2565b610b85565b60405161033e9190613c4d565b60405180910390f35b34801561035357600080fd5b5061035c610c01565b6040516103699190613d44565b60405180910390f35b34801561037e57600080fd5b50610399600480360381019061039491906137b2565b610c8f565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906138c2565b610d94565b005b3480156103d057600080fd5b506103d9610e1a565b6040516103e69190613ea6565b60405180910390f35b3480156103fb57600080fd5b50610404610e22565b6040516104119190613ea6565b60405180910390f35b34801561042657600080fd5b5061042f610e39565b60405161043c9190613ea6565b60405180910390f35b34801561045157600080fd5b5061046c6004803603810190610467919061369c565b610e5d565b005b34801561047a57600080fd5b50610483610e6d565b6040516104909190613ea6565b60405180910390f35b3480156104a557600080fd5b506104ae610e73565b005b3480156104bc57600080fd5b506104d760048036038101906104d291906138c2565b610f1b565b005b3480156104e557600080fd5b506104ee610fb5565b005b3480156104fc57600080fd5b506105176004803603810190610512919061369c565b611094565b005b34801561052557600080fd5b5061052e6110b4565b60405161053b9190613ea6565b60405180910390f35b34801561055057600080fd5b506105596110fb565b6040516105669190613ea6565b60405180910390f35b34801561057b57600080fd5b50610584611101565b6040516105919190613d29565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613879565b611114565b005b3480156105cf57600080fd5b506105ea60048036038101906105e591906138c2565b6111aa565b6040516105f79190613c4d565b60405180910390f35b34801561060c57600080fd5b506106156111c0565b6040516106229190613ea6565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d919061362f565b6111c6565b60405161065f9190613ea6565b60405180910390f35b34801561067457600080fd5b5061067d611296565b005b34801561068b57600080fd5b5061069461131e565b6040516106a19190613ea6565b60405180910390f35b3480156106b657600080fd5b506106bf611323565b6040516106cc9190613ea6565b60405180910390f35b3480156106e157600080fd5b506106ea611329565b6040516106f79190613ea6565b60405180910390f35b34801561070c57600080fd5b5061071561132f565b6040516107229190613c4d565b60405180910390f35b34801561073757600080fd5b50610740611359565b60405161074d9190613d44565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906137b2565b6113eb565b005b34801561078b57600080fd5b506107a660048036038101906107a19190613772565b611475565b005b3480156107b457600080fd5b506107bd6115ed565b6040516107ca9190613ea6565b60405180910390f35b3480156107df57600080fd5b506107e86115f2565b6040516107f59190613ea6565b60405180910390f35b34801561080a57600080fd5b50610825600480360381019061082091906136ef565b6115f8565b005b34801561083357600080fd5b5061084e6004803603810190610849919061362f565b611670565b005b34801561085c57600080fd5b50610865611730565b6040516108729190613ea6565b60405180910390f35b34801561088757600080fd5b50610890611747565b60405161089d9190613ea6565b60405180910390f35b3480156108b257600080fd5b506108bb61174d565b6040516108c89190613d44565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f391906138c2565b6117db565b6040516109059190613d44565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190613879565b6119ff565b005b34801561094357600080fd5b5061095e6004803603810190610959919061365c565b611a95565b60405161096b9190613d29565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613879565b611b29565b005b3480156109a957600080fd5b506109c460048036038101906109bf919061362f565b611bbf565b005b3480156109d257600080fd5b506109ed60048036038101906109e891906138c2565b611cb7565b005b610a096004803603810190610a0491906138ef565b611d3d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae65750610ae58261230b565b5b9050919050565b60125481565b606060028054610b029061416b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e9061416b565b8015610b7b5780601f10610b5057610100808354040283529160200191610b7b565b820191906000526020600020905b815481529060010190602001808311610b5e57829003601f168201915b5050505050905090565b6000610b9082612375565b610bc6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e8054610c0e9061416b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3a9061416b565b8015610c875780601f10610c5c57610100808354040283529160200191610c87565b820191906000526020600020905b815481529060010190602001808311610c6a57829003601f168201915b505050505081565b6000610c9a826111aa565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d02576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d216123c3565b73ffffffffffffffffffffffffffffffffffffffff1614610d8457610d4d81610d486123c3565b611a95565b610d83576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610d8f8383836123cb565b505050565b610d9c6123c3565b73ffffffffffffffffffffffffffffffffffffffff16610dba61132f565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613e26565b60405180910390fd5b80600b8190555050565b600047905090565b6000610e2c61247d565b6001546000540303905090565b6000601354611f406126ac610e4e9190614081565b610e589190614081565b905090565b610e68838383612482565b505050565b6126ac81565b610e7b6123c3565b73ffffffffffffffffffffffffffffffffffffffff16610e9961132f565b73ffffffffffffffffffffffffffffffffffffffff1614610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee690613e26565b60405180910390fd5b600960149054906101000a900460ff1615600960146101000a81548160ff021916908315150217905550565b610f236123c3565b73ffffffffffffffffffffffffffffffffffffffff16610f4161132f565b73ffffffffffffffffffffffffffffffffffffffff1614610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e90613e26565b60405180910390fd5b80600a81905550612a3081610fac9190613fa0565b600b8190555050565b610fbd6123c3565b73ffffffffffffffffffffffffffffffffffffffff16610fdb61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890613e26565b60405180910390fd5b600047905073d146e86e62dddc70b9d02cfb00434400cf58c0bf73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611090573d6000803e3d6000fd5b5050565b6110af838383604051806020016040528060008152506115f8565b505050565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600b5481565b600960149054906101000a900460ff1681565b61111c6123c3565b73ffffffffffffffffffffffffffffffffffffffff1661113a61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613e26565b60405180910390fd5b80600d90805190602001906111a69291906133eb565b5050565b60006111b582612938565b600001519050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561122e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61129e6123c3565b73ffffffffffffffffffffffffffffffffffffffff166112bc61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990613e26565b60405180910390fd5b61131c6000612bc3565b565b600581565b61271081565b611f4081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546113689061416b565b80601f01602080910402602001604051908101604052809291908181526020018280546113949061416b565b80156113e15780601f106113b6576101008083540402835291602001916113e1565b820191906000526020600020905b8154815290600101906020018083116113c457829003601f168201915b5050505050905090565b6113f36123c3565b73ffffffffffffffffffffffffffffffffffffffff1661141161132f565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90613e26565b60405180910390fd5b6114718282612c89565b5050565b61147d6123c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114ef6123c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159c6123c3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e19190613d29565b60405180910390a35050565b600281565b600a5481565b611603848484612482565b6116228373ffffffffffffffffffffffffffffffffffffffff16612ca7565b1561166a5761163384848484612cca565b611669576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6116786123c3565b73ffffffffffffffffffffffffffffffffffffffff1661169661132f565b73ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613e26565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601254611f406117429190614081565b905090565b60135481565b600f805461175a9061416b565b80601f01602080910402602001604051908101604052809291908181526020018280546117869061416b565b80156117d35780601f106117a8576101008083540402835291602001916117d3565b820191906000526020600020905b8154815290600101906020018083116117b657829003601f168201915b505050505081565b60606117e682612375565b611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90613e46565b60405180910390fd5b60001515600960149054906101000a900460ff16151514156118d357600e805461184e9061416b565b80601f016020809104026020016040519081016040528092919081815260200182805461187a9061416b565b80156118c75780601f1061189c576101008083540402835291602001916118c7565b820191906000526020600020905b8154815290600101906020018083116118aa57829003601f168201915b505050505090506119fa565b60006010600084815260200190815260200160002080546118f39061416b565b80601f016020809104026020016040519081016040528092919081815260200182805461191f9061416b565b801561196c5780601f106119415761010080835404028352916020019161196c565b820191906000526020600020905b81548152906001019060200180831161194f57829003601f168201915b50505050509050600061197d612e2a565b90506000815114156119935781925050506119fa565b6000825111156119c85780826040516020016119b0929190613bf8565b604051602081830303815290604052925050506119fa565b806119d285612ebc565b600f6040516020016119e693929190613c1c565b604051602081830303815290604052925050505b919050565b611a076123c3565b73ffffffffffffffffffffffffffffffffffffffff16611a2561132f565b73ffffffffffffffffffffffffffffffffffffffff1614611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613e26565b60405180910390fd5b80600f9080519060200190611a919291906133eb565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b316123c3565b73ffffffffffffffffffffffffffffffffffffffff16611b4f61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613e26565b60405180910390fd5b80600e9080519060200190611bbb9291906133eb565b5050565b611bc76123c3565b73ffffffffffffffffffffffffffffffffffffffff16611be561132f565b73ffffffffffffffffffffffffffffffffffffffff1614611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613e26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290613d86565b60405180910390fd5b611cb481612bc3565b50565b611cbf6123c3565b73ffffffffffffffffffffffffffffffffffffffff16611cdd61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613e26565b60405180910390fd5b80600c8190555050565b6126ac82611d49610e22565b611d539190613fa0565b1115611d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8b90613da6565b60405180910390fd5b60011515600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663406946a733846040518363ffffffff1660e01b8152600401611df5929190613cf9565b60206040518083038186803b158015611e0d57600080fd5b505afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4591906137f2565b1515148015611e565750600a544210155b80611e635750600b544210155b611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990613e86565b60405180910390fd5b600582601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eef9190613fa0565b1115611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790613e06565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f7f9190613fa0565b925050819055506002601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611fe25750611f4082601254611fe09190613fa0565b115b1561224d5760026005611ff59190614081565b821115612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90613d66565b60405180910390fd5b611f406126ac6120479190614081565b826013546120559190613fa0565b1115612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90613dc6565b60405180910390fd5b611f40826012546120a79190613fa0565b1180156120b75750611f40601254105b15612194576000601254611f406120ce9190614081565b836120d99190614081565b905034600c54826120ea9190614027565b111561212b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212290613e66565b60405180910390fd5b7f89e7d427cf08d2b598935ffdcce8944b84a40ddfe83d99946a0ae519eab2996a3330600c548461215c9190614027565b8460405161216d9493929190613cb4565b60405180910390a180601360008282546121879190613fa0565b9250508190555050612248565b34600c54836121a39190614027565b11156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90613e66565b60405180910390fd5b7f89e7d427cf08d2b598935ffdcce8944b84a40ddfe83d99946a0ae519eab2996a3330600c54856122159190614027565b856040516122269493929190613cb4565b60405180910390a181601360008282546122409190613fa0565b925050819055505b6122fd565b6002821115612291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228890613d66565b60405180910390fd5b611f40826012546122a29190613fa0565b11156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90613de6565b60405180910390fd5b81601260008282546122f59190613fa0565b925050819055505b6123073383612c89565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161238061247d565b1115801561238f575060005482105b80156123bc575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061248d82612938565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124f8576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166125196123c3565b73ffffffffffffffffffffffffffffffffffffffff1614806125485750612547856125426123c3565b611a95565b5b8061258d57506125566123c3565b73ffffffffffffffffffffffffffffffffffffffff1661257584610b85565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806125c6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561262d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61263a858585600161301d565b612646600084876123cb565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128c65760005482146128c557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129318585856001613023565b5050505050565b612940613471565b60008290508061294e61247d565b11612b8c57600054811015612b8b576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612b8957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a6d578092505050612bbe565b5b600115612b8857818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b83578092505050612bbe565b612a6e565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ca3828260405180602001604052806000815250613029565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cf06123c3565b8786866040518563ffffffff1660e01b8152600401612d129493929190613c68565b602060405180830381600087803b158015612d2c57600080fd5b505af1925050508015612d5d57506040513d601f19601f82011682018060405250810190612d5a919061384c565b60015b612dd7573d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b50600081511415612dcf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600d8054612e399061416b565b80601f0160208091040260200160405190810160405280929190818152602001828054612e659061416b565b8015612eb25780601f10612e8757610100808354040283529160200191612eb2565b820191906000526020600020905b815481529060010190602001808311612e9557829003601f168201915b5050505050905090565b60606000821415612f04576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613018565b600082905060005b60008214612f36578080612f1f906141ce565b915050600a82612f2f9190613ff6565b9150612f0c565b60008167ffffffffffffffff811115612f5257612f51614304565b5b6040519080825280601f01601f191660200182016040528015612f845781602001600182028036833780820191505090505b5090505b6000851461301157600182612f9d9190614081565b9150600a85612fac9190614217565b6030612fb89190613fa0565b60f81b818381518110612fce57612fcd6142d5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561300a9190613ff6565b9450612f88565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613096576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156130d1576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130de600085838661301d565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061329f8673ffffffffffffffffffffffffffffffffffffffff16612ca7565b15613364575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133146000878480600101955087612cca565b61334a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106132a557826000541461335f57600080fd5b6133cf565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613365575b8160008190555050506133e56000858386613023565b50505050565b8280546133f79061416b565b90600052602060002090601f0160209004810192826134195760008555613460565b82601f1061343257805160ff1916838001178555613460565b82800160010185558215613460579182015b8281111561345f578251825591602001919060010190613444565b5b50905061346d91906134b4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134cd5760008160009055506001016134b5565b5090565b60006134e46134df84613ee6565b613ec1565b905082815260208101848484011115613500576134ff614338565b5b61350b848285614129565b509392505050565b600061352661352184613f17565b613ec1565b90508281526020810184848401111561354257613541614338565b5b61354d848285614129565b509392505050565b60008135905061356481614564565b92915050565b6000813590506135798161457b565b92915050565b60008151905061358e8161457b565b92915050565b6000813590506135a381614592565b92915050565b6000815190506135b881614592565b92915050565b600082601f8301126135d3576135d2614333565b5b81356135e38482602086016134d1565b91505092915050565b600082601f83011261360157613600614333565b5b8135613611848260208601613513565b91505092915050565b600081359050613629816145a9565b92915050565b60006020828403121561364557613644614342565b5b600061365384828501613555565b91505092915050565b6000806040838503121561367357613672614342565b5b600061368185828601613555565b925050602061369285828601613555565b9150509250929050565b6000806000606084860312156136b5576136b4614342565b5b60006136c386828701613555565b93505060206136d486828701613555565b92505060406136e58682870161361a565b9150509250925092565b6000806000806080858703121561370957613708614342565b5b600061371787828801613555565b945050602061372887828801613555565b93505060406137398782880161361a565b925050606085013567ffffffffffffffff81111561375a5761375961433d565b5b613766878288016135be565b91505092959194509250565b6000806040838503121561378957613788614342565b5b600061379785828601613555565b92505060206137a88582860161356a565b9150509250929050565b600080604083850312156137c9576137c8614342565b5b60006137d785828601613555565b92505060206137e88582860161361a565b9150509250929050565b60006020828403121561380857613807614342565b5b60006138168482850161357f565b91505092915050565b60006020828403121561383557613834614342565b5b600061384384828501613594565b91505092915050565b60006020828403121561386257613861614342565b5b6000613870848285016135a9565b91505092915050565b60006020828403121561388f5761388e614342565b5b600082013567ffffffffffffffff8111156138ad576138ac61433d565b5b6138b9848285016135ec565b91505092915050565b6000602082840312156138d8576138d7614342565b5b60006138e68482850161361a565b91505092915050565b6000806040838503121561390657613905614342565b5b60006139148582860161361a565b925050602083013567ffffffffffffffff8111156139355761393461433d565b5b613941858286016135ec565b9150509250929050565b613954816140b5565b82525050565b613963816140c7565b82525050565b600061397482613f5d565b61397e8185613f73565b935061398e818560208601614138565b61399781614347565b840191505092915050565b60006139ad82613f68565b6139b78185613f84565b93506139c7818560208601614138565b6139d081614347565b840191505092915050565b60006139e682613f68565b6139f08185613f95565b9350613a00818560208601614138565b80840191505092915050565b60008154613a198161416b565b613a238186613f95565b94506001821660008114613a3e5760018114613a4f57613a82565b60ff19831686528186019350613a82565b613a5885613f48565b60005b83811015613a7a57815481890152600182019150602081019050613a5b565b838801955050505b50505092915050565b6000613a98601b83613f84565b9150613aa382614358565b602082019050919050565b6000613abb602683613f84565b9150613ac682614381565b604082019050919050565b6000613ade601c83613f84565b9150613ae9826143d0565b602082019050919050565b6000613b01601083613f84565b9150613b0c826143f9565b602082019050919050565b6000613b24601583613f84565b9150613b2f82614422565b602082019050919050565b6000613b47601d83613f84565b9150613b528261444b565b602082019050919050565b6000613b6a602083613f84565b9150613b7582614474565b602082019050919050565b6000613b8d602f83613f84565b9150613b988261449d565b604082019050919050565b6000613bb0601583613f84565b9150613bbb826144ec565b602082019050919050565b6000613bd3602783613f84565b9150613bde82614515565b604082019050919050565b613bf28161411f565b82525050565b6000613c0482856139db565b9150613c1082846139db565b91508190509392505050565b6000613c2882866139db565b9150613c3482856139db565b9150613c408284613a0c565b9150819050949350505050565b6000602082019050613c62600083018461394b565b92915050565b6000608082019050613c7d600083018761394b565b613c8a602083018661394b565b613c976040830185613be9565b8181036060830152613ca98184613969565b905095945050505050565b6000608082019050613cc9600083018761394b565b613cd6602083018661394b565b613ce36040830185613be9565b613cf06060830184613be9565b95945050505050565b6000604082019050613d0e600083018561394b565b8181036020830152613d2081846139a2565b90509392505050565b6000602082019050613d3e600083018461395a565b92915050565b60006020820190508181036000830152613d5e81846139a2565b905092915050565b60006020820190508181036000830152613d7f81613a8b565b9050919050565b60006020820190508181036000830152613d9f81613aae565b9050919050565b60006020820190508181036000830152613dbf81613ad1565b9050919050565b60006020820190508181036000830152613ddf81613af4565b9050919050565b60006020820190508181036000830152613dff81613b17565b9050919050565b60006020820190508181036000830152613e1f81613b3a565b9050919050565b60006020820190508181036000830152613e3f81613b5d565b9050919050565b60006020820190508181036000830152613e5f81613b80565b9050919050565b60006020820190508181036000830152613e7f81613ba3565b9050919050565b60006020820190508181036000830152613e9f81613bc6565b9050919050565b6000602082019050613ebb6000830184613be9565b92915050565b6000613ecb613edc565b9050613ed7828261419d565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0157613f00614304565b5b613f0a82614347565b9050602081019050919050565b600067ffffffffffffffff821115613f3257613f31614304565b5b613f3b82614347565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fab8261411f565b9150613fb68361411f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613feb57613fea614248565b5b828201905092915050565b60006140018261411f565b915061400c8361411f565b92508261401c5761401b614277565b5b828204905092915050565b60006140328261411f565b915061403d8361411f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561407657614075614248565b5b828202905092915050565b600061408c8261411f565b91506140978361411f565b9250828210156140aa576140a9614248565b5b828203905092915050565b60006140c0826140ff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561415657808201518184015260208101905061413b565b83811115614165576000848401525b50505050565b6000600282049050600182168061418357607f821691505b60208210811415614197576141966142a6565b5b50919050565b6141a682614347565b810181811067ffffffffffffffff821117156141c5576141c4614304565b5b80604052505050565b60006141d98261411f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420c5761420b614248565b5b600182019050919050565b60006142228261411f565b915061422d8361411f565b92508261423d5761423c614277565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520776f756c6420657863656564206d61782074696d65730000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f4e6f7420656e6f7567682074696d657300000000000000000000000000000000600082015250565b7f4e6f7420656e6f75676820667265652074696d65730000000000000000000000600082015250565b7f53616c6520776f756c6420657863656564206d61782062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420456c646560008201527f7220546f72636800000000000000000000000000000000000000000000000000602082015250565b61456d816140b5565b811461457857600080fd5b50565b614584816140c7565b811461458f57600080fd5b50565b61459b816140d3565b81146145a657600080fd5b50565b6145b28161411f565b81146145bd57600080fd5b5056fea2646970667358221220bddf1d365a9b505a60072a4a3fba74af54bcdfd2fd118e2c498ab4ebbfeb0a2864736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f63646e2e6d6f6e73746572636176652e7774662f697066732f746f7263682e676966000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : initBaseURI (string): https://cdn.monstercave.wtf/ipfs/torch.gif
Arg [1] : initNotRevealedUri (string):

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [3] : 68747470733a2f2f63646e2e6d6f6e73746572636176652e7774662f69706673
Arg [4] : 2f746f7263682e67696600000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42896:6296:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23954:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43771:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27069:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28573:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43580:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28135:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48314:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48703:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23194:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49048:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29438:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43299:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47538:78;;;;;;;;;;;;;:::i;:::-;;48159:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48548:141;;;;;;;;;;;;;:::i;:::-;;29679:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48813:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43088:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43010:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47902:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26877:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43510:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24323:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9885:103;;;;;;;;;;;;;:::i;:::-;;43413:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43244:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43348:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9234:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27238:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46342:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28849:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43460:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43045:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29935:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47421:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48932:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43804:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43615:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46469:944;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48018:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29207:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47762:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10143:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48436:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44144:2188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23954:305;24056:4;24108:25;24093:40;;;:11;:40;;;;:105;;;;24165:33;24150:48;;;:11;:48;;;;24093:105;:158;;;;24215:36;24239:11;24215:23;:36::i;:::-;24093:158;24073:178;;23954:305;;;:::o;43771:25::-;;;;:::o;27069:100::-;27123:13;27156:5;27149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27069:100;:::o;28573:204::-;28641:7;28666:16;28674:7;28666;:16::i;:::-;28661:64;;28691:34;;;;;;;;;;;;;;28661:64;28745:15;:24;28761:7;28745:24;;;;;;;;;;;;;;;;;;;;;28738:31;;28573:204;;;:::o;43580:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28135:372::-;28208:13;28224:24;28240:7;28224:15;:24::i;:::-;28208:40;;28269:5;28263:11;;:2;:11;;;28259:48;;;28283:24;;;;;;;;;;;;;;28259:48;28340:5;28324:21;;:12;:10;:12::i;:::-;:21;;;28320:139;;28351:37;28368:5;28375:12;:10;:12::i;:::-;28351:16;:37::i;:::-;28347:112;;28412:35;;;;;;;;;;;;;;28347:112;28320:139;28471:28;28480:2;28484:7;28493:5;28471:8;:28::i;:::-;28197:310;28135:372;;:::o;48314:110::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48406:10:::1;48389:14;:27;;;;48314:110:::0;:::o;48703:98::-;48745:7;48772:21;48765:28;;48703:98;:::o;23194:312::-;23247:7;23472:15;:13;:15::i;:::-;23457:12;;23441:13;;:28;:46;23434:53;;23194:312;:::o;49048:127::-;49098:7;49154:13;;43389:4;43336;49124:27;;;;:::i;:::-;:43;;;;:::i;:::-;49117:50;;49048:127;:::o;29438:170::-;29572:28;29582:4;29588:2;29592:7;29572:9;:28::i;:::-;29438:170;;;:::o;43299:41::-;43336:4;43299:41;:::o;47538:78::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47600:8:::1;;;;;;;;;;;47599:9;47588:8;;:20;;;;;;;;;;;;;;;;;;47538:78::o:0;48159:147::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48239:10:::1;48228:8;:21;;;;48290:8;48277:10;:21;;;;:::i;:::-;48260:14;:38;;;;48159:147:::0;:::o;48548:141::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48596:15:::1;48614:21;48596:39;;43171:42;48646:26;;:35;48673:7;48646:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48585:104;48548:141::o:0;29679:185::-;29817:39;29834:4;29840:2;29844:7;29817:39;;;;;;;;;;;;:16;:39::i;:::-;29679:185;;;:::o;48813:105::-;48860:7;48886:12;:24;48899:10;48886:24;;;;;;;;;;;;;;;;48879:31;;48813:105;:::o;43088:42::-;;;;:::o;43010:28::-;;;;;;;;;;;;;:::o;47902:104::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47987:11:::1;47977:7;:21;;;;;;;;;;;;:::i;:::-;;47902:104:::0;:::o;26877:125::-;26941:7;26968:21;26981:7;26968:12;:21::i;:::-;:26;;;26961:33;;26877:125;;;:::o;43510:38::-;;;;:::o;24323:206::-;24387:7;24428:1;24411:19;;:5;:19;;;24407:60;;;24439:28;;;;;;;;;;;;;;24407:60;24493:12;:19;24506:5;24493:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24485:36;;24478:43;;24323:206;;;:::o;9885:103::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9950:30:::1;9977:1;9950:18;:30::i;:::-;9885:103::o:0;43413:38::-;43450:1;43413:38;:::o;43244:47::-;43286:5;43244:47;:::o;43348:45::-;43389:4;43348:45;:::o;9234:87::-;9280:7;9307:6;;;;;;;;;;;9300:13;;9234:87;:::o;27238:104::-;27294:13;27327:7;27320:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27238:104;:::o;46342:117::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46423:28:::1;46433:2;46437:13;46423:9;:28::i;:::-;46342:117:::0;;:::o;28849:287::-;28960:12;:10;:12::i;:::-;28948:24;;:8;:24;;;28944:54;;;28981:17;;;;;;;;;;;;;;28944:54;29056:8;29011:18;:32;29030:12;:10;:12::i;:::-;29011:32;;;;;;;;;;;;;;;:42;29044:8;29011:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29109:8;29080:48;;29095:12;:10;:12::i;:::-;29080:48;;;29119:8;29080:48;;;;;;:::i;:::-;;;;;;;;28849:287;;:::o;43460:39::-;43498:1;43460:39;:::o;43045:36::-;;;;:::o;29935:370::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30145:15;:2;:13;;;:15::i;:::-;30141:157;;;30166:56;30197:4;30203:2;30207:7;30216:5;30166:30;:56::i;:::-;30162:136;;30246:40;;;;;;;;;;;;;;30162:136;30141:157;29935:370;;;;:::o;47421:106::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47510:8:::1;47495:5;;:24;;;;;;;;;;;;;;;;;;47421:106:::0;:::o;48932:108::-;48979:7;49022:10;;43389:4;49005:27;;;;:::i;:::-;48998:34;;48932:108;:::o;43804:28::-;;;;:::o;43615:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46469:944::-;46542:13;46595:16;46603:7;46595;:16::i;:::-;46573:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46713:5;46701:17;;:8;;;;;;;;;;;:17;;;46697:71;;;46742:14;46735:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46697:71;46780:23;46806:10;:19;46817:7;46806:19;;;;;;;;;;;46780:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46836:18;46857:10;:8;:10::i;:::-;46836:31;;46965:1;46949:4;46943:18;:23;46939:72;;;46990:9;46983:16;;;;;;46939:72;47141:1;47121:9;47115:23;:27;47111:108;;;47190:4;47196:9;47173:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47159:48;;;;;;47111:108;47364:4;47370:18;:7;:16;:18::i;:::-;47390:13;47347:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47320:85;;;;46469:944;;;;:::o;48018:133::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48126:17:::1;48110:13;:33;;;;;;;;;;;;:::i;:::-;;48018:133:::0;:::o;29207:164::-;29304:4;29328:18;:25;29347:5;29328:25;;;;;;;;;;;;;;;:35;29354:8;29328:35;;;;;;;;;;;;;;;;;;;;;;;;;29321:42;;29207:164;;;;:::o;47762:126::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47865:15:::1;47848:14;:32;;;;;;;;;;;;:::i;:::-;;47762:126:::0;:::o;10143:201::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10252:1:::1;10232:22;;:8;:22;;;;10224:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10308:28;10327:8;10308:18;:28::i;:::-;10143:201:::0;:::o;48436:100::-;9465:12;:10;:12::i;:::-;9454:23;;:7;:5;:7::i;:::-;:23;;;9446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48518:10:::1;48506:9;:22;;;;48436:100:::0;:::o;44144:2188::-;43336:4;44292:13;44276;:11;:13::i;:::-;:29;;;;:::i;:::-;:43;;44254:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;44461:4;44413:52;;:5;;;;;;;;;;;:18;;;44432:10;44443:13;44413:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;:83;;;;;44488:8;;44469:15;:27;;44413:83;44412:122;;;;44520:14;;44501:15;:33;;44412:122;44404:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;43450:1;44658:13;44631:12;:24;44644:10;44631:24;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:54;;44609:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;44793:13;44765:12;:24;44778:10;44765:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;43498:1;44822:12;:24;44835:10;44822:24;;;;;;;;;;;;;;;;:38;:87;;;;43389:4;44878:13;44865:10;;:26;;;;:::i;:::-;44864:45;44822:87;44819:1432;;;43498:1;43450;44963:24;;;;:::i;:::-;44946:13;:41;;44938:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43389:4;43336;45091:27;;;;:::i;:::-;45072:13;45056;;:29;;;;:::i;:::-;45055:64;;45047:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;43389:4;45174:13;45161:10;;:26;;;;:::i;:::-;45160:45;:76;;;;;43389:4;45209:10;;:27;45160:76;45157:799;;;45258:16;45312:10;;43389:4;45295:27;;;;:::i;:::-;45278:13;:45;;;;:::i;:::-;45258:65;;45398:9;45385;;45374:8;:20;;;;:::i;:::-;:33;;45345:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;45496:70;45508:10;45528:4;45546:9;;45535:8;:20;;;;:::i;:::-;45557:8;45496:70;;;;;;;;;:::i;:::-;;;;;;;;45602:8;45585:13;;:25;;;;;;;:::i;:::-;;;;;;;;45237:391;45157:799;;;45712:9;45699;;45683:13;:25;;;;:::i;:::-;:38;;45653:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;45810:81;45822:10;45842:4;45865:9;;45849:13;:25;;;;:::i;:::-;45876:13;45810:81;;;;;;;;;:::i;:::-;;;;;;;;45927:13;45910;;:30;;;;;;;:::i;:::-;;;;;;;;45157:799;44819:1432;;;43498:1;46024:13;:28;;46016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43389:4;46125:13;46112:10;;:26;;;;:::i;:::-;46111:46;;46103:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;46226:13;46212:10;;:27;;;;;;;:::i;:::-;;;;;;;;44819:1432;46280:36;46290:10;46302:13;46280:9;:36::i;:::-;44144:2188;;:::o;1342:157::-;1427:4;1466:25;1451:40;;;:11;:40;;;;1444:47;;1342:157;;;:::o;30560:174::-;30617:4;30660:7;30641:15;:13;:15::i;:::-;:26;;:53;;;;;30681:13;;30671:7;:23;30641:53;:85;;;;;30699:11;:20;30711:7;30699:20;;;;;;;;;;;:27;;;;;;;;;;;;30698:28;30641:85;30634:92;;30560:174;;;:::o;8606:98::-;8659:7;8686:10;8679:17;;8606:98;:::o;39782:196::-;39924:2;39897:15;:24;39913:7;39897:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39962:7;39958:2;39942:28;;39951:5;39942:28;;;;;;;;;;;;39782:196;;;:::o;22968:92::-;23024:7;22968:92;:::o;34730:2130::-;34845:35;34883:21;34896:7;34883:12;:21::i;:::-;34845:59;;34943:4;34921:26;;:13;:18;;;:26;;;34917:67;;34956:28;;;;;;;;;;;;;;34917:67;34997:22;35039:4;35023:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;35060:36;35077:4;35083:12;:10;:12::i;:::-;35060:16;:36::i;:::-;35023:73;:126;;;;35137:12;:10;:12::i;:::-;35113:36;;:20;35125:7;35113:11;:20::i;:::-;:36;;;35023:126;34997:153;;35168:17;35163:66;;35194:35;;;;;;;;;;;;;;35163:66;35258:1;35244:16;;:2;:16;;;35240:52;;;35269:23;;;;;;;;;;;;;;35240:52;35305:43;35327:4;35333:2;35337:7;35346:1;35305:21;:43::i;:::-;35413:35;35430:1;35434:7;35443:4;35413:8;:35::i;:::-;35774:1;35744:12;:18;35757:4;35744:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35818:1;35790:12;:16;35803:2;35790:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35836:31;35870:11;:20;35882:7;35870:20;;;;;;;;;;;35836:54;;35921:2;35905:8;:13;;;:18;;;;;;;;;;;;;;;;;;35971:15;35938:8;:23;;;:49;;;;;;;;;;;;;;;;;;36239:19;36271:1;36261:7;:11;36239:33;;36287:31;36321:11;:24;36333:11;36321:24;;;;;;;;;;;36287:58;;36389:1;36364:27;;:8;:13;;;;;;;;;;;;:27;;;36360:384;;;36574:13;;36559:11;:28;36555:174;;36628:4;36612:8;:13;;;:20;;;;;;;;;;;;;;;;;;36681:13;:28;;;36655:8;:23;;;:54;;;;;;;;;;;;;;;;;;36555:174;36360:384;35719:1036;;;36791:7;36787:2;36772:27;;36781:4;36772:27;;;;;;;;;;;;36810:42;36831:4;36837:2;36841:7;36850:1;36810:20;:42::i;:::-;34834:2026;;34730:2130;;;:::o;25704:1111::-;25766:21;;:::i;:::-;25800:12;25815:7;25800:22;;25883:4;25864:15;:13;:15::i;:::-;:23;25860:888;;25900:13;;25893:4;:20;25889:859;;;25934:31;25968:11;:17;25980:4;25968:17;;;;;;;;;;;25934:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26009:9;:16;;;26004:729;;26080:1;26054:28;;:9;:14;;;:28;;;26050:101;;26118:9;26111:16;;;;;;26050:101;26453:261;26460:4;26453:261;;;26493:6;;;;;;;;26538:11;:17;26550:4;26538:17;;;;;;;;;;;26526:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26612:1;26586:28;;:9;:14;;;:28;;;26582:109;;26654:9;26647:16;;;;;;26582:109;26453:261;;;26004:729;25915:833;25889:859;25860:888;26776:31;;;;;;;;;;;;;;25704:1111;;;;:::o;10504:191::-;10578:16;10597:6;;;;;;;;;;;10578:25;;10623:8;10614:6;;:17;;;;;;;;;;;;;;;;;;10678:8;10647:40;;10668:8;10647:40;;;;;;;;;;;;10567:128;10504:191;:::o;30818:104::-;30887:27;30897:2;30901:8;30887:27;;;;;;;;;;;;:9;:27::i;:::-;30818:104;;:::o;11710:326::-;11770:4;12027:1;12005:7;:19;;;:23;11998:30;;11710:326;;;:::o;40470:667::-;40633:4;40670:2;40654:36;;;40691:12;:10;:12::i;:::-;40705:4;40711:7;40720:5;40654:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40650:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40905:1;40888:6;:13;:18;40884:235;;;40934:40;;;;;;;;;;;;;;40884:235;41077:6;41071:13;41062:6;41058:2;41054:15;41047:38;40650:480;40783:45;;;40773:55;;;:6;:55;;;;40766:62;;;40470:667;;;;;;:::o;47642:108::-;47702:13;47735:7;47728:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47642:108;:::o;6812:723::-;6868:13;7098:1;7089:5;:10;7085:53;;;7116:10;;;;;;;;;;;;;;;;;;;;;7085:53;7148:12;7163:5;7148:20;;7179:14;7204:78;7219:1;7211:4;:9;7204:78;;7237:8;;;;;:::i;:::-;;;;7268:2;7260:10;;;;;:::i;:::-;;;7204:78;;;7292:19;7324:6;7314:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7292:39;;7342:154;7358:1;7349:5;:10;7342:154;;7386:1;7376:11;;;;;:::i;:::-;;;7453:2;7445:5;:10;;;;:::i;:::-;7432:2;:24;;;;:::i;:::-;7419:39;;7402:6;7409;7402:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7482:2;7473:11;;;;;:::i;:::-;;;7342:154;;;7520:6;7506:21;;;;;6812:723;;;;:::o;41785:159::-;;;;;:::o;42603:158::-;;;;;:::o;31295:1749::-;31418:20;31441:13;;31418:36;;31483:1;31469:16;;:2;:16;;;31465:48;;;31494:19;;;;;;;;;;;;;;31465:48;31540:1;31528:8;:13;31524:44;;;31550:18;;;;;;;;;;;;;;31524:44;31581:61;31611:1;31615:2;31619:12;31633:8;31581:21;:61::i;:::-;31954:8;31919:12;:16;31932:2;31919:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32018:8;31978:12;:16;31991:2;31978:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32077:2;32044:11;:25;32056:12;32044:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32144:15;32094:11;:25;32106:12;32094:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32177:20;32200:12;32177:35;;32227:11;32256:8;32241:12;:23;32227:37;;32285:15;:2;:13;;;:15::i;:::-;32281:631;;;32321:313;32377:12;32373:2;32352:38;;32369:1;32352:38;;;;;;;;;;;;32418:69;32457:1;32461:2;32465:14;;;;;;32481:5;32418:30;:69::i;:::-;32413:174;;32523:40;;;;;;;;;;;;;;32413:174;32629:3;32614:12;:18;32321:313;;32715:12;32698:13;;:29;32694:43;;32729:8;;;32694:43;32281:631;;;32778:119;32834:14;;;;;;32830:2;32809:40;;32826:1;32809:40;;;;;;;;;;;;32892:3;32877:12;:18;32778:119;;32281:631;32942:12;32926:13;:28;;;;31894:1072;;32976:60;33005:1;33009:2;33013:12;33027:8;32976:20;:60::i;:::-;31407:1637;31295:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:329::-;2479:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:119;;;2534:79;;:::i;:::-;2496:119;2654:1;2679:53;2724:7;2715:6;2704:9;2700:22;2679:53;:::i;:::-;2669:63;;2625:117;2420:329;;;;:::o;2755:474::-;2823:6;2831;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:53;3076:7;3067:6;3056:9;3052:22;3031:53;:::i;:::-;3021:63;;2977:117;3133:2;3159:53;3204:7;3195:6;3184:9;3180:22;3159:53;:::i;:::-;3149:63;;3104:118;2755:474;;;;;:::o;3235:619::-;3312:6;3320;3328;3377:2;3365:9;3356:7;3352:23;3348:32;3345:119;;;3383:79;;:::i;:::-;3345:119;3503:1;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3474:117;3630:2;3656:53;3701:7;3692:6;3681:9;3677:22;3656:53;:::i;:::-;3646:63;;3601:118;3758:2;3784:53;3829:7;3820:6;3809:9;3805:22;3784:53;:::i;:::-;3774:63;;3729:118;3235:619;;;;;:::o;3860:943::-;3955:6;3963;3971;3979;4028:3;4016:9;4007:7;4003:23;3999:33;3996:120;;;4035:79;;:::i;:::-;3996:120;4155:1;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4126:117;4282:2;4308:53;4353:7;4344:6;4333:9;4329:22;4308:53;:::i;:::-;4298:63;;4253:118;4410:2;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4381:118;4566:2;4555:9;4551:18;4538:32;4597:18;4589:6;4586:30;4583:117;;;4619:79;;:::i;:::-;4583:117;4724:62;4778:7;4769:6;4758:9;4754:22;4724:62;:::i;:::-;4714:72;;4509:287;3860:943;;;;;;;:::o;4809:468::-;4874:6;4882;4931:2;4919:9;4910:7;4906:23;4902:32;4899:119;;;4937:79;;:::i;:::-;4899:119;5057:1;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5028:117;5184:2;5210:50;5252:7;5243:6;5232:9;5228:22;5210:50;:::i;:::-;5200:60;;5155:115;4809:468;;;;;:::o;5283:474::-;5351:6;5359;5408:2;5396:9;5387:7;5383:23;5379:32;5376:119;;;5414:79;;:::i;:::-;5376:119;5534:1;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5505:117;5661:2;5687:53;5732:7;5723:6;5712:9;5708:22;5687:53;:::i;:::-;5677:63;;5632:118;5283:474;;;;;:::o;5763:345::-;5830:6;5879:2;5867:9;5858:7;5854:23;5850:32;5847:119;;;5885:79;;:::i;:::-;5847:119;6005:1;6030:61;6083:7;6074:6;6063:9;6059:22;6030:61;:::i;:::-;6020:71;;5976:125;5763:345;;;;:::o;6114:327::-;6172:6;6221:2;6209:9;6200:7;6196:23;6192:32;6189:119;;;6227:79;;:::i;:::-;6189:119;6347:1;6372:52;6416:7;6407:6;6396:9;6392:22;6372:52;:::i;:::-;6362:62;;6318:116;6114:327;;;;:::o;6447:349::-;6516:6;6565:2;6553:9;6544:7;6540:23;6536:32;6533:119;;;6571:79;;:::i;:::-;6533:119;6691:1;6716:63;6771:7;6762:6;6751:9;6747:22;6716:63;:::i;:::-;6706:73;;6662:127;6447:349;;;;:::o;6802:509::-;6871:6;6920:2;6908:9;6899:7;6895:23;6891:32;6888:119;;;6926:79;;:::i;:::-;6888:119;7074:1;7063:9;7059:17;7046:31;7104:18;7096:6;7093:30;7090:117;;;7126:79;;:::i;:::-;7090:117;7231:63;7286:7;7277:6;7266:9;7262:22;7231:63;:::i;:::-;7221:73;;7017:287;6802:509;;;;:::o;7317:329::-;7376:6;7425:2;7413:9;7404:7;7400:23;7396:32;7393:119;;;7431:79;;:::i;:::-;7393:119;7551:1;7576:53;7621:7;7612:6;7601:9;7597:22;7576:53;:::i;:::-;7566:63;;7522:117;7317:329;;;;:::o;7652:654::-;7730:6;7738;7787:2;7775:9;7766:7;7762:23;7758:32;7755:119;;;7793:79;;:::i;:::-;7755:119;7913:1;7938:53;7983:7;7974:6;7963:9;7959:22;7938:53;:::i;:::-;7928:63;;7884:117;8068:2;8057:9;8053:18;8040:32;8099:18;8091:6;8088:30;8085:117;;;8121:79;;:::i;:::-;8085:117;8226:63;8281:7;8272:6;8261:9;8257:22;8226:63;:::i;:::-;8216:73;;8011:288;7652:654;;;;;:::o;8312:118::-;8399:24;8417:5;8399:24;:::i;:::-;8394:3;8387:37;8312:118;;:::o;8436:109::-;8517:21;8532:5;8517:21;:::i;:::-;8512:3;8505:34;8436:109;;:::o;8551:360::-;8637:3;8665:38;8697:5;8665:38;:::i;:::-;8719:70;8782:6;8777:3;8719:70;:::i;:::-;8712:77;;8798:52;8843:6;8838:3;8831:4;8824:5;8820:16;8798:52;:::i;:::-;8875:29;8897:6;8875:29;:::i;:::-;8870:3;8866:39;8859:46;;8641:270;8551:360;;;;:::o;8917:364::-;9005:3;9033:39;9066:5;9033:39;:::i;:::-;9088:71;9152:6;9147:3;9088:71;:::i;:::-;9081:78;;9168:52;9213:6;9208:3;9201:4;9194:5;9190:16;9168:52;:::i;:::-;9245:29;9267:6;9245:29;:::i;:::-;9240:3;9236:39;9229:46;;9009:272;8917:364;;;;:::o;9287:377::-;9393:3;9421:39;9454:5;9421:39;:::i;:::-;9476:89;9558:6;9553:3;9476:89;:::i;:::-;9469:96;;9574:52;9619:6;9614:3;9607:4;9600:5;9596:16;9574:52;:::i;:::-;9651:6;9646:3;9642:16;9635:23;;9397:267;9287:377;;;;:::o;9694:845::-;9797:3;9834:5;9828:12;9863:36;9889:9;9863:36;:::i;:::-;9915:89;9997:6;9992:3;9915:89;:::i;:::-;9908:96;;10035:1;10024:9;10020:17;10051:1;10046:137;;;;10197:1;10192:341;;;;10013:520;;10046:137;10130:4;10126:9;10115;10111:25;10106:3;10099:38;10166:6;10161:3;10157:16;10150:23;;10046:137;;10192:341;10259:38;10291:5;10259:38;:::i;:::-;10319:1;10333:154;10347:6;10344:1;10341:13;10333:154;;;10421:7;10415:14;10411:1;10406:3;10402:11;10395:35;10471:1;10462:7;10458:15;10447:26;;10369:4;10366:1;10362:12;10357:17;;10333:154;;;10516:6;10511:3;10507:16;10500:23;;10199:334;;10013:520;;9801:738;;9694:845;;;;:::o;10545:366::-;10687:3;10708:67;10772:2;10767:3;10708:67;:::i;:::-;10701:74;;10784:93;10873:3;10784:93;:::i;:::-;10902:2;10897:3;10893:12;10886:19;;10545:366;;;:::o;10917:::-;11059:3;11080:67;11144:2;11139:3;11080:67;:::i;:::-;11073:74;;11156:93;11245:3;11156:93;:::i;:::-;11274:2;11269:3;11265:12;11258:19;;10917:366;;;:::o;11289:::-;11431:3;11452:67;11516:2;11511:3;11452:67;:::i;:::-;11445:74;;11528:93;11617:3;11528:93;:::i;:::-;11646:2;11641:3;11637:12;11630:19;;11289:366;;;:::o;11661:::-;11803:3;11824:67;11888:2;11883:3;11824:67;:::i;:::-;11817:74;;11900:93;11989:3;11900:93;:::i;:::-;12018:2;12013:3;12009:12;12002:19;;11661:366;;;:::o;12033:::-;12175:3;12196:67;12260:2;12255:3;12196:67;:::i;:::-;12189:74;;12272:93;12361:3;12272:93;:::i;:::-;12390:2;12385:3;12381:12;12374:19;;12033:366;;;:::o;12405:::-;12547:3;12568:67;12632:2;12627:3;12568:67;:::i;:::-;12561:74;;12644:93;12733:3;12644:93;:::i;:::-;12762:2;12757:3;12753:12;12746:19;;12405:366;;;:::o;12777:::-;12919:3;12940:67;13004:2;12999:3;12940:67;:::i;:::-;12933:74;;13016:93;13105:3;13016:93;:::i;:::-;13134:2;13129:3;13125:12;13118:19;;12777:366;;;:::o;13149:::-;13291:3;13312:67;13376:2;13371:3;13312:67;:::i;:::-;13305:74;;13388:93;13477:3;13388:93;:::i;:::-;13506:2;13501:3;13497:12;13490:19;;13149:366;;;:::o;13521:::-;13663:3;13684:67;13748:2;13743:3;13684:67;:::i;:::-;13677:74;;13760:93;13849:3;13760:93;:::i;:::-;13878:2;13873:3;13869:12;13862:19;;13521:366;;;:::o;13893:::-;14035:3;14056:67;14120:2;14115:3;14056:67;:::i;:::-;14049:74;;14132:93;14221:3;14132:93;:::i;:::-;14250:2;14245:3;14241:12;14234:19;;13893:366;;;:::o;14265:118::-;14352:24;14370:5;14352:24;:::i;:::-;14347:3;14340:37;14265:118;;:::o;14389:435::-;14569:3;14591:95;14682:3;14673:6;14591:95;:::i;:::-;14584:102;;14703:95;14794:3;14785:6;14703:95;:::i;:::-;14696:102;;14815:3;14808:10;;14389:435;;;;;:::o;14830:589::-;15055:3;15077:95;15168:3;15159:6;15077:95;:::i;:::-;15070:102;;15189:95;15280:3;15271:6;15189:95;:::i;:::-;15182:102;;15301:92;15389:3;15380:6;15301:92;:::i;:::-;15294:99;;15410:3;15403:10;;14830:589;;;;;;:::o;15425:222::-;15518:4;15556:2;15545:9;15541:18;15533:26;;15569:71;15637:1;15626:9;15622:17;15613:6;15569:71;:::i;:::-;15425:222;;;;:::o;15653:640::-;15848:4;15886:3;15875:9;15871:19;15863:27;;15900:71;15968:1;15957:9;15953:17;15944:6;15900:71;:::i;:::-;15981:72;16049:2;16038:9;16034:18;16025:6;15981:72;:::i;:::-;16063;16131:2;16120:9;16116:18;16107:6;16063:72;:::i;:::-;16182:9;16176:4;16172:20;16167:2;16156:9;16152:18;16145:48;16210:76;16281:4;16272:6;16210:76;:::i;:::-;16202:84;;15653:640;;;;;;;:::o;16299:553::-;16476:4;16514:3;16503:9;16499:19;16491:27;;16528:71;16596:1;16585:9;16581:17;16572:6;16528:71;:::i;:::-;16609:72;16677:2;16666:9;16662:18;16653:6;16609:72;:::i;:::-;16691;16759:2;16748:9;16744:18;16735:6;16691:72;:::i;:::-;16773;16841:2;16830:9;16826:18;16817:6;16773:72;:::i;:::-;16299:553;;;;;;;:::o;16858:423::-;16999:4;17037:2;17026:9;17022:18;17014:26;;17050:71;17118:1;17107:9;17103:17;17094:6;17050:71;:::i;:::-;17168:9;17162:4;17158:20;17153:2;17142:9;17138:18;17131:48;17196:78;17269:4;17260:6;17196:78;:::i;:::-;17188:86;;16858:423;;;;;:::o;17287:210::-;17374:4;17412:2;17401:9;17397:18;17389:26;;17425:65;17487:1;17476:9;17472:17;17463:6;17425:65;:::i;:::-;17287:210;;;;:::o;17503:313::-;17616:4;17654:2;17643:9;17639:18;17631:26;;17703:9;17697:4;17693:20;17689:1;17678:9;17674:17;17667:47;17731:78;17804:4;17795:6;17731:78;:::i;:::-;17723:86;;17503:313;;;;:::o;17822:419::-;17988:4;18026:2;18015:9;18011:18;18003:26;;18075:9;18069:4;18065:20;18061:1;18050:9;18046:17;18039:47;18103:131;18229:4;18103:131;:::i;:::-;18095:139;;17822:419;;;:::o;18247:::-;18413:4;18451:2;18440:9;18436:18;18428:26;;18500:9;18494:4;18490:20;18486:1;18475:9;18471:17;18464:47;18528:131;18654:4;18528:131;:::i;:::-;18520:139;;18247:419;;;:::o;18672:::-;18838:4;18876:2;18865:9;18861:18;18853:26;;18925:9;18919:4;18915:20;18911:1;18900:9;18896:17;18889:47;18953:131;19079:4;18953:131;:::i;:::-;18945:139;;18672:419;;;:::o;19097:::-;19263:4;19301:2;19290:9;19286:18;19278:26;;19350:9;19344:4;19340:20;19336:1;19325:9;19321:17;19314:47;19378:131;19504:4;19378:131;:::i;:::-;19370:139;;19097:419;;;:::o;19522:::-;19688:4;19726:2;19715:9;19711:18;19703:26;;19775:9;19769:4;19765:20;19761:1;19750:9;19746:17;19739:47;19803:131;19929:4;19803:131;:::i;:::-;19795:139;;19522:419;;;:::o;19947:::-;20113:4;20151:2;20140:9;20136:18;20128:26;;20200:9;20194:4;20190:20;20186:1;20175:9;20171:17;20164:47;20228:131;20354:4;20228:131;:::i;:::-;20220:139;;19947:419;;;:::o;20372:::-;20538:4;20576:2;20565:9;20561:18;20553:26;;20625:9;20619:4;20615:20;20611:1;20600:9;20596:17;20589:47;20653:131;20779:4;20653:131;:::i;:::-;20645:139;;20372:419;;;:::o;20797:::-;20963:4;21001:2;20990:9;20986:18;20978:26;;21050:9;21044:4;21040:20;21036:1;21025:9;21021:17;21014:47;21078:131;21204:4;21078:131;:::i;:::-;21070:139;;20797:419;;;:::o;21222:::-;21388:4;21426:2;21415:9;21411:18;21403:26;;21475:9;21469:4;21465:20;21461:1;21450:9;21446:17;21439:47;21503:131;21629:4;21503:131;:::i;:::-;21495:139;;21222:419;;;:::o;21647:::-;21813:4;21851:2;21840:9;21836:18;21828:26;;21900:9;21894:4;21890:20;21886:1;21875:9;21871:17;21864:47;21928:131;22054:4;21928:131;:::i;:::-;21920:139;;21647:419;;;:::o;22072:222::-;22165:4;22203:2;22192:9;22188:18;22180:26;;22216:71;22284:1;22273:9;22269:17;22260:6;22216:71;:::i;:::-;22072:222;;;;:::o;22300:129::-;22334:6;22361:20;;:::i;:::-;22351:30;;22390:33;22418:4;22410:6;22390:33;:::i;:::-;22300:129;;;:::o;22435:75::-;22468:6;22501:2;22495:9;22485:19;;22435:75;:::o;22516:307::-;22577:4;22667:18;22659:6;22656:30;22653:56;;;22689:18;;:::i;:::-;22653:56;22727:29;22749:6;22727:29;:::i;:::-;22719:37;;22811:4;22805;22801:15;22793:23;;22516:307;;;:::o;22829:308::-;22891:4;22981:18;22973:6;22970:30;22967:56;;;23003:18;;:::i;:::-;22967:56;23041:29;23063:6;23041:29;:::i;:::-;23033:37;;23125:4;23119;23115:15;23107:23;;22829:308;;;:::o;23143:141::-;23192:4;23215:3;23207:11;;23238:3;23235:1;23228:14;23272:4;23269:1;23259:18;23251:26;;23143:141;;;:::o;23290:98::-;23341:6;23375:5;23369:12;23359:22;;23290:98;;;:::o;23394:99::-;23446:6;23480:5;23474:12;23464:22;;23394:99;;;:::o;23499:168::-;23582:11;23616:6;23611:3;23604:19;23656:4;23651:3;23647:14;23632:29;;23499:168;;;;:::o;23673:169::-;23757:11;23791:6;23786:3;23779:19;23831:4;23826:3;23822:14;23807:29;;23673:169;;;;:::o;23848:148::-;23950:11;23987:3;23972:18;;23848:148;;;;:::o;24002:305::-;24042:3;24061:20;24079:1;24061:20;:::i;:::-;24056:25;;24095:20;24113:1;24095:20;:::i;:::-;24090:25;;24249:1;24181:66;24177:74;24174:1;24171:81;24168:107;;;24255:18;;:::i;:::-;24168:107;24299:1;24296;24292:9;24285:16;;24002:305;;;;:::o;24313:185::-;24353:1;24370:20;24388:1;24370:20;:::i;:::-;24365:25;;24404:20;24422:1;24404:20;:::i;:::-;24399:25;;24443:1;24433:35;;24448:18;;:::i;:::-;24433:35;24490:1;24487;24483:9;24478:14;;24313:185;;;;:::o;24504:348::-;24544:7;24567:20;24585:1;24567:20;:::i;:::-;24562:25;;24601:20;24619:1;24601:20;:::i;:::-;24596:25;;24789:1;24721:66;24717:74;24714:1;24711:81;24706:1;24699:9;24692:17;24688:105;24685:131;;;24796:18;;:::i;:::-;24685:131;24844:1;24841;24837:9;24826:20;;24504:348;;;;:::o;24858:191::-;24898:4;24918:20;24936:1;24918:20;:::i;:::-;24913:25;;24952:20;24970:1;24952:20;:::i;:::-;24947:25;;24991:1;24988;24985:8;24982:34;;;24996:18;;:::i;:::-;24982:34;25041:1;25038;25034:9;25026:17;;24858:191;;;;:::o;25055:96::-;25092:7;25121:24;25139:5;25121:24;:::i;:::-;25110:35;;25055:96;;;:::o;25157:90::-;25191:7;25234:5;25227:13;25220:21;25209:32;;25157:90;;;:::o;25253:149::-;25289:7;25329:66;25322:5;25318:78;25307:89;;25253:149;;;:::o;25408:126::-;25445:7;25485:42;25478:5;25474:54;25463:65;;25408:126;;;:::o;25540:77::-;25577:7;25606:5;25595:16;;25540:77;;;:::o;25623:154::-;25707:6;25702:3;25697;25684:30;25769:1;25760:6;25755:3;25751:16;25744:27;25623:154;;;:::o;25783:307::-;25851:1;25861:113;25875:6;25872:1;25869:13;25861:113;;;25960:1;25955:3;25951:11;25945:18;25941:1;25936:3;25932:11;25925:39;25897:2;25894:1;25890:10;25885:15;;25861:113;;;25992:6;25989:1;25986:13;25983:101;;;26072:1;26063:6;26058:3;26054:16;26047:27;25983:101;25832:258;25783:307;;;:::o;26096:320::-;26140:6;26177:1;26171:4;26167:12;26157:22;;26224:1;26218:4;26214:12;26245:18;26235:81;;26301:4;26293:6;26289:17;26279:27;;26235:81;26363:2;26355:6;26352:14;26332:18;26329:38;26326:84;;;26382:18;;:::i;:::-;26326:84;26147:269;26096:320;;;:::o;26422:281::-;26505:27;26527:4;26505:27;:::i;:::-;26497:6;26493:40;26635:6;26623:10;26620:22;26599:18;26587:10;26584:34;26581:62;26578:88;;;26646:18;;:::i;:::-;26578:88;26686:10;26682:2;26675:22;26465:238;26422:281;;:::o;26709:233::-;26748:3;26771:24;26789:5;26771:24;:::i;:::-;26762:33;;26817:66;26810:5;26807:77;26804:103;;;26887:18;;:::i;:::-;26804:103;26934:1;26927:5;26923:13;26916:20;;26709:233;;;:::o;26948:176::-;26980:1;26997:20;27015:1;26997:20;:::i;:::-;26992:25;;27031:20;27049:1;27031:20;:::i;:::-;27026:25;;27070:1;27060:35;;27075:18;;:::i;:::-;27060:35;27116:1;27113;27109:9;27104:14;;26948:176;;;;:::o;27130:180::-;27178:77;27175:1;27168:88;27275:4;27272:1;27265:15;27299:4;27296:1;27289:15;27316:180;27364:77;27361:1;27354:88;27461:4;27458:1;27451:15;27485:4;27482:1;27475:15;27502:180;27550:77;27547:1;27540:88;27647:4;27644:1;27637:15;27671:4;27668:1;27661:15;27688:180;27736:77;27733:1;27726:88;27833:4;27830:1;27823:15;27857:4;27854:1;27847:15;27874:180;27922:77;27919:1;27912:88;28019:4;28016:1;28009:15;28043:4;28040:1;28033:15;28060:117;28169:1;28166;28159:12;28183:117;28292:1;28289;28282:12;28306:117;28415:1;28412;28405:12;28429:117;28538:1;28535;28528:12;28552:102;28593:6;28644:2;28640:7;28635:2;28628:5;28624:14;28620:28;28610:38;;28552:102;;;:::o;28660:177::-;28800:29;28796:1;28788:6;28784:14;28777:53;28660:177;:::o;28843:225::-;28983:34;28979:1;28971:6;28967:14;28960:58;29052:8;29047:2;29039:6;29035:15;29028:33;28843:225;:::o;29074:178::-;29214:30;29210:1;29202:6;29198:14;29191:54;29074:178;:::o;29258:166::-;29398:18;29394:1;29386:6;29382:14;29375:42;29258:166;:::o;29430:171::-;29570:23;29566:1;29558:6;29554:14;29547:47;29430:171;:::o;29607:179::-;29747:31;29743:1;29735:6;29731:14;29724:55;29607:179;:::o;29792:182::-;29932:34;29928:1;29920:6;29916:14;29909:58;29792:182;:::o;29980:234::-;30120:34;30116:1;30108:6;30104:14;30097:58;30189:17;30184:2;30176:6;30172:15;30165:42;29980:234;:::o;30220:171::-;30360:23;30356:1;30348:6;30344:14;30337:47;30220:171;:::o;30397:226::-;30537:34;30533:1;30525:6;30521:14;30514:58;30606:9;30601:2;30593:6;30589:15;30582:34;30397:226;:::o;30629:122::-;30702:24;30720:5;30702:24;:::i;:::-;30695:5;30692:35;30682:63;;30741:1;30738;30731:12;30682:63;30629:122;:::o;30757:116::-;30827:21;30842:5;30827:21;:::i;:::-;30820:5;30817:32;30807:60;;30863:1;30860;30853:12;30807:60;30757:116;:::o;30879:120::-;30951:23;30968:5;30951:23;:::i;:::-;30944:5;30941:34;30931:62;;30989:1;30986;30979:12;30931:62;30879:120;:::o;31005:122::-;31078:24;31096:5;31078:24;:::i;:::-;31071:5;31068:35;31058:63;;31117:1;31114;31107:12;31058:63;31005:122;:::o

Swarm Source

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