ETH Price: $3,314.11 (-3.49%)
Gas: 21 Gwei

Token

Capeverse (Capeverse)
 

Overview

Max Total Supply

1,223 Capeverse

Holders

373

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Capeverse
0xf55516ab2c105e440d77b9092b4813c0e4c3f3f1
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

In a Land Far Far away, where Apes have evolved to their environmental surroundings... exists... The Capeverse! The Capeverse is a collection of 5551 Capeverse Apes from 7 unique regions: Banana Paradise, Strangetown, The Wasteland, Sandy Landing, Mysterious Meadows, Icy Hill...

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Capeverse

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol


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

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: capeverse.sol


pragma solidity 0.8.7;





contract Capeverse is ERC721, Ownable, ReentrancyGuard {

    using Address for address;
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdTracker;

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

    uint256 public presaleMintPrice = 0.01 ether;
    uint256 public mintPrice = 0.029 ether;
    uint256 public maxSupply = 5551;

    uint256 internal constant icyHills = 793;
    uint256 public totalMintedIcy = 0;

    uint256 internal constant bananaParadise = 1586;
    uint256 public totalMintedBanana = 793;

    uint256 internal constant mysteriousMeadows = 2379;
    uint256 public totalMintedMeadows = 1586;

    uint256 internal constant sandyLanding = 3172;
    uint256 public totalMintedSandy = 2379;

    uint256 internal constant strangeTown = 3965;
    uint256 public totalMintedStrange = 3172;

    uint256 internal constant hellishHollows = 4758;
    uint256 public totalMintedHollows = 3965;
    
    uint256 internal constant theWasteLand = 5551;
    uint256 public totalMintedWaste = 4758;

    mapping(uint256 => bool) public coolApeMinted;
    IERC721 public coolApeClub = IERC721(0x01A6FA5769b13302E82F1385e18BAEf7e913d0a7);

    bool public whitelistOpen = true;

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

    // ===== Modifier =====
    function _onlySender() private view {
        require(msg.sender == tx.origin);
    }

    modifier onlySender {
        _onlySender();
        _;
    }

    modifier whitelistIsOpen {
        require(whitelistOpen == true);
        _;
    }

    modifier whitelistIsClosed {
        require(whitelistOpen == false);
        _;
    }

    function flipSale() public onlyOwner
    {
        whitelistOpen = !whitelistOpen;
    }

    function changePresalePrice(uint256 newPrice) public onlyOwner
    {
        presaleMintPrice = (newPrice * 10 ** 18);
    }

    function changeMainsalePrice(uint256 newPrice) public onlyOwner
    {
        mintPrice = (newPrice * 10 ** 18);
    }

    function coolApeMint(uint256 islandNumber, uint256[] memory tokenIds, uint256 amountToMint) public payable nonReentrant onlySender whitelistIsOpen
    {      
        require(msg.value >= (presaleMintPrice * amountToMint), "Minting a NFT Costs 0.01 Ether Each!");
        require(tokenIds.length == amountToMint);

        for(uint256 i=0;i<tokenIds.length; i++)
        {
            require(coolApeClub.ownerOf(tokenIds[i]) == msg.sender);
            require(coolApeMinted[tokenIds[i]] == false);
        }

        if(islandNumber == 1)
        {
            require((totalMintedIcy + amountToMint) <= icyHills);
            for(uint256 i=0;i<amountToMint;i++)
            {
                _tokenIdTracker.increment();
                totalMintedIcy++;
                _safeMint(msg.sender, totalMintedIcy);
            }
        }
        else if(islandNumber == 2)
        {
            require((totalMintedBanana + amountToMint) <= bananaParadise);
            for(uint256 i=0;i<amountToMint;i++)
            {
                _tokenIdTracker.increment();
                totalMintedBanana++;
                _safeMint(msg.sender, totalMintedBanana);
            }
        }
        else if(islandNumber == 3)
        {
            require((totalMintedMeadows + amountToMint) <= mysteriousMeadows);
            for(uint256 i=0;i<amountToMint;i++)
            {
                _tokenIdTracker.increment();
                totalMintedMeadows++;
                _safeMint(msg.sender, totalMintedMeadows);
            }
        }
        else if(islandNumber == 4)
        {
            require((totalMintedSandy + amountToMint) <= sandyLanding);
            for(uint256 i=0;i<amountToMint;i++)
            {
                _tokenIdTracker.increment();
                totalMintedSandy++;
                _safeMint(msg.sender, totalMintedSandy);
            }
        }
        else if(islandNumber == 5)
        {
            require((totalMintedStrange + amountToMint) <= strangeTown);
            for(uint256 i=0;i<amountToMint;i++)
            {
                _tokenIdTracker.increment();
                totalMintedStrange++;
                _safeMint(msg.sender, totalMintedStrange);
            }
        }
        else if(islandNumber == 6)
        {
            require((totalMintedHollows + amountToMint) <= hellishHollows);
            for(uint256 i=0;i<amountToMint;i++)
            {
                _tokenIdTracker.increment();
                totalMintedHollows++;
                _safeMint(msg.sender, totalMintedHollows);
            }
        }
        else if(islandNumber == 7)
        {
            require((totalMintedWaste + amountToMint) <= theWasteLand);
            for(uint256 i=0;i<amountToMint;i++)
            {
                _tokenIdTracker.increment();
                totalMintedWaste++;
                _safeMint(msg.sender, totalMintedWaste);
            }
        }

        for(uint256 i=0;i<tokenIds.length; i++)
        {
            coolApeMinted[tokenIds[i]] = true;
        }

    }

    function publicMint(uint256 islandNumber, uint256 amountToMint) public payable nonReentrant onlySender whitelistIsClosed
    {      
        require(msg.value >= (mintPrice * amountToMint), "Minting a NFT Costs 0.029 Ether Each!");

        if(islandNumber == 1)
        {
            require((totalMintedIcy + amountToMint) <= icyHills);
            for(uint256 i=0;i<amountToMint;i++)
            {
                
                _tokenIdTracker.increment();
                totalMintedIcy++;
                _safeMint(msg.sender, totalMintedIcy);
            }
        }
        else if(islandNumber == 2)
        {
            require((totalMintedBanana + amountToMint) <= bananaParadise);
            for(uint256 i=0;i<amountToMint;i++)
            {
                
                _tokenIdTracker.increment();
                totalMintedBanana++;
                _safeMint(msg.sender, totalMintedBanana);
            }
        }
        else if(islandNumber == 3)
        {
            require((totalMintedMeadows + amountToMint) <= mysteriousMeadows);
            for(uint256 i=0;i<amountToMint;i++)
            {
                
                _tokenIdTracker.increment();
                totalMintedMeadows++;
                _safeMint(msg.sender, totalMintedMeadows);
            }
        }
        else if(islandNumber == 4)
        {
            require((totalMintedSandy + amountToMint) <= sandyLanding);
            for(uint256 i=0;i<amountToMint;i++)
            {
                
                _tokenIdTracker.increment();
                totalMintedSandy++;
                _safeMint(msg.sender, totalMintedSandy);
            }
        }
        else if(islandNumber == 5)
        {
            require((totalMintedStrange + amountToMint) <= strangeTown);
            for(uint256 i=0;i<amountToMint;i++)
            {
                
                _tokenIdTracker.increment();
                totalMintedStrange++;
                _safeMint(msg.sender, totalMintedStrange);
            }
        }
        else if(islandNumber == 6)
        {
            require((totalMintedHollows + amountToMint) <= hellishHollows);
            for(uint256 i=0;i<amountToMint;i++)
            {
                
                _tokenIdTracker.increment();
                totalMintedHollows++;
                _safeMint(msg.sender, totalMintedHollows);
            }
        }
        else if(islandNumber == 7)
        {
            require((totalMintedWaste + amountToMint) <= theWasteLand);
            for(uint256 i=0;i<amountToMint;i++)
            {
                
                _tokenIdTracker.increment();
                totalMintedWaste++;
                _safeMint(msg.sender, totalMintedWaste);
            }
        }


    }

    function _withdraw(address payable address_, uint256 amount_) internal {
        (bool success, ) = payable(address_).call{value: amount_}("");
        require(success, "Transfer failed");
    }

    function withdrawEther() external onlyOwner {
        _withdraw(payable(msg.sender), address(this).balance);
    }

    function withdrawEtherTo(address payable to_) external onlyOwner {
        _withdraw(to_, address(this).balance);
    }
    
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }   
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
    {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : "";
    }
    function totalSupply() public view returns (uint256) {
            return _tokenIdTracker.current();
    }


    function walletOfOwner(address address_) public virtual view returns (uint256[] memory) {
        uint256 _balance = balanceOf(address_);
        uint256[] memory _tokens = new uint256[] (_balance);
        uint256 _index;
        uint256 _loopThrough = totalSupply();
        for (uint256 i = 0; i < _loopThrough; i++) {
            bool _exists = _exists(i);
            if (_exists) {
                if (ownerOf(i) == address_) { _tokens[_index] = i; _index++; }
            }
            else if (!_exists && _tokens[_balance - 1] == 0) { _loopThrough++; }
        }
        return _tokens;
    }

    function walletOfOwnerApes(address address_) public view returns (uint256[] memory) {
        uint256 _balance = coolApeClub.balanceOf(address_);
        if (_balance == 0) return new uint256[](0);

        uint256[] memory _tokens = new uint256[] (_balance);
        uint256 _index;

        for (uint256 i = 0; i < 5555; i++) {
            if (coolApeClub.ownerOf(i) == address_) {
                _tokens[_index] = i; _index++;
            }
        }
        return _tokens;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeMainsalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolApeClub","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"islandNumber","type":"uint256"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"amountToMint","type":"uint256"}],"name":"coolApeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"coolApeMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"presaleMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"islandNumber","type":"uint256"},{"internalType":"uint256","name":"amountToMint","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"totalMintedBanana","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedHollows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedIcy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedMeadows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedSandy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedStrange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedWaste","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwnerApes","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to_","type":"address"}],"name":"withdrawEtherTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600a919062000221565b50662386f26fc10000600b5566670758aa7c8000600c556115af600d556000600e55610319600f5561063260105561094b601155610c64601255610f7d601355611296601455601680546001600160a81b031916740101a6fa5769b13302e82f1385e18baef7e913d0a7179055348015620000a257600080fd5b50604051620030f8380380620030f8833981016040819052620000c591620002c7565b60408051808201825260098082526843617065766572736560b81b602080840182815285518087019096529285528401528151919291620001099160009162000221565b5080516200011f90600190602084019062000221565b5050506200013c620001366200015360201b60201c565b62000157565b60016007556200014c81620001a9565b50620003f6565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620002085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b80516200021d90600990602084019062000221565b5050565b8280546200022f90620003a3565b90600052602060002090601f0160209004810192826200025357600085556200029e565b82601f106200026e57805160ff19168380011785556200029e565b828001600101855582156200029e579182015b828111156200029e57825182559160200191906001019062000281565b50620002ac929150620002b0565b5090565b5b80821115620002ac5760008155600101620002b1565b60006020808385031215620002db57600080fd5b82516001600160401b0380821115620002f357600080fd5b818501915085601f8301126200030857600080fd5b8151818111156200031d576200031d620003e0565b604051601f8201601f19908116603f01168101908382118183101715620003485762000348620003e0565b8160405282815288868487010111156200036157600080fd5b600093505b8284101562000385578484018601518185018701529285019262000366565b82841115620003975760008684830101525b98975050505050505050565b600181811c90821680620003b857607f821691505b60208210811415620003da57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612cf280620004066000396000f3fe6080604052600436106102515760003560e01c80637ba5e62111610139578063b0cb6a1e116100b6578063cd4ce9f51161007a578063cd4ce9f514610674578063d49ac69f1461068a578063d5abeb01146106a0578063e985e9c5146106b6578063f01612b8146106ff578063f2fde38b1461072f57600080fd5b8063b0cb6a1e146105ec578063b88d4fde1461060c578063c66828621461062c578063c87b56dd14610641578063cc31e2831461066157600080fd5b806398ae99a8116100fd57806398ae99a81461056d57806398cf2bce1461058057806399d6cdd614610596578063a22cb465146105b6578063ade76307146105d657600080fd5b80637ba5e621146104e45780637db3aecc146104f95780638606d9381461051a5780638da5cb5b1461053a57806395d89b411461055857600080fd5b8063438b6300116101d25780636c0360eb116101965780636c0360eb1461044f57806370a0823114610464578063715018a6146104845780637362377b146104995780637817af5a146104ae5780637b113388146104c457600080fd5b8063438b6300146103b657806355f804b3146103e35780635be50521146104035780636352211e146104195780636817c76c1461043957600080fd5b806318160ddd1161021957806318160ddd146103275780631f653e791461034a57806323b872dd146103605780633248b0681461038057806342842e0e1461039657600080fd5b806301ffc9a71461025657806306fdde031461028b57806307fa40e4146102ad578063081812fc146102cf578063095ea7b314610307575b600080fd5b34801561026257600080fd5b5061027661027136600461271c565b61074f565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107a1565b6040516102829190612a25565b3480156102b957600080fd5b506102cd6102c8366004612589565b610833565b005b3480156102db57600080fd5b506102ef6102ea36600461279f565b610873565b6040516001600160a01b039091168152602001610282565b34801561031357600080fd5b506102cd6103223660046126f0565b610908565b34801561033357600080fd5b5061033c610a1e565b604051908152602001610282565b34801561035657600080fd5b5061033c600e5481565b34801561036c57600080fd5b506102cd61037b3660046125fc565b610a2e565b34801561038c57600080fd5b5061033c600f5481565b3480156103a257600080fd5b506102cd6103b13660046125fc565b610a5f565b3480156103c257600080fd5b506103d66103d1366004612589565b610a7a565b60405161028291906129e1565b3480156103ef57600080fd5b506102cd6103fe366004612756565b610bbd565b34801561040f57600080fd5b5061033c600b5481565b34801561042557600080fd5b506102ef61043436600461279f565b610bfe565b34801561044557600080fd5b5061033c600c5481565b34801561045b57600080fd5b506102a0610c75565b34801561047057600080fd5b5061033c61047f366004612589565b610d03565b34801561049057600080fd5b506102cd610d8a565b3480156104a557600080fd5b506102cd610dc0565b3480156104ba57600080fd5b5061033c60145481565b3480156104d057600080fd5b506103d66104df366004612589565b610df4565b3480156104f057600080fd5b506102cd610fbd565b34801561050557600080fd5b5060165461027690600160a01b900460ff1681565b34801561052657600080fd5b506102cd61053536600461279f565b611008565b34801561054657600080fd5b506006546001600160a01b03166102ef565b34801561056457600080fd5b506102a061104a565b6102cd61057b366004612892565b611059565b34801561058c57600080fd5b5061033c60115481565b3480156105a257600080fd5b506102cd6105b136600461279f565b611463565b3480156105c257600080fd5b506102cd6105d13660046126bd565b6114a5565b3480156105e257600080fd5b5061033c60105481565b3480156105f857600080fd5b506016546102ef906001600160a01b031681565b34801561061857600080fd5b506102cd61062736600461263d565b6114b0565b34801561063857600080fd5b506102a06114e8565b34801561064d57600080fd5b506102a061065c36600461279f565b6114f5565b6102cd61066f3660046127d1565b6115d3565b34801561068057600080fd5b5061033c60125481565b34801561069657600080fd5b5061033c60135481565b3480156106ac57600080fd5b5061033c600d5481565b3480156106c257600080fd5b506102766106d13660046125c3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b5061027661071a36600461279f565b60156020526000908152604090205460ff1681565b34801561073b57600080fd5b506102cd61074a366004612589565b611b61565b60006001600160e01b031982166380ac58cd60e01b148061078057506001600160e01b03198216635b5e139f60e01b145b8061079b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107b090612bcf565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612bcf565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b6006546001600160a01b031633146108665760405162461bcd60e51b815260040161085d90612a8a565b60405180910390fd5b6108708147611bf9565b50565b6000818152600260205260408120546001600160a01b03166108ec5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161085d565b506000908152600460205260409020546001600160a01b031690565b600061091382610bfe565b9050806001600160a01b0316836001600160a01b031614156109815760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161085d565b336001600160a01b038216148061099d575061099d81336106d1565b610a0f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161085d565b610a198383611c8e565b505050565b6000610a2960085490565b905090565b610a383382611cfc565b610a545760405162461bcd60e51b815260040161085d90612abf565b610a19838383611df3565b610a19838383604051806020016040528060008152506114b0565b60606000610a8783610d03565b905060008167ffffffffffffffff811115610aa457610aa4612c7b565b604051908082528060200260200182016040528015610acd578160200160208202803683370190505b509050600080610adb610a1e565b905060005b81811015610bb2576000818152600260205260409020546001600160a01b031615801590610b5b57876001600160a01b0316610b1b83610bfe565b6001600160a01b03161415610b565781858581518110610b3d57610b3d612c65565b602090810291909101015283610b5281612c0a565b9450505b610b9f565b80158015610b8c575084610b70600188612b8c565b81518110610b8057610b80612c65565b60200260200101516000145b15610b9f5782610b9b81612c0a565b9350505b5080610baa81612c0a565b915050610ae0565b509195945050505050565b6006546001600160a01b03163314610be75760405162461bcd60e51b815260040161085d90612a8a565b8051610bfa906009906020840190612498565b5050565b6000818152600260205260408120546001600160a01b03168061079b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161085d565b60098054610c8290612bcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610cae90612bcf565b8015610cfb5780601f10610cd057610100808354040283529160200191610cfb565b820191906000526020600020905b815481529060010190602001808311610cde57829003601f168201915b505050505081565b60006001600160a01b038216610d6e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161085d565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610db45760405162461bcd60e51b815260040161085d90612a8a565b610dbe6000611f8f565b565b6006546001600160a01b03163314610dea5760405162461bcd60e51b815260040161085d90612a8a565b610dbe3347611bf9565b6016546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b158015610e3e57600080fd5b505afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7691906127b8565b905080610e93575050604080516000815260208101909152919050565b60008167ffffffffffffffff811115610eae57610eae612c7b565b604051908082528060200260200182016040528015610ed7578160200160208202803683370190505b5090506000805b6115b3811015610fb3576016546040516331a9108f60e11b8152600481018390526001600160a01b03888116921690636352211e9060240160206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6691906125a6565b6001600160a01b03161415610fa15780838381518110610f8857610f88612c65565b602090810291909101015281610f9d81612c0a565b9250505b80610fab81612c0a565b915050610ede565b5090949350505050565b6006546001600160a01b03163314610fe75760405162461bcd60e51b815260040161085d90612a8a565b6016805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6006546001600160a01b031633146110325760405162461bcd60e51b815260040161085d90612a8a565b61104481670de0b6b3a7640000612b6d565b600b5550565b6060600180546107b090612bcf565b600260075414156110ac5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161085d565b60026007556110b9611fe1565b601654600160a01b900460ff16156110d057600080fd5b80600c546110de9190612b6d565b34101561113b5760405162461bcd60e51b815260206004820152602560248201527f4d696e74696e672061204e465420436f73747320302e30323920457468657220604482015264456163682160d81b606482015260840161085d565b81600114156111b25761031981600e546111559190612b41565b111561116057600080fd5b60005b818110156111ac57611179600880546001019055565b600e805490600061118983612c0a565b919050555061119a33600e54611fed565b806111a481612c0a565b915050611163565b5061145a565b81600214156112235761063281600f546111cc9190612b41565b11156111d757600080fd5b60005b818110156111ac576111f0600880546001019055565b600f805490600061120083612c0a565b919050555061121133600f54611fed565b8061121b81612c0a565b9150506111da565b81600314156112945761094b8160105461123d9190612b41565b111561124857600080fd5b60005b818110156111ac57611261600880546001019055565b6010805490600061127183612c0a565b919050555061128233601054611fed565b8061128c81612c0a565b91505061124b565b816004141561130557610c64816011546112ae9190612b41565b11156112b957600080fd5b60005b818110156111ac576112d2600880546001019055565b601180549060006112e283612c0a565b91905055506112f333601154611fed565b806112fd81612c0a565b9150506112bc565b816005141561137657610f7d8160125461131f9190612b41565b111561132a57600080fd5b60005b818110156111ac57611343600880546001019055565b6012805490600061135383612c0a565b919050555061136433601254611fed565b8061136e81612c0a565b91505061132d565b81600614156113e757611296816013546113909190612b41565b111561139b57600080fd5b60005b818110156111ac576113b4600880546001019055565b601380549060006113c483612c0a565b91905055506113d533601354611fed565b806113df81612c0a565b91505061139e565b816007141561145a576115af816014546114019190612b41565b111561140c57600080fd5b60005b8181101561145857611425600880546001019055565b6014805490600061143583612c0a565b919050555061144633601454611fed565b8061145081612c0a565b91505061140f565b505b50506001600755565b6006546001600160a01b0316331461148d5760405162461bcd60e51b815260040161085d90612a8a565b61149f81670de0b6b3a7640000612b6d565b600c5550565b610bfa338383612007565b6114ba3383611cfc565b6114d65760405162461bcd60e51b815260040161085d90612abf565b6114e2848484846120d6565b50505050565b600a8054610c8290612bcf565b6000818152600260205260409020546060906001600160a01b03166115745760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161085d565b600061157e612109565b9050600081511161159e57604051806020016040528060008152506115cc565b806115a884612118565b600a6040516020016115bc939291906128e0565b6040516020818303038152906040525b9392505050565b600260075414156116265760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161085d565b6002600755611633611fe1565b601654600160a01b900460ff16151560011461164e57600080fd5b80600b5461165c9190612b6d565b3410156116b75760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e672061204e465420436f73747320302e303120457468657220456044820152636163682160e01b606482015260840161085d565b808251146116c457600080fd5b60005b82518110156117d257601654835133916001600160a01b031690636352211e908690859081106116f9576116f9612c65565b60200260200101516040518263ffffffff1660e01b815260040161171f91815260200190565b60206040518083038186803b15801561173757600080fd5b505afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906125a6565b6001600160a01b03161461178257600080fd5b6015600084838151811061179857611798612c65565b60209081029190910181015182528101919091526040016000205460ff16156117c057600080fd5b806117ca81612c0a565b9150506116c7565b50826001141561184a5761031981600e546117ed9190612b41565b11156117f857600080fd5b60005b8181101561184457611811600880546001019055565b600e805490600061182183612c0a565b919050555061183233600e54611fed565b8061183c81612c0a565b9150506117fb565b50611af2565b82600214156118bb5761063281600f546118649190612b41565b111561186f57600080fd5b60005b8181101561184457611888600880546001019055565b600f805490600061189883612c0a565b91905055506118a933600f54611fed565b806118b381612c0a565b915050611872565b826003141561192c5761094b816010546118d59190612b41565b11156118e057600080fd5b60005b81811015611844576118f9600880546001019055565b6010805490600061190983612c0a565b919050555061191a33601054611fed565b8061192481612c0a565b9150506118e3565b826004141561199d57610c64816011546119469190612b41565b111561195157600080fd5b60005b818110156118445761196a600880546001019055565b6011805490600061197a83612c0a565b919050555061198b33601154611fed565b8061199581612c0a565b915050611954565b8260051415611a0e57610f7d816012546119b79190612b41565b11156119c257600080fd5b60005b81811015611844576119db600880546001019055565b601280549060006119eb83612c0a565b91905055506119fc33601254611fed565b80611a0681612c0a565b9150506119c5565b8260061415611a7f5761129681601354611a289190612b41565b1115611a3357600080fd5b60005b8181101561184457611a4c600880546001019055565b60138054906000611a5c83612c0a565b9190505550611a6d33601354611fed565b80611a7781612c0a565b915050611a36565b8260071415611af2576115af81601454611a999190612b41565b1115611aa457600080fd5b60005b81811015611af057611abd600880546001019055565b60148054906000611acd83612c0a565b9190505550611ade33601454611fed565b80611ae881612c0a565b915050611aa7565b505b60005b8251811015611b5657600160156000858481518110611b1657611b16612c65565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b4e90612c0a565b915050611af5565b505060016007555050565b6006546001600160a01b03163314611b8b5760405162461bcd60e51b815260040161085d90612a8a565b6001600160a01b038116611bf05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161085d565b61087081611f8f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c46576040519150601f19603f3d011682016040523d82523d6000602084013e611c4b565b606091505b5050905080610a195760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161085d565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611cc382610bfe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611d755760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161085d565b6000611d8083610bfe565b9050806001600160a01b0316846001600160a01b03161480611dbb5750836001600160a01b0316611db084610873565b6001600160a01b0316145b80611deb57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e0682610bfe565b6001600160a01b031614611e6a5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161085d565b6001600160a01b038216611ecc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161085d565b611ed7600082611c8e565b6001600160a01b0383166000908152600360205260408120805460019290611f00908490612b8c565b90915550506001600160a01b0382166000908152600360205260408120805460019290611f2e908490612b41565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b333214610dbe57600080fd5b610bfa828260405180602001604052806000815250612216565b816001600160a01b0316836001600160a01b031614156120695760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161085d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6120e1848484611df3565b6120ed84848484612249565b6114e25760405162461bcd60e51b815260040161085d90612a38565b6060600980546107b090612bcf565b60608161213c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612166578061215081612c0a565b915061215f9050600a83612b59565b9150612140565b60008167ffffffffffffffff81111561218157612181612c7b565b6040519080825280601f01601f1916602001820160405280156121ab576020820181803683370190505b5090505b8415611deb576121c0600183612b8c565b91506121cd600a86612c25565b6121d8906030612b41565b60f81b8183815181106121ed576121ed612c65565b60200101906001600160f81b031916908160001a90535061220f600a86612b59565b94506121af565b6122208383612356565b61222d6000848484612249565b610a195760405162461bcd60e51b815260040161085d90612a38565b60006001600160a01b0384163b1561234b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061228d9033908990889088906004016129a4565b602060405180830381600087803b1580156122a757600080fd5b505af19250505080156122d7575060408051601f3d908101601f191682019092526122d491810190612739565b60015b612331573d808015612305576040519150601f19603f3d011682016040523d82523d6000602084013e61230a565b606091505b5080516123295760405162461bcd60e51b815260040161085d90612a38565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611deb565b506001949350505050565b6001600160a01b0382166123ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161085d565b6000818152600260205260409020546001600160a01b0316156124115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161085d565b6001600160a01b038216600090815260036020526040812080546001929061243a908490612b41565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546124a490612bcf565b90600052602060002090601f0160209004810192826124c6576000855561250c565b82601f106124df57805160ff191683800117855561250c565b8280016001018555821561250c579182015b8281111561250c5782518255916020019190600101906124f1565b5061251892915061251c565b5090565b5b80821115612518576000815560010161251d565b600067ffffffffffffffff83111561254b5761254b612c7b565b61255e601f8401601f1916602001612b10565b905082815283838301111561257257600080fd5b828260208301376000602084830101529392505050565b60006020828403121561259b57600080fd5b81356115cc81612c91565b6000602082840312156125b857600080fd5b81516115cc81612c91565b600080604083850312156125d657600080fd5b82356125e181612c91565b915060208301356125f181612c91565b809150509250929050565b60008060006060848603121561261157600080fd5b833561261c81612c91565b9250602084013561262c81612c91565b929592945050506040919091013590565b6000806000806080858703121561265357600080fd5b843561265e81612c91565b9350602085013561266e81612c91565b925060408501359150606085013567ffffffffffffffff81111561269157600080fd5b8501601f810187136126a257600080fd5b6126b187823560208401612531565b91505092959194509250565b600080604083850312156126d057600080fd5b82356126db81612c91565b9150602083013580151581146125f157600080fd5b6000806040838503121561270357600080fd5b823561270e81612c91565b946020939093013593505050565b60006020828403121561272e57600080fd5b81356115cc81612ca6565b60006020828403121561274b57600080fd5b81516115cc81612ca6565b60006020828403121561276857600080fd5b813567ffffffffffffffff81111561277f57600080fd5b8201601f8101841361279057600080fd5b611deb84823560208401612531565b6000602082840312156127b157600080fd5b5035919050565b6000602082840312156127ca57600080fd5b5051919050565b6000806000606084860312156127e657600080fd5b8335925060208085013567ffffffffffffffff8082111561280657600080fd5b818701915087601f83011261281a57600080fd5b81358181111561282c5761282c612c7b565b8060051b915061283d848301612b10565b8181528481019084860184860187018c101561285857600080fd5b600095505b8386101561287b57803583526001959095019491860191860161285d565b50979a979950505050604095909501359450505050565b600080604083850312156128a557600080fd5b50508035926020909101359150565b600081518084526128cc816020860160208601612ba3565b601f01601f19169290920160200192915050565b6000845160206128f38285838a01612ba3565b8551918401916129068184848a01612ba3565b8554920191600090600181811c908083168061292357607f831692505b85831081141561294157634e487b7160e01b85526022600452602485fd5b808015612955576001811461296657612993565b60ff19851688528388019550612993565b60008b81526020902060005b8581101561298b5781548a820152908401908801612972565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129d7908301846128b4565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612a19578351835292840192918401916001016129fd565b50909695505050505050565b6020815260006115cc60208301846128b4565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b3957612b39612c7b565b604052919050565b60008219821115612b5457612b54612c39565b500190565b600082612b6857612b68612c4f565b500490565b6000816000190483118215151615612b8757612b87612c39565b500290565b600082821015612b9e57612b9e612c39565b500390565b60005b83811015612bbe578181015183820152602001612ba6565b838111156114e25750506000910152565b600181811c90821680612be357607f821691505b60208210811415612c0457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c1e57612c1e612c39565b5060010190565b600082612c3457612c34612c4f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461087057600080fd5b6001600160e01b03198116811461087057600080fdfea26469706673582212204b771e385df69615d6c65abe8e9087535a9e988ab461485791af350c8d0b668564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c80637ba5e62111610139578063b0cb6a1e116100b6578063cd4ce9f51161007a578063cd4ce9f514610674578063d49ac69f1461068a578063d5abeb01146106a0578063e985e9c5146106b6578063f01612b8146106ff578063f2fde38b1461072f57600080fd5b8063b0cb6a1e146105ec578063b88d4fde1461060c578063c66828621461062c578063c87b56dd14610641578063cc31e2831461066157600080fd5b806398ae99a8116100fd57806398ae99a81461056d57806398cf2bce1461058057806399d6cdd614610596578063a22cb465146105b6578063ade76307146105d657600080fd5b80637ba5e621146104e45780637db3aecc146104f95780638606d9381461051a5780638da5cb5b1461053a57806395d89b411461055857600080fd5b8063438b6300116101d25780636c0360eb116101965780636c0360eb1461044f57806370a0823114610464578063715018a6146104845780637362377b146104995780637817af5a146104ae5780637b113388146104c457600080fd5b8063438b6300146103b657806355f804b3146103e35780635be50521146104035780636352211e146104195780636817c76c1461043957600080fd5b806318160ddd1161021957806318160ddd146103275780631f653e791461034a57806323b872dd146103605780633248b0681461038057806342842e0e1461039657600080fd5b806301ffc9a71461025657806306fdde031461028b57806307fa40e4146102ad578063081812fc146102cf578063095ea7b314610307575b600080fd5b34801561026257600080fd5b5061027661027136600461271c565b61074f565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a06107a1565b6040516102829190612a25565b3480156102b957600080fd5b506102cd6102c8366004612589565b610833565b005b3480156102db57600080fd5b506102ef6102ea36600461279f565b610873565b6040516001600160a01b039091168152602001610282565b34801561031357600080fd5b506102cd6103223660046126f0565b610908565b34801561033357600080fd5b5061033c610a1e565b604051908152602001610282565b34801561035657600080fd5b5061033c600e5481565b34801561036c57600080fd5b506102cd61037b3660046125fc565b610a2e565b34801561038c57600080fd5b5061033c600f5481565b3480156103a257600080fd5b506102cd6103b13660046125fc565b610a5f565b3480156103c257600080fd5b506103d66103d1366004612589565b610a7a565b60405161028291906129e1565b3480156103ef57600080fd5b506102cd6103fe366004612756565b610bbd565b34801561040f57600080fd5b5061033c600b5481565b34801561042557600080fd5b506102ef61043436600461279f565b610bfe565b34801561044557600080fd5b5061033c600c5481565b34801561045b57600080fd5b506102a0610c75565b34801561047057600080fd5b5061033c61047f366004612589565b610d03565b34801561049057600080fd5b506102cd610d8a565b3480156104a557600080fd5b506102cd610dc0565b3480156104ba57600080fd5b5061033c60145481565b3480156104d057600080fd5b506103d66104df366004612589565b610df4565b3480156104f057600080fd5b506102cd610fbd565b34801561050557600080fd5b5060165461027690600160a01b900460ff1681565b34801561052657600080fd5b506102cd61053536600461279f565b611008565b34801561054657600080fd5b506006546001600160a01b03166102ef565b34801561056457600080fd5b506102a061104a565b6102cd61057b366004612892565b611059565b34801561058c57600080fd5b5061033c60115481565b3480156105a257600080fd5b506102cd6105b136600461279f565b611463565b3480156105c257600080fd5b506102cd6105d13660046126bd565b6114a5565b3480156105e257600080fd5b5061033c60105481565b3480156105f857600080fd5b506016546102ef906001600160a01b031681565b34801561061857600080fd5b506102cd61062736600461263d565b6114b0565b34801561063857600080fd5b506102a06114e8565b34801561064d57600080fd5b506102a061065c36600461279f565b6114f5565b6102cd61066f3660046127d1565b6115d3565b34801561068057600080fd5b5061033c60125481565b34801561069657600080fd5b5061033c60135481565b3480156106ac57600080fd5b5061033c600d5481565b3480156106c257600080fd5b506102766106d13660046125c3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b5061027661071a36600461279f565b60156020526000908152604090205460ff1681565b34801561073b57600080fd5b506102cd61074a366004612589565b611b61565b60006001600160e01b031982166380ac58cd60e01b148061078057506001600160e01b03198216635b5e139f60e01b145b8061079b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107b090612bcf565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612bcf565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b6006546001600160a01b031633146108665760405162461bcd60e51b815260040161085d90612a8a565b60405180910390fd5b6108708147611bf9565b50565b6000818152600260205260408120546001600160a01b03166108ec5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161085d565b506000908152600460205260409020546001600160a01b031690565b600061091382610bfe565b9050806001600160a01b0316836001600160a01b031614156109815760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161085d565b336001600160a01b038216148061099d575061099d81336106d1565b610a0f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161085d565b610a198383611c8e565b505050565b6000610a2960085490565b905090565b610a383382611cfc565b610a545760405162461bcd60e51b815260040161085d90612abf565b610a19838383611df3565b610a19838383604051806020016040528060008152506114b0565b60606000610a8783610d03565b905060008167ffffffffffffffff811115610aa457610aa4612c7b565b604051908082528060200260200182016040528015610acd578160200160208202803683370190505b509050600080610adb610a1e565b905060005b81811015610bb2576000818152600260205260409020546001600160a01b031615801590610b5b57876001600160a01b0316610b1b83610bfe565b6001600160a01b03161415610b565781858581518110610b3d57610b3d612c65565b602090810291909101015283610b5281612c0a565b9450505b610b9f565b80158015610b8c575084610b70600188612b8c565b81518110610b8057610b80612c65565b60200260200101516000145b15610b9f5782610b9b81612c0a565b9350505b5080610baa81612c0a565b915050610ae0565b509195945050505050565b6006546001600160a01b03163314610be75760405162461bcd60e51b815260040161085d90612a8a565b8051610bfa906009906020840190612498565b5050565b6000818152600260205260408120546001600160a01b03168061079b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161085d565b60098054610c8290612bcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610cae90612bcf565b8015610cfb5780601f10610cd057610100808354040283529160200191610cfb565b820191906000526020600020905b815481529060010190602001808311610cde57829003601f168201915b505050505081565b60006001600160a01b038216610d6e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161085d565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610db45760405162461bcd60e51b815260040161085d90612a8a565b610dbe6000611f8f565b565b6006546001600160a01b03163314610dea5760405162461bcd60e51b815260040161085d90612a8a565b610dbe3347611bf9565b6016546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b158015610e3e57600080fd5b505afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7691906127b8565b905080610e93575050604080516000815260208101909152919050565b60008167ffffffffffffffff811115610eae57610eae612c7b565b604051908082528060200260200182016040528015610ed7578160200160208202803683370190505b5090506000805b6115b3811015610fb3576016546040516331a9108f60e11b8152600481018390526001600160a01b03888116921690636352211e9060240160206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6691906125a6565b6001600160a01b03161415610fa15780838381518110610f8857610f88612c65565b602090810291909101015281610f9d81612c0a565b9250505b80610fab81612c0a565b915050610ede565b5090949350505050565b6006546001600160a01b03163314610fe75760405162461bcd60e51b815260040161085d90612a8a565b6016805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6006546001600160a01b031633146110325760405162461bcd60e51b815260040161085d90612a8a565b61104481670de0b6b3a7640000612b6d565b600b5550565b6060600180546107b090612bcf565b600260075414156110ac5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161085d565b60026007556110b9611fe1565b601654600160a01b900460ff16156110d057600080fd5b80600c546110de9190612b6d565b34101561113b5760405162461bcd60e51b815260206004820152602560248201527f4d696e74696e672061204e465420436f73747320302e30323920457468657220604482015264456163682160d81b606482015260840161085d565b81600114156111b25761031981600e546111559190612b41565b111561116057600080fd5b60005b818110156111ac57611179600880546001019055565b600e805490600061118983612c0a565b919050555061119a33600e54611fed565b806111a481612c0a565b915050611163565b5061145a565b81600214156112235761063281600f546111cc9190612b41565b11156111d757600080fd5b60005b818110156111ac576111f0600880546001019055565b600f805490600061120083612c0a565b919050555061121133600f54611fed565b8061121b81612c0a565b9150506111da565b81600314156112945761094b8160105461123d9190612b41565b111561124857600080fd5b60005b818110156111ac57611261600880546001019055565b6010805490600061127183612c0a565b919050555061128233601054611fed565b8061128c81612c0a565b91505061124b565b816004141561130557610c64816011546112ae9190612b41565b11156112b957600080fd5b60005b818110156111ac576112d2600880546001019055565b601180549060006112e283612c0a565b91905055506112f333601154611fed565b806112fd81612c0a565b9150506112bc565b816005141561137657610f7d8160125461131f9190612b41565b111561132a57600080fd5b60005b818110156111ac57611343600880546001019055565b6012805490600061135383612c0a565b919050555061136433601254611fed565b8061136e81612c0a565b91505061132d565b81600614156113e757611296816013546113909190612b41565b111561139b57600080fd5b60005b818110156111ac576113b4600880546001019055565b601380549060006113c483612c0a565b91905055506113d533601354611fed565b806113df81612c0a565b91505061139e565b816007141561145a576115af816014546114019190612b41565b111561140c57600080fd5b60005b8181101561145857611425600880546001019055565b6014805490600061143583612c0a565b919050555061144633601454611fed565b8061145081612c0a565b91505061140f565b505b50506001600755565b6006546001600160a01b0316331461148d5760405162461bcd60e51b815260040161085d90612a8a565b61149f81670de0b6b3a7640000612b6d565b600c5550565b610bfa338383612007565b6114ba3383611cfc565b6114d65760405162461bcd60e51b815260040161085d90612abf565b6114e2848484846120d6565b50505050565b600a8054610c8290612bcf565b6000818152600260205260409020546060906001600160a01b03166115745760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161085d565b600061157e612109565b9050600081511161159e57604051806020016040528060008152506115cc565b806115a884612118565b600a6040516020016115bc939291906128e0565b6040516020818303038152906040525b9392505050565b600260075414156116265760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161085d565b6002600755611633611fe1565b601654600160a01b900460ff16151560011461164e57600080fd5b80600b5461165c9190612b6d565b3410156116b75760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e672061204e465420436f73747320302e303120457468657220456044820152636163682160e01b606482015260840161085d565b808251146116c457600080fd5b60005b82518110156117d257601654835133916001600160a01b031690636352211e908690859081106116f9576116f9612c65565b60200260200101516040518263ffffffff1660e01b815260040161171f91815260200190565b60206040518083038186803b15801561173757600080fd5b505afa15801561174b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176f91906125a6565b6001600160a01b03161461178257600080fd5b6015600084838151811061179857611798612c65565b60209081029190910181015182528101919091526040016000205460ff16156117c057600080fd5b806117ca81612c0a565b9150506116c7565b50826001141561184a5761031981600e546117ed9190612b41565b11156117f857600080fd5b60005b8181101561184457611811600880546001019055565b600e805490600061182183612c0a565b919050555061183233600e54611fed565b8061183c81612c0a565b9150506117fb565b50611af2565b82600214156118bb5761063281600f546118649190612b41565b111561186f57600080fd5b60005b8181101561184457611888600880546001019055565b600f805490600061189883612c0a565b91905055506118a933600f54611fed565b806118b381612c0a565b915050611872565b826003141561192c5761094b816010546118d59190612b41565b11156118e057600080fd5b60005b81811015611844576118f9600880546001019055565b6010805490600061190983612c0a565b919050555061191a33601054611fed565b8061192481612c0a565b9150506118e3565b826004141561199d57610c64816011546119469190612b41565b111561195157600080fd5b60005b818110156118445761196a600880546001019055565b6011805490600061197a83612c0a565b919050555061198b33601154611fed565b8061199581612c0a565b915050611954565b8260051415611a0e57610f7d816012546119b79190612b41565b11156119c257600080fd5b60005b81811015611844576119db600880546001019055565b601280549060006119eb83612c0a565b91905055506119fc33601254611fed565b80611a0681612c0a565b9150506119c5565b8260061415611a7f5761129681601354611a289190612b41565b1115611a3357600080fd5b60005b8181101561184457611a4c600880546001019055565b60138054906000611a5c83612c0a565b9190505550611a6d33601354611fed565b80611a7781612c0a565b915050611a36565b8260071415611af2576115af81601454611a999190612b41565b1115611aa457600080fd5b60005b81811015611af057611abd600880546001019055565b60148054906000611acd83612c0a565b9190505550611ade33601454611fed565b80611ae881612c0a565b915050611aa7565b505b60005b8251811015611b5657600160156000858481518110611b1657611b16612c65565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b4e90612c0a565b915050611af5565b505060016007555050565b6006546001600160a01b03163314611b8b5760405162461bcd60e51b815260040161085d90612a8a565b6001600160a01b038116611bf05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161085d565b61087081611f8f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c46576040519150601f19603f3d011682016040523d82523d6000602084013e611c4b565b606091505b5050905080610a195760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161085d565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611cc382610bfe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611d755760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161085d565b6000611d8083610bfe565b9050806001600160a01b0316846001600160a01b03161480611dbb5750836001600160a01b0316611db084610873565b6001600160a01b0316145b80611deb57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611e0682610bfe565b6001600160a01b031614611e6a5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161085d565b6001600160a01b038216611ecc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161085d565b611ed7600082611c8e565b6001600160a01b0383166000908152600360205260408120805460019290611f00908490612b8c565b90915550506001600160a01b0382166000908152600360205260408120805460019290611f2e908490612b41565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b333214610dbe57600080fd5b610bfa828260405180602001604052806000815250612216565b816001600160a01b0316836001600160a01b031614156120695760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161085d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6120e1848484611df3565b6120ed84848484612249565b6114e25760405162461bcd60e51b815260040161085d90612a38565b6060600980546107b090612bcf565b60608161213c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612166578061215081612c0a565b915061215f9050600a83612b59565b9150612140565b60008167ffffffffffffffff81111561218157612181612c7b565b6040519080825280601f01601f1916602001820160405280156121ab576020820181803683370190505b5090505b8415611deb576121c0600183612b8c565b91506121cd600a86612c25565b6121d8906030612b41565b60f81b8183815181106121ed576121ed612c65565b60200101906001600160f81b031916908160001a90535061220f600a86612b59565b94506121af565b6122208383612356565b61222d6000848484612249565b610a195760405162461bcd60e51b815260040161085d90612a38565b60006001600160a01b0384163b1561234b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061228d9033908990889088906004016129a4565b602060405180830381600087803b1580156122a757600080fd5b505af19250505080156122d7575060408051601f3d908101601f191682019092526122d491810190612739565b60015b612331573d808015612305576040519150601f19603f3d011682016040523d82523d6000602084013e61230a565b606091505b5080516123295760405162461bcd60e51b815260040161085d90612a38565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611deb565b506001949350505050565b6001600160a01b0382166123ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161085d565b6000818152600260205260409020546001600160a01b0316156124115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161085d565b6001600160a01b038216600090815260036020526040812080546001929061243a908490612b41565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546124a490612bcf565b90600052602060002090601f0160209004810192826124c6576000855561250c565b82601f106124df57805160ff191683800117855561250c565b8280016001018555821561250c579182015b8281111561250c5782518255916020019190600101906124f1565b5061251892915061251c565b5090565b5b80821115612518576000815560010161251d565b600067ffffffffffffffff83111561254b5761254b612c7b565b61255e601f8401601f1916602001612b10565b905082815283838301111561257257600080fd5b828260208301376000602084830101529392505050565b60006020828403121561259b57600080fd5b81356115cc81612c91565b6000602082840312156125b857600080fd5b81516115cc81612c91565b600080604083850312156125d657600080fd5b82356125e181612c91565b915060208301356125f181612c91565b809150509250929050565b60008060006060848603121561261157600080fd5b833561261c81612c91565b9250602084013561262c81612c91565b929592945050506040919091013590565b6000806000806080858703121561265357600080fd5b843561265e81612c91565b9350602085013561266e81612c91565b925060408501359150606085013567ffffffffffffffff81111561269157600080fd5b8501601f810187136126a257600080fd5b6126b187823560208401612531565b91505092959194509250565b600080604083850312156126d057600080fd5b82356126db81612c91565b9150602083013580151581146125f157600080fd5b6000806040838503121561270357600080fd5b823561270e81612c91565b946020939093013593505050565b60006020828403121561272e57600080fd5b81356115cc81612ca6565b60006020828403121561274b57600080fd5b81516115cc81612ca6565b60006020828403121561276857600080fd5b813567ffffffffffffffff81111561277f57600080fd5b8201601f8101841361279057600080fd5b611deb84823560208401612531565b6000602082840312156127b157600080fd5b5035919050565b6000602082840312156127ca57600080fd5b5051919050565b6000806000606084860312156127e657600080fd5b8335925060208085013567ffffffffffffffff8082111561280657600080fd5b818701915087601f83011261281a57600080fd5b81358181111561282c5761282c612c7b565b8060051b915061283d848301612b10565b8181528481019084860184860187018c101561285857600080fd5b600095505b8386101561287b57803583526001959095019491860191860161285d565b50979a979950505050604095909501359450505050565b600080604083850312156128a557600080fd5b50508035926020909101359150565b600081518084526128cc816020860160208601612ba3565b601f01601f19169290920160200192915050565b6000845160206128f38285838a01612ba3565b8551918401916129068184848a01612ba3565b8554920191600090600181811c908083168061292357607f831692505b85831081141561294157634e487b7160e01b85526022600452602485fd5b808015612955576001811461296657612993565b60ff19851688528388019550612993565b60008b81526020902060005b8581101561298b5781548a820152908401908801612972565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129d7908301846128b4565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612a19578351835292840192918401916001016129fd565b50909695505050505050565b6020815260006115cc60208301846128b4565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612b3957612b39612c7b565b604052919050565b60008219821115612b5457612b54612c39565b500190565b600082612b6857612b68612c4f565b500490565b6000816000190483118215151615612b8757612b87612c39565b500290565b600082821015612b9e57612b9e612c39565b500390565b60005b83811015612bbe578181015183820152602001612ba6565b838111156114e25750506000910152565b600181811c90821680612be357607f821691505b60208210811415612c0457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c1e57612c1e612c39565b5060010190565b600082612c3457612c34612c4f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461087057600080fd5b6001600160e01b03198116811461087057600080fdfea26469706673582212204b771e385df69615d6c65abe8e9087535a9e988ab461485791af350c8d0b668564736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42194:10483:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29017:305;;;;;;;;;;-1:-1:-1;29017:305:0;;;;;:::i;:::-;;:::i;:::-;;;9778:14:1;;9771:22;9753:41;;9741:2;9726:18;29017:305:0;;;;;;;;29962:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;50696:121::-;;;;;;;;;;-1:-1:-1;50696:121:0;;;;;:::i;:::-;;:::i;:::-;;31522:221;;;;;;;;;;-1:-1:-1;31522:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8439:32:1;;;8421:51;;8409:2;8394:18;31522:221:0;8275:203:1;31045:411:0;;;;;;;;;;-1:-1:-1;31045:411:0;;;;;:::i;:::-;;:::i;51437:108::-;;;;;;;;;;;;;:::i;:::-;;;18291:25:1;;;18279:2;18264:18;51437:108:0;18145:177:1;42672:33:0;;;;;;;;;;;;;;;;32272:339;;;;;;;;;;-1:-1:-1;32272:339:0;;;;;:::i;:::-;;:::i;42768:38::-;;;;;;;;;;;;;;;;32682:185;;;;;;;;;;-1:-1:-1;32682:185:0;;;;;:::i;:::-;;:::i;51555:614::-;;;;;;;;;;-1:-1:-1;51555:614:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50829:104::-;;;;;;;;;;-1:-1:-1;50829:104:0;;;;;:::i;:::-;;:::i;42489:44::-;;;;;;;;;;;;;;;;29656:239;;;;;;;;;;-1:-1:-1;29656:239:0;;;;;:::i;:::-;;:::i;42540:38::-;;;;;;;;;;;;;;;;42415:21;;;;;;;;;;;;;:::i;29386:208::-;;;;;;;;;;-1:-1:-1;29386:208:0;;;;;:::i;:::-;;:::i;9259:103::-;;;;;;;;;;;;;:::i;50572:116::-;;;;;;;;;;;;;:::i;43279:38::-;;;;;;;;;;;;;;;;52177:497;;;;;;;;;;-1:-1:-1;52177:497:0;;;;;:::i;:::-;;:::i;44024:91::-;;;;;;;;;;;;;:::i;43467:32::-;;;;;;;;;;-1:-1:-1;43467:32:0;;;;-1:-1:-1;;;43467:32:0;;;;;;44123:127;;;;;;;;;;-1:-1:-1;44123:127:0;;;;;:::i;:::-;;:::i;8608:87::-;;;;;;;;;;-1:-1:-1;8681:6:0;;-1:-1:-1;;;;;8681:6:0;8608:87;;30131:104;;;;;;;;;;;;;:::i;47516:2843::-;;;;;;:::i;:::-;;:::i;42973:38::-;;;;;;;;;;;;;;;;44258:121;;;;;;;;;;-1:-1:-1;44258:121:0;;;;;:::i;:::-;;:::i;31815:155::-;;;;;;;;;;-1:-1:-1;31815:155:0;;;;;:::i;:::-;;:::i;42872:40::-;;;;;;;;;;;;;;;;43378:80;;;;;;;;;;-1:-1:-1;43378:80:0;;;;-1:-1:-1;;;;;43378:80:0;;;32938:328;;;;;;;;;;-1:-1:-1;32938:328:0;;;;;:::i;:::-;;:::i;42443:37::-;;;;;;;;;;;;;:::i;51056:375::-;;;;;;;;;;-1:-1:-1;51056:375:0;;;;;:::i;:::-;;:::i;44387:3121::-;;;;;;:::i;:::-;;:::i;43071:40::-;;;;;;;;;;;;;;;;43174;;;;;;;;;;;;;;;;42585:31;;;;;;;;;;;;;;;;32041:164;;;;;;;;;;-1:-1:-1;32041:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32162:25:0;;;32138:4;32162:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32041:164;43326:45;;;;;;;;;;-1:-1:-1;43326:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9517:201;;;;;;;;;;-1:-1:-1;9517:201:0;;;;;:::i;:::-;;:::i;29017:305::-;29119:4;-1:-1:-1;;;;;;29156:40:0;;-1:-1:-1;;;29156:40:0;;:105;;-1:-1:-1;;;;;;;29213:48:0;;-1:-1:-1;;;29213:48:0;29156:105;:158;;;-1:-1:-1;;;;;;;;;;21721:40:0;;;29278:36;29136:178;29017:305;-1:-1:-1;;29017:305:0:o;29962:100::-;30016:13;30049:5;30042:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29962:100;:::o;50696:121::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;;;;;;;;;50772:37:::1;50782:3;50787:21;50772:9;:37::i;:::-;50696:121:::0;:::o;31522:221::-;31598:7;34865:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34865:16:0;31618:73;;;;-1:-1:-1;;;31618:73:0;;15166:2:1;31618:73:0;;;15148:21:1;15205:2;15185:18;;;15178:30;15244:34;15224:18;;;15217:62;-1:-1:-1;;;15295:18:1;;;15288:42;15347:19;;31618:73:0;14964:408:1;31618:73:0;-1:-1:-1;31711:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31711:24:0;;31522:221::o;31045:411::-;31126:13;31142:23;31157:7;31142:14;:23::i;:::-;31126:39;;31190:5;-1:-1:-1;;;;;31184:11:0;:2;-1:-1:-1;;;;;31184:11:0;;;31176:57;;;;-1:-1:-1;;;31176:57:0;;16356:2:1;31176:57:0;;;16338:21:1;16395:2;16375:18;;;16368:30;16434:34;16414:18;;;16407:62;-1:-1:-1;;;16485:18:1;;;16478:31;16526:19;;31176:57:0;16154:397:1;31176:57:0;7359:10;-1:-1:-1;;;;;31268:21:0;;;;:62;;-1:-1:-1;31293:37:0;31310:5;7359:10;32041:164;:::i;31293:37::-;31246:168;;;;-1:-1:-1;;;31246:168:0;;13559:2:1;31246:168:0;;;13541:21:1;13598:2;13578:18;;;13571:30;13637:34;13617:18;;;13610:62;13708:26;13688:18;;;13681:54;13752:19;;31246:168:0;13357:420:1;31246:168:0;31427:21;31436:2;31440:7;31427:8;:21::i;:::-;31115:341;31045:411;;:::o;51437:108::-;51481:7;51512:25;:15;1057:14;;965:114;51512:25;51505:32;;51437:108;:::o;32272:339::-;32467:41;7359:10;32500:7;32467:18;:41::i;:::-;32459:103;;;;-1:-1:-1;;;32459:103:0;;;;;;;:::i;:::-;32575:28;32585:4;32591:2;32595:7;32575:9;:28::i;32682:185::-;32820:39;32837:4;32843:2;32847:7;32820:39;;;;;;;;;;;;:16;:39::i;51555:614::-;51625:16;51654;51673:19;51683:8;51673:9;:19::i;:::-;51654:38;;51703:24;51745:8;51730:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51730:24:0;;51703:51;;51765:14;51790:20;51813:13;:11;:13::i;:::-;51790:36;;51842:9;51837:300;51861:12;51857:1;:16;51837:300;;;51895:12;34865:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34865:16:0;:30;;;;51935:191;;51985:8;-1:-1:-1;;;;;51971:22:0;:10;51979:1;51971:7;:10::i;:::-;-1:-1:-1;;;;;51971:22:0;;51967:62;;;52015:1;51997:7;52005:6;51997:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;52018:8;;;;:::i;:::-;;;;51967:62;51935:191;;;52068:7;52067:8;:38;;;;-1:-1:-1;52079:7:0;52087:12;52098:1;52087:8;:12;:::i;:::-;52079:21;;;;;;;;:::i;:::-;;;;;;;52104:1;52079:26;52067:38;52063:63;;;52109:14;;;;:::i;:::-;;;;52063:63;-1:-1:-1;51875:3:0;;;;:::i;:::-;;;;51837:300;;;-1:-1:-1;52154:7:0;;51555:614;-1:-1:-1;;;;;51555:614:0:o;50829:104::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;50904:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;50829:104:::0;:::o;29656:239::-;29728:7;29764:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29764:16:0;29799:19;29791:73;;;;-1:-1:-1;;;29791:73:0;;14395:2:1;29791:73:0;;;14377:21:1;14434:2;14414:18;;;14407:30;14473:34;14453:18;;;14446:62;-1:-1:-1;;;14524:18:1;;;14517:39;14573:19;;29791:73:0;14193:405:1;42415:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29386:208::-;29458:7;-1:-1:-1;;;;;29486:19:0;;29478:74;;;;-1:-1:-1;;;29478:74:0;;13984:2:1;29478:74:0;;;13966:21:1;14023:2;14003:18;;;13996:30;14062:34;14042:18;;;14035:62;-1:-1:-1;;;14113:18:1;;;14106:40;14163:19;;29478:74:0;13782:406:1;29478:74:0;-1:-1:-1;;;;;;29570:16:0;;;;;:9;:16;;;;;;;29386:208::o;9259:103::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;9324:30:::1;9351:1;9324:18;:30::i;:::-;9259:103::o:0;50572:116::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;50627:53:::1;50645:10;50658:21;50627:9;:53::i;52177:497::-:0;52291:11;;:31;;-1:-1:-1;;;52291:31:0;;-1:-1:-1;;;;;8439:32:1;;;52291:31:0;;;8421:51:1;52243:16:0;;52272;;52291:11;;;:21;;8394:18:1;;52291:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52272:50;-1:-1:-1;52337:13:0;52333:42;;-1:-1:-1;;52359:16:0;;;52373:1;52359:16;;;;;;;;;52352:23;-1:-1:-1;52177:497:0:o;52333:42::-;52388:24;52430:8;52415:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52415:24:0;-1:-1:-1;52388:51:0;-1:-1:-1;52450:14:0;;52477:165;52501:4;52497:1;:8;52477:165;;;52531:11;;:22;;-1:-1:-1;;;52531:22:0;;;;;18291:25:1;;;-1:-1:-1;;;;;52531:34:0;;;;:11;;:19;;18264:18:1;;52531:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52531:34:0;;52527:104;;;52604:1;52586:7;52594:6;52586:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;52607:8;;;;:::i;:::-;;;;52527:104;52507:3;;;;:::i;:::-;;;;52477:165;;;-1:-1:-1;52659:7:0;;52177:497;-1:-1:-1;;;;52177:497:0:o;44024:91::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;44094:13:::1;::::0;;-1:-1:-1;;;;44077:30:0;::::1;-1:-1:-1::0;;;44094:13:0;;;::::1;;;44093:14;44077:30:::0;;::::1;;::::0;;44024:91::o;44123:127::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;44222:19:::1;:8:::0;44233::::1;44222:19;:::i;:::-;44202:16;:40:::0;-1:-1:-1;44123:127:0:o;30131:104::-;30187:13;30220:7;30213:14;;;;;:::i;47516:2843::-;3423:1;4021:7;;:19;;4013:63;;;;-1:-1:-1;;;4013:63:0;;17581:2:1;4013:63:0;;;17563:21:1;17620:2;17600:18;;;17593:30;17659:33;17639:18;;;17632:61;17710:18;;4013:63:0;17379:355:1;4013:63:0;3423:1;4154:7;:18;43792:13:::1;:11;:13::i;:::-;43973::::2;::::0;-1:-1:-1;;;43973:13:0;::::2;;;:22;43965:31;;;::::0;::::2;;47693:12:::3;47681:9;;:24;;;;:::i;:::-;47667:9;:39;;47659:89;;;::::0;-1:-1:-1;;;47659:89:0;;17941:2:1;47659:89:0::3;::::0;::::3;17923:21:1::0;17980:2;17960:18;;;17953:30;18019:34;17999:18;;;17992:62;-1:-1:-1;;;18070:18:1;;;18063:35;18115:19;;47659:89:0::3;17739:401:1::0;47659:89:0::3;47764:12;47780:1;47764:17;47761:2587;;;42662:3;47833:12;47816:14;;:29;;;;:::i;:::-;47815:43;;47807:52;;;::::0;::::3;;47878:9;47874:220;47892:12;47890:1;:14;47874:220;;;47960:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;47960:27:::3;48006:14;:16:::0;;;:14:::3;:16;::::0;::::3;:::i;:::-;;;;;;48041:37;48051:10;48063:14;;48041:9;:37::i;:::-;47905:3:::0;::::3;::::0;::::3;:::i;:::-;;;;47874:220;;;;47761:2587;;;48123:12;48139:1;48123:17;48120:2228;;;42757:4;48195:12;48175:17;;:32;;;;:::i;:::-;48174:52;;48166:61;;;::::0;::::3;;48246:9;48242:226;48260:12;48258:1;:14;48242:226;;;48328:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;48328:27:::3;48374:17;:19:::0;;;:17:::3;:19;::::0;::::3;:::i;:::-;;;;;;48412:40;48422:10;48434:17;;48412:9;:40::i;:::-;48273:3:::0;::::3;::::0;::::3;:::i;:::-;;;;48242:226;;48120:2228;48497:12;48513:1;48497:17;48494:1854;;;42861:4;48570:12;48549:18;;:33;;;;:::i;:::-;48548:56;;48540:65;;;::::0;::::3;;48624:9;48620:228;48638:12;48636:1;:14;48620:228;;;48706:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;48706:27:::3;48752:18;:20:::0;;;:18:::3;:20;::::0;::::3;:::i;:::-;;;;;;48791:41;48801:10;48813:18;;48791:9;:41::i;:::-;48651:3:::0;::::3;::::0;::::3;:::i;:::-;;;;48620:228;;48494:1854;48877:12;48893:1;48877:17;48874:1474;;;42962:4;48948:12;48929:16;;:31;;;;:::i;:::-;48928:49;;48920:58;;;::::0;::::3;;48997:9;48993:224;49011:12;49009:1;:14;48993:224;;;49079:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;49079:27:::3;49125:16;:18:::0;;;:16:::3;:18;::::0;::::3;:::i;:::-;;;;;;49162:39;49172:10;49184:16;;49162:9;:39::i;:::-;49024:3:::0;::::3;::::0;::::3;:::i;:::-;;;;48993:224;;48874:1474;49246:12;49262:1;49246:17;49243:1105;;;43060:4;49319:12;49298:18;;:33;;;;:::i;:::-;49297:50;;49289:59;;;::::0;::::3;;49367:9;49363:228;49381:12;49379:1;:14;49363:228;;;49449:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;49449:27:::3;49495:18;:20:::0;;;:18:::3;:20;::::0;::::3;:::i;:::-;;;;;;49534:41;49544:10;49556:18;;49534:9;:41::i;:::-;49394:3:::0;::::3;::::0;::::3;:::i;:::-;;;;49363:228;;49243:1105;49620:12;49636:1;49620:17;49617:731;;;43163:4;49693:12;49672:18;;:33;;;;:::i;:::-;49671:53;;49663:62;;;::::0;::::3;;49744:9;49740:228;49758:12;49756:1;:14;49740:228;;;49826:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;49826:27:::3;49872:18;:20:::0;;;:18:::3;:20;::::0;::::3;:::i;:::-;;;;;;49911:41;49921:10;49933:18;;49911:9;:41::i;:::-;49771:3:::0;::::3;::::0;::::3;:::i;:::-;;;;49740:228;;49617:731;49997:12;50013:1;49997:17;49994:354;;;43268:4;50068:12;50049:16;;:31;;;;:::i;:::-;50048:49;;50040:58;;;::::0;::::3;;50117:9;50113:224;50131:12;50129:1;:14;50113:224;;;50199:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;50199:27:::3;50245:16;:18:::0;;;:16:::3;:18;::::0;::::3;:::i;:::-;;;;;;50282:39;50292:10;50304:16;;50282:9;:39::i;:::-;50144:3:::0;::::3;::::0;::::3;:::i;:::-;;;;50113:224;;;;49994:354;-1:-1:-1::0;;3379:1:0;4333:7;:22;47516:2843::o;44258:121::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;44351:19:::1;:8:::0;44362::::1;44351:19;:::i;:::-;44338:9;:33:::0;-1:-1:-1;44258:121:0:o;31815:155::-;31910:52;7359:10;31943:8;31953;31910:18;:52::i;32938:328::-;33113:41;7359:10;33146:7;33113:18;:41::i;:::-;33105:103;;;;-1:-1:-1;;;33105:103:0;;;;;;;:::i;:::-;33219:39;33233:4;33239:2;33243:7;33252:5;33219:13;:39::i;:::-;32938:328;;;;:::o;42443:37::-;;;;;;;:::i;51056:375::-;34841:4;34865:16;;;:7;:16;;;;;;51129:13;;-1:-1:-1;;;;;34865:16:0;51160:76;;;;-1:-1:-1;;;51160:76:0;;15940:2:1;51160:76:0;;;15922:21:1;15979:2;15959:18;;;15952:30;16018:34;15998:18;;;15991:62;-1:-1:-1;;;16069:18:1;;;16062:45;16124:19;;51160:76:0;15738:411:1;51160:76:0;51249:28;51280:10;:8;:10::i;:::-;51249:41;;51339:1;51314:14;51308:28;:32;:115;;;;;;;;;;;;;;;;;51367:14;51383:18;:7;:16;:18::i;:::-;51403:13;51350:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51308:115;51301:122;51056:375;-1:-1:-1;;;51056:375:0:o;44387:3121::-;3423:1;4021:7;;:19;;4013:63;;;;-1:-1:-1;;;4013:63:0;;17581:2:1;4013:63:0;;;17563:21:1;17620:2;17600:18;;;17593:30;17659:33;17639:18;;;17632:61;17710:18;;4013:63:0;17379:355:1;4013:63:0;3423:1;4154:7;:18;43792:13:::1;:11;:13::i;:::-;43877::::2;::::0;-1:-1:-1;;;43877:13:0;::::2;;;:21;;43894:4;43877:21;43869:30;;;::::0;::::2;;44597:12:::3;44578:16;;:31;;;;:::i;:::-;44564:9;:46;;44556:95;;;::::0;-1:-1:-1;;;44556:95:0;;17176:2:1;44556:95:0::3;::::0;::::3;17158:21:1::0;17215:2;17195:18;;;17188:30;17254:34;17234:18;;;17227:62;-1:-1:-1;;;17305:18:1;;;17298:34;17349:19;;44556:95:0::3;16974:400:1::0;44556:95:0::3;44689:12;44670:8;:15;:31;44662:40;;;::::0;::::3;;44719:9;44715:190;44733:8;:15;44731:1;:17;44715:190;;;44787:11;::::0;44807;;44823:10:::3;::::0;-1:-1:-1;;;;;44787:11:0::3;::::0;:19:::3;::::0;44807:8;;44816:1;;44807:11;::::3;;;;;:::i;:::-;;;;;;;44787:32;;;;;;;;;;;;;18291:25:1::0;;18279:2;18264:18;;18145:177;44787:32:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44787:46:0::3;;44779:55;;;::::0;::::3;;44857:13;:26;44871:8;44880:1;44871:11;;;;;;;;:::i;:::-;;::::0;;::::3;::::0;;;;;;;44857:26;;;::::3;::::0;;;;;;-1:-1:-1;44857:26:0;;::::3;;:35;44849:44;;;::::0;::::3;;44750:3:::0;::::3;::::0;::::3;:::i;:::-;;;;44715:190;;;;44920:12;44936:1;44920:17;44917:2461;;;42662:3;44989:12;44972:14;;:29;;;;:::i;:::-;44971:43;;44963:52;;;::::0;::::3;;45034:9;45030:202;45048:12;45046:1;:14;45030:202;;;45098:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;45098:27:::3;45144:14;:16:::0;;;:14:::3;:16;::::0;::::3;:::i;:::-;;;;;;45179:37;45189:10;45201:14;;45179:9;:37::i;:::-;45061:3:::0;::::3;::::0;::::3;:::i;:::-;;;;45030:202;;;;44917:2461;;;45261:12;45277:1;45261:17;45258:2120;;;42757:4;45333:12;45313:17;;:32;;;;:::i;:::-;45312:52;;45304:61;;;::::0;::::3;;45384:9;45380:208;45398:12;45396:1;:14;45380:208;;;45448:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;45448:27:::3;45494:17;:19:::0;;;:17:::3;:19;::::0;::::3;:::i;:::-;;;;;;45532:40;45542:10;45554:17;;45532:9;:40::i;:::-;45411:3:::0;::::3;::::0;::::3;:::i;:::-;;;;45380:208;;45258:2120;45617:12;45633:1;45617:17;45614:1764;;;42861:4;45690:12;45669:18;;:33;;;;:::i;:::-;45668:56;;45660:65;;;::::0;::::3;;45744:9;45740:210;45758:12;45756:1;:14;45740:210;;;45808:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;45808:27:::3;45854:18;:20:::0;;;:18:::3;:20;::::0;::::3;:::i;:::-;;;;;;45893:41;45903:10;45915:18;;45893:9;:41::i;:::-;45771:3:::0;::::3;::::0;::::3;:::i;:::-;;;;45740:210;;45614:1764;45979:12;45995:1;45979:17;45976:1402;;;42962:4;46050:12;46031:16;;:31;;;;:::i;:::-;46030:49;;46022:58;;;::::0;::::3;;46099:9;46095:206;46113:12;46111:1;:14;46095:206;;;46163:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;46163:27:::3;46209:16;:18:::0;;;:16:::3;:18;::::0;::::3;:::i;:::-;;;;;;46246:39;46256:10;46268:16;;46246:9;:39::i;:::-;46126:3:::0;::::3;::::0;::::3;:::i;:::-;;;;46095:206;;45976:1402;46330:12;46346:1;46330:17;46327:1051;;;43060:4;46403:12;46382:18;;:33;;;;:::i;:::-;46381:50;;46373:59;;;::::0;::::3;;46451:9;46447:210;46465:12;46463:1;:14;46447:210;;;46515:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;46515:27:::3;46561:18;:20:::0;;;:18:::3;:20;::::0;::::3;:::i;:::-;;;;;;46600:41;46610:10;46622:18;;46600:9;:41::i;:::-;46478:3:::0;::::3;::::0;::::3;:::i;:::-;;;;46447:210;;46327:1051;46686:12;46702:1;46686:17;46683:695;;;43163:4;46759:12;46738:18;;:33;;;;:::i;:::-;46737:53;;46729:62;;;::::0;::::3;;46810:9;46806:210;46824:12;46822:1;:14;46806:210;;;46874:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;46874:27:::3;46920:18;:20:::0;;;:18:::3;:20;::::0;::::3;:::i;:::-;;;;;;46959:41;46969:10;46981:18;;46959:9;:41::i;:::-;46837:3:::0;::::3;::::0;::::3;:::i;:::-;;;;46806:210;;46683:695;47045:12;47061:1;47045:17;47042:336;;;43268:4;47116:12;47097:16;;:31;;;;:::i;:::-;47096:49;;47088:58;;;::::0;::::3;;47165:9;47161:206;47179:12;47177:1;:14;47161:206;;;47229:27;:15;1176:19:::0;;1194:1;1176:19;;;1087:127;47229:27:::3;47275:16;:18:::0;;;:16:::3;:18;::::0;::::3;:::i;:::-;;;;;;47312:39;47322:10;47334:16;;47312:9;:39::i;:::-;47192:3:::0;::::3;::::0;::::3;:::i;:::-;;;;47161:206;;;;47042:336;47394:9;47390:109;47408:8;:15;47406:1;:17;47390:109;;;47483:4;47454:13;:26;47468:8;47477:1;47468:11;;;;;;;;:::i;:::-;;;;;;;47454:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;47425:3;;;;;:::i;:::-;;;;47390:109;;;-1:-1:-1::0;;3379:1:0;4333:7;:22;-1:-1:-1;;44387:3121:0:o;9517:201::-;8681:6;;-1:-1:-1;;;;;8681:6:0;7359:10;8828:23;8820:68;;;;-1:-1:-1;;;8820:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9606:22:0;::::1;9598:73;;;::::0;-1:-1:-1;;;9598:73:0;;10873:2:1;9598:73:0::1;::::0;::::1;10855:21:1::0;10912:2;10892:18;;;10885:30;10951:34;10931:18;;;10924:62;-1:-1:-1;;;11002:18:1;;;10995:36;11048:19;;9598:73:0::1;10671:402:1::0;9598:73:0::1;9682:28;9701:8;9682:18;:28::i;50367:197::-:0;50450:12;50476:8;-1:-1:-1;;;;;50468:22:0;50498:7;50468:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50449:61;;;50529:7;50521:35;;;;-1:-1:-1;;;50521:35:0;;11280:2:1;50521:35:0;;;11262:21:1;11319:2;11299:18;;;11292:30;-1:-1:-1;;;11338:18:1;;;11331:45;11393:18;;50521:35:0;11078:339:1;38922:174:0;38997:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;38997:29:0;-1:-1:-1;;;;;38997:29:0;;;;;;;;:24;;39051:23;38997:24;39051:14;:23::i;:::-;-1:-1:-1;;;;;39042:46:0;;;;;;;;;;;38922:174;;:::o;35070:348::-;35163:4;34865:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34865:16:0;35180:73;;;;-1:-1:-1;;;35180:73:0;;13146:2:1;35180:73:0;;;13128:21:1;13185:2;13165:18;;;13158:30;13224:34;13204:18;;;13197:62;-1:-1:-1;;;13275:18:1;;;13268:42;13327:19;;35180:73:0;12944:408:1;35180:73:0;35264:13;35280:23;35295:7;35280:14;:23::i;:::-;35264:39;;35333:5;-1:-1:-1;;;;;35322:16:0;:7;-1:-1:-1;;;;;35322:16:0;;:51;;;;35366:7;-1:-1:-1;;;;;35342:31:0;:20;35354:7;35342:11;:20::i;:::-;-1:-1:-1;;;;;35342:31:0;;35322:51;:87;;;-1:-1:-1;;;;;;32162:25:0;;;32138:4;32162:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;35377:32;35314:96;35070:348;-1:-1:-1;;;;35070:348:0:o;38179:625::-;38338:4;-1:-1:-1;;;;;38311:31:0;:23;38326:7;38311:14;:23::i;:::-;-1:-1:-1;;;;;38311:31:0;;38303:81;;;;-1:-1:-1;;;38303:81:0;;11624:2:1;38303:81:0;;;11606:21:1;11663:2;11643:18;;;11636:30;11702:34;11682:18;;;11675:62;-1:-1:-1;;;11753:18:1;;;11746:35;11798:19;;38303:81:0;11422:401:1;38303:81:0;-1:-1:-1;;;;;38403:16:0;;38395:65;;;;-1:-1:-1;;;38395:65:0;;12387:2:1;38395:65:0;;;12369:21:1;12426:2;12406:18;;;12399:30;12465:34;12445:18;;;12438:62;-1:-1:-1;;;12516:18:1;;;12509:34;12560:19;;38395:65:0;12185:400:1;38395:65:0;38577:29;38594:1;38598:7;38577:8;:29::i;:::-;-1:-1:-1;;;;;38619:15:0;;;;;;:9;:15;;;;;:20;;38638:1;;38619:15;:20;;38638:1;;38619:20;:::i;:::-;;;;-1:-1:-1;;;;;;;38650:13:0;;;;;;:9;:13;;;;;:18;;38667:1;;38650:13;:18;;38667:1;;38650:18;:::i;:::-;;;;-1:-1:-1;;38679:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;38679:21:0;-1:-1:-1;;;;;38679:21:0;;;;;;;;;38718:27;;38679:16;;38718:27;;;;;;;31115:341;31045:411;;:::o;9878:191::-;9971:6;;;-1:-1:-1;;;;;9988:17:0;;;-1:-1:-1;;;;;;9988:17:0;;;;;;;10021:40;;9971:6;;;9988:17;9971:6;;10021:40;;9952:16;;10021:40;9941:128;9878:191;:::o;43666:87::-;43721:10;43735:9;43721:23;43713:32;;;;;35760:110;35836:26;35846:2;35850:7;35836:26;;;;;;;;;;;;:9;:26::i;39238:315::-;39393:8;-1:-1:-1;;;;;39384:17:0;:5;-1:-1:-1;;;;;39384:17:0;;;39376:55;;;;-1:-1:-1;;;39376:55:0;;12792:2:1;39376:55:0;;;12774:21:1;12831:2;12811:18;;;12804:30;12870:27;12850:18;;;12843:55;12915:18;;39376:55:0;12590:349:1;39376:55:0;-1:-1:-1;;;;;39442:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;39442:46:0;;;;;;;;;;39504:41;;9753::1;;;39504::0;;9726:18:1;39504:41:0;;;;;;;39238:315;;;:::o;34148:::-;34305:28;34315:4;34321:2;34325:7;34305:9;:28::i;:::-;34352:48;34375:4;34381:2;34385:7;34394:5;34352:22;:48::i;:::-;34344:111;;;;-1:-1:-1;;;34344:111:0;;;;;;;:::i;50939:108::-;50999:13;51032:7;51025:14;;;;;:::i;4788:723::-;4844:13;5065:10;5061:53;;-1:-1:-1;;5092:10:0;;;;;;;;;;;;-1:-1:-1;;;5092:10:0;;;;;4788:723::o;5061:53::-;5139:5;5124:12;5180:78;5187:9;;5180:78;;5213:8;;;;:::i;:::-;;-1:-1:-1;5236:10:0;;-1:-1:-1;5244:2:0;5236:10;;:::i;:::-;;;5180:78;;;5268:19;5300:6;5290:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5290:17:0;;5268:39;;5318:154;5325:10;;5318:154;;5352:11;5362:1;5352:11;;:::i;:::-;;-1:-1:-1;5421:10:0;5429:2;5421:5;:10;:::i;:::-;5408:24;;:2;:24;:::i;:::-;5395:39;;5378:6;5385;5378:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5378:56:0;;;;;;;;-1:-1:-1;5449:11:0;5458:2;5449:11;;:::i;:::-;;;5318:154;;36097:321;36227:18;36233:2;36237:7;36227:5;:18::i;:::-;36278:54;36309:1;36313:2;36317:7;36326:5;36278:22;:54::i;:::-;36256:154;;;;-1:-1:-1;;;36256:154:0;;;;;;;:::i;40118:799::-;40273:4;-1:-1:-1;;;;;40294:13:0;;11657:19;:23;40290:620;;40330:72;;-1:-1:-1;;;40330:72:0;;-1:-1:-1;;;;;40330:36:0;;;;;:72;;7359:10;;40381:4;;40387:7;;40396:5;;40330:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40330:72:0;;;;;;;;-1:-1:-1;;40330:72:0;;;;;;;;;;;;:::i;:::-;;;40326:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40572:13:0;;40568:272;;40615:60;;-1:-1:-1;;;40615:60:0;;;;;;;:::i;40568:272::-;40790:6;40784:13;40775:6;40771:2;40767:15;40760:38;40326:529;-1:-1:-1;;;;;;40453:51:0;-1:-1:-1;;;40453:51:0;;-1:-1:-1;40446:58:0;;40290:620;-1:-1:-1;40894:4:0;40118:799;;;;;;:::o;36754:439::-;-1:-1:-1;;;;;36834:16:0;;36826:61;;;;-1:-1:-1;;;36826:61:0;;14805:2:1;36826:61:0;;;14787:21:1;;;14824:18;;;14817:30;14883:34;14863:18;;;14856:62;14935:18;;36826:61:0;14603:356:1;36826:61:0;34841:4;34865:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34865:16:0;:30;36898:58;;;;-1:-1:-1;;;36898:58:0;;12030:2:1;36898:58:0;;;12012:21:1;12069:2;12049:18;;;12042:30;12108;12088:18;;;12081:58;12156:18;;36898:58:0;11828:352:1;36898:58:0;-1:-1:-1;;;;;37027:13:0;;;;;;:9;:13;;;;;:18;;37044:1;;37027:13;:18;;37044:1;;37027:18;:::i;:::-;;;;-1:-1:-1;;37056:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37056:21:0;-1:-1:-1;;;;;37056:21:0;;;;;;;;37095:33;;37056:16;;;37095:33;;37056:16;;37095:33;50904:21:::1;50829:104:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:247::-;484:6;537:2;525:9;516:7;512:23;508:32;505:52;;;553:1;550;543:12;505:52;592:9;579:23;611:31;636:5;611:31;:::i;677:251::-;747:6;800:2;788:9;779:7;775:23;771:32;768:52;;;816:1;813;806:12;768:52;848:9;842:16;867:31;892:5;867:31;:::i;1193:388::-;1261:6;1269;1322:2;1310:9;1301:7;1297:23;1293:32;1290:52;;;1338:1;1335;1328:12;1290:52;1377:9;1364:23;1396:31;1421:5;1396:31;:::i;:::-;1446:5;-1:-1:-1;1503:2:1;1488:18;;1475:32;1516:33;1475:32;1516:33;:::i;:::-;1568:7;1558:17;;;1193:388;;;;;:::o;1586:456::-;1663:6;1671;1679;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;1787:9;1774:23;1806:31;1831:5;1806:31;:::i;:::-;1856:5;-1:-1:-1;1913:2:1;1898:18;;1885:32;1926:33;1885:32;1926:33;:::i;:::-;1586:456;;1978:7;;-1:-1:-1;;;2032:2:1;2017:18;;;;2004:32;;1586:456::o;2047:794::-;2142:6;2150;2158;2166;2219:3;2207:9;2198:7;2194:23;2190:33;2187:53;;;2236:1;2233;2226:12;2187:53;2275:9;2262:23;2294:31;2319:5;2294:31;:::i;:::-;2344:5;-1:-1:-1;2401:2:1;2386:18;;2373:32;2414:33;2373:32;2414:33;:::i;:::-;2466:7;-1:-1:-1;2520:2:1;2505:18;;2492:32;;-1:-1:-1;2575:2:1;2560:18;;2547:32;2602:18;2591:30;;2588:50;;;2634:1;2631;2624:12;2588:50;2657:22;;2710:4;2702:13;;2698:27;-1:-1:-1;2688:55:1;;2739:1;2736;2729:12;2688:55;2762:73;2827:7;2822:2;2809:16;2804:2;2800;2796:11;2762:73;:::i;:::-;2752:83;;;2047:794;;;;;;;:::o;2846:416::-;2911:6;2919;2972:2;2960:9;2951:7;2947:23;2943:32;2940:52;;;2988:1;2985;2978:12;2940:52;3027:9;3014:23;3046:31;3071:5;3046:31;:::i;:::-;3096:5;-1:-1:-1;3153:2:1;3138:18;;3125:32;3195:15;;3188:23;3176:36;;3166:64;;3226:1;3223;3216:12;3267:315;3335:6;3343;3396:2;3384:9;3375:7;3371:23;3367:32;3364:52;;;3412:1;3409;3402:12;3364:52;3451:9;3438:23;3470:31;3495:5;3470:31;:::i;:::-;3520:5;3572:2;3557:18;;;;3544:32;;-1:-1:-1;;;3267:315:1:o;3587:245::-;3645:6;3698:2;3686:9;3677:7;3673:23;3669:32;3666:52;;;3714:1;3711;3704:12;3666:52;3753:9;3740:23;3772:30;3796:5;3772:30;:::i;3837:249::-;3906:6;3959:2;3947:9;3938:7;3934:23;3930:32;3927:52;;;3975:1;3972;3965:12;3927:52;4007:9;4001:16;4026:30;4050:5;4026:30;:::i;4091:450::-;4160:6;4213:2;4201:9;4192:7;4188:23;4184:32;4181:52;;;4229:1;4226;4219:12;4181:52;4269:9;4256:23;4302:18;4294:6;4291:30;4288:50;;;4334:1;4331;4324:12;4288:50;4357:22;;4410:4;4402:13;;4398:27;-1:-1:-1;4388:55:1;;4439:1;4436;4429:12;4388:55;4462:73;4527:7;4522:2;4509:16;4504:2;4500;4496:11;4462:73;:::i;4546:180::-;4605:6;4658:2;4646:9;4637:7;4633:23;4629:32;4626:52;;;4674:1;4671;4664:12;4626:52;-1:-1:-1;4697:23:1;;4546:180;-1:-1:-1;4546:180:1:o;4731:184::-;4801:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:52;;;4870:1;4867;4860:12;4822:52;-1:-1:-1;4893:16:1;;4731:184;-1:-1:-1;4731:184:1:o;4920:1093::-;5022:6;5030;5038;5091:2;5079:9;5070:7;5066:23;5062:32;5059:52;;;5107:1;5104;5097:12;5059:52;5143:9;5130:23;5120:33;;5172:2;5225;5214:9;5210:18;5197:32;5248:18;5289:2;5281:6;5278:14;5275:34;;;5305:1;5302;5295:12;5275:34;5343:6;5332:9;5328:22;5318:32;;5388:7;5381:4;5377:2;5373:13;5369:27;5359:55;;5410:1;5407;5400:12;5359:55;5446:2;5433:16;5468:2;5464;5461:10;5458:36;;;5474:18;;:::i;:::-;5520:2;5517:1;5513:10;5503:20;;5543:28;5567:2;5563;5559:11;5543:28;:::i;:::-;5605:15;;;5636:12;;;;5668:11;;;5698;;;5694:20;;5691:33;-1:-1:-1;5688:53:1;;;5737:1;5734;5727:12;5688:53;5759:1;5750:10;;5769:163;5783:2;5780:1;5777:9;5769:163;;;5840:17;;5828:30;;5801:1;5794:9;;;;;5878:12;;;;5910;;5769:163;;;-1:-1:-1;4920:1093:1;;5951:5;;-1:-1:-1;;;;6003:2:1;5988:18;;;;5975:32;;-1:-1:-1;;;;4920:1093:1:o;6018:248::-;6086:6;6094;6147:2;6135:9;6126:7;6122:23;6118:32;6115:52;;;6163:1;6160;6153:12;6115:52;-1:-1:-1;;6186:23:1;;;6256:2;6241:18;;;6228:32;;-1:-1:-1;6018:248:1:o;6271:257::-;6312:3;6350:5;6344:12;6377:6;6372:3;6365:19;6393:63;6449:6;6442:4;6437:3;6433:14;6426:4;6419:5;6415:16;6393:63;:::i;:::-;6510:2;6489:15;-1:-1:-1;;6485:29:1;6476:39;;;;6517:4;6472:50;;6271:257;-1:-1:-1;;6271:257:1:o;6533:1527::-;6757:3;6795:6;6789:13;6821:4;6834:51;6878:6;6873:3;6868:2;6860:6;6856:15;6834:51;:::i;:::-;6948:13;;6907:16;;;;6970:55;6948:13;6907:16;6992:15;;;6970:55;:::i;:::-;7114:13;;7047:20;;;7087:1;;7174;7196:18;;;;7249;;;;7276:93;;7354:4;7344:8;7340:19;7328:31;;7276:93;7417:2;7407:8;7404:16;7384:18;7381:40;7378:167;;;-1:-1:-1;;;7444:33:1;;7500:4;7497:1;7490:15;7530:4;7451:3;7518:17;7378:167;7561:18;7588:110;;;;7712:1;7707:328;;;;7554:481;;7588:110;-1:-1:-1;;7623:24:1;;7609:39;;7668:20;;;;-1:-1:-1;7588:110:1;;7707:328;18680:1;18673:14;;;18717:4;18704:18;;7802:1;7816:169;7830:8;7827:1;7824:15;7816:169;;;7912:14;;7897:13;;;7890:37;7955:16;;;;7847:10;;7816:169;;;7820:3;;8016:8;8009:5;8005:20;7998:27;;7554:481;-1:-1:-1;8051:3:1;;6533:1527;-1:-1:-1;;;;;;;;;;;6533:1527:1:o;8483:488::-;-1:-1:-1;;;;;8752:15:1;;;8734:34;;8804:15;;8799:2;8784:18;;8777:43;8851:2;8836:18;;8829:34;;;8899:3;8894:2;8879:18;;8872:31;;;8677:4;;8920:45;;8945:19;;8937:6;8920:45;:::i;:::-;8912:53;8483:488;-1:-1:-1;;;;;;8483:488:1:o;8976:632::-;9147:2;9199:21;;;9269:13;;9172:18;;;9291:22;;;9118:4;;9147:2;9370:15;;;;9344:2;9329:18;;;9118:4;9413:169;9427:6;9424:1;9421:13;9413:169;;;9488:13;;9476:26;;9557:15;;;;9522:12;;;;9449:1;9442:9;9413:169;;;-1:-1:-1;9599:3:1;;8976:632;-1:-1:-1;;;;;;8976:632:1:o;10028:219::-;10177:2;10166:9;10159:21;10140:4;10197:44;10237:2;10226:9;10222:18;10214:6;10197:44;:::i;10252:414::-;10454:2;10436:21;;;10493:2;10473:18;;;10466:30;10532:34;10527:2;10512:18;;10505:62;-1:-1:-1;;;10598:2:1;10583:18;;10576:48;10656:3;10641:19;;10252:414::o;15377:356::-;15579:2;15561:21;;;15598:18;;;15591:30;15657:34;15652:2;15637:18;;15630:62;15724:2;15709:18;;15377:356::o;16556:413::-;16758:2;16740:21;;;16797:2;16777:18;;;16770:30;16836:34;16831:2;16816:18;;16809:62;-1:-1:-1;;;16902:2:1;16887:18;;16880:47;16959:3;16944:19;;16556:413::o;18327:275::-;18398:2;18392:9;18463:2;18444:13;;-1:-1:-1;;18440:27:1;18428:40;;18498:18;18483:34;;18519:22;;;18480:62;18477:88;;;18545:18;;:::i;:::-;18581:2;18574:22;18327:275;;-1:-1:-1;18327:275:1:o;18733:128::-;18773:3;18804:1;18800:6;18797:1;18794:13;18791:39;;;18810:18;;:::i;:::-;-1:-1:-1;18846:9:1;;18733:128::o;18866:120::-;18906:1;18932;18922:35;;18937:18;;:::i;:::-;-1:-1:-1;18971:9:1;;18866:120::o;18991:168::-;19031:7;19097:1;19093;19089:6;19085:14;19082:1;19079:21;19074:1;19067:9;19060:17;19056:45;19053:71;;;19104:18;;:::i;:::-;-1:-1:-1;19144:9:1;;18991:168::o;19164:125::-;19204:4;19232:1;19229;19226:8;19223:34;;;19237:18;;:::i;:::-;-1:-1:-1;19274:9:1;;19164:125::o;19294:258::-;19366:1;19376:113;19390:6;19387:1;19384:13;19376:113;;;19466:11;;;19460:18;19447:11;;;19440:39;19412:2;19405:10;19376:113;;;19507:6;19504:1;19501:13;19498:48;;;-1:-1:-1;;19542:1:1;19524:16;;19517:27;19294:258::o;19557:380::-;19636:1;19632:12;;;;19679;;;19700:61;;19754:4;19746:6;19742:17;19732:27;;19700:61;19807:2;19799:6;19796:14;19776:18;19773:38;19770:161;;;19853:10;19848:3;19844:20;19841:1;19834:31;19888:4;19885:1;19878:15;19916:4;19913:1;19906:15;19770:161;;19557:380;;;:::o;19942:135::-;19981:3;-1:-1:-1;;20002:17:1;;19999:43;;;20022:18;;:::i;:::-;-1:-1:-1;20069:1:1;20058:13;;19942:135::o;20082:112::-;20114:1;20140;20130:35;;20145:18;;:::i;:::-;-1:-1:-1;20179:9:1;;20082:112::o;20199:127::-;20260:10;20255:3;20251:20;20248:1;20241:31;20291:4;20288:1;20281:15;20315:4;20312:1;20305:15;20331:127;20392:10;20387:3;20383:20;20380:1;20373:31;20423:4;20420:1;20413:15;20447:4;20444:1;20437:15;20463:127;20524:10;20519:3;20515:20;20512:1;20505:31;20555:4;20552:1;20545:15;20579:4;20576:1;20569:15;20595:127;20656:10;20651:3;20647:20;20644:1;20637:31;20687:4;20684:1;20677:15;20711:4;20708:1;20701:15;20727:131;-1:-1:-1;;;;;20802:31:1;;20792:42;;20782:70;;20848:1;20845;20838:12;20863:131;-1:-1:-1;;;;;;20937:32:1;;20927:43;;20917:71;;20984:1;20981;20974:12

Swarm Source

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