ETH Price: $3,411.41 (-6.94%)

Token

Crypto Poly Wealth Club (CPWC)
 

Overview

Max Total Supply

2,154 CPWC

Holders

726

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 CPWC
0x5bbc1de4a1ce9e097c09271effe23373c1472168
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

CryptoPoly Wealth Club is a private collection of 7,777 wealthy uncles waiting patiently in their respective mansions, wasting no time in being bold and chic.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoPoly

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

//Developer Info:
//Written by Blockchainguy.net
//Email: [email protected]
//Instagram: @sheraz.manzoor

/**
 * @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;
    }
}
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);
    }
}
pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
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);
}
pragma solidity ^0.8.0;

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
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;
    }
}
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;
}
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);
}
pragma solidity ^0.8.0;


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.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 {}
}pragma solidity ^0.8.0;

contract CryptoPoly is Ownable, ERC721 {
    uint public PRESALE_Price = 0.1 ether;
    uint public PUBLICSALE_Price = 0.17 ether;
    uint public maxSupply = 7777;
    uint public totalSupply = 0;
    
    uint public sale_startTime = 1642726800; 
    uint public presale_startTime = 1642467600; 

    uint public presale_Limit = 3300;

    bool public pause_sale = false;
    address public dev_address = 0xCE1b9DDa031EfF757254c362E894605b02BD0861;

    string public baseURI = "https://www.thecryptopoly.com/api/nft/";
    mapping(address => bool) private presaleList;
    mapping(address => uint) public presale_mint_count;
    mapping(address => uint) public publicsale_mint_count;
    constructor() ERC721("Crypto Poly Wealth Club", "CPWC"){}

   function buy(uint _count) public payable{
        require(_count > 0, "mint at least one token");
        require(_count <= 7, "Max 7 Allowed in 1 Transaction.");
        require(totalSupply + _count <= maxSupply, "Not enough tokens left");
        require(msg.value == PUBLICSALE_Price * _count, "incorrect ether amount");
        require(block.timestamp >= sale_startTime,"Sale not Started Yet.");
        require(pause_sale == false, "Sale is Paused.");
        require(publicsale_mint_count[msg.sender] + _count <= 7, "One address can't mint more than 7 total.");
        
        for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
            
            publicsale_mint_count[msg.sender] += _count;
            totalSupply += _count;
    }

   function buy_Presale(uint _count) public payable{
        require(_count > 0, "mint at least one token");
        require(_count <= 10, "Max 10 Allowed in 1 Transaction.");
        require(totalSupply + _count <= presale_Limit, "Presale Limit Reached.");
        require(msg.value == PRESALE_Price * _count, "incorrect ether amount");
        require(block.timestamp >= presale_startTime,"Presale have not started yet.");
        require(block.timestamp < sale_startTime,"Presale Ended.");
        require(pause_sale == false, "Sale is Paused.");
        require(presale_mint_count[msg.sender] + _count <= 10, "One address can't mint more than total 10 in presale.");
        require(isWhitelisted(msg.sender), "You are not allowed to mint.");
        
        for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
            
            totalSupply += _count;
            presale_mint_count[msg.sender] += _count;
            presaleList[msg.sender] = false;
    }

    function sendGifts(address[] memory _wallets) external onlyOwner{
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
    }

    function addPresaleList(address[] memory _wallets) public onlyOwner{
        for(uint i; i < _wallets.length; i++)
            presaleList[_wallets[i]] = true;
    }
    
    function isWhitelisted(address _sender) public view returns(bool){
        return presaleList[_sender];
    }
    
    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }
    function setPauseSale(bool temp) external onlyOwner {
        pause_sale = temp;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
    function set_start_time(uint _time) external onlyOwner{
        sale_startTime = _time;
    }
    function set_presale_start_time(uint _time) external onlyOwner{
        presale_startTime = _time;
    }

    function set_presale_limit(uint _limit) external onlyOwner{
        presale_Limit = _limit;
    } 
    function set_presale_price(uint _price) external onlyOwner{
        PRESALE_Price = _price;
    } 
    function set_publicsale_price(uint _price) external onlyOwner{
        PUBLICSALE_Price = _price;
    } 
    function change_dev_address(address _temp) external {
        require(msg.sender == dev_address, "You are not dev.");
        dev_address = _temp;
    }    
    function withdraw() external onlyOwner {
        uint _balance = address(this).balance;
        payable(dev_address).transfer(_balance * 3 / 100); //dev
        payable(msg.sender).transfer(_balance * 97 / 100); //Owner
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRESALE_Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLICSALE_Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy_Presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_temp","type":"address"}],"name":"change_dev_address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"isWhitelisted","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":"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":"pause_sale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale_Limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presale_mint_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale_startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicsale_mint_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale_startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"setPauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"set_presale_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"set_presale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"set_presale_start_time","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"set_publicsale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"set_start_time","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

67016345785d8a000060075567025bf6196bd10000600855611e616009556000600a556361ea0590600b556361e61110600c55610ce4600d55600e80546001600160a81b03191674ce1b9dda031eff757254c362e894605b02bd08610017905560e0604052602660808181529062002a2a60a03980516200008991600f916020909101906200018d565b503480156200009757600080fd5b506040518060400160405280601781526020017f43727970746f20506f6c79205765616c746820436c7562000000000000000000815250604051806040016040528060048152602001634350574360e01b81525062000105620000ff6200013960201b60201c565b6200013d565b81516200011a9060019060208501906200018d565b508051620001309060029060208401906200018d565b50505062000270565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200019b9062000233565b90600052602060002090601f016020900481019282620001bf57600085556200020a565b82601f10620001da57805160ff19168380011785556200020a565b828001600101855582156200020a579182015b828111156200020a578251825591602001919060010190620001ed565b50620002189291506200021c565b5090565b5b808211156200021857600081556001016200021d565b600181811c908216806200024857607f821691505b602082108114156200026a57634e487b7160e01b600052602260045260246000fd5b50919050565b6127aa80620002806000396000f3fe6080604052600436106102515760003560e01c80637abb8efb11610139578063b27b1a6d116100b6578063d5abeb011161007a578063d5abeb01146106d0578063d96a094a146106e6578063e198efdc146106f9578063e985e9c514610719578063ebb3151014610762578063f2fde38b1461078257600080fd5b8063b27b1a6d14610629578063b3f9f98d14610649578063b88d4fde14610676578063c1580cb314610696578063c87b56dd146106b057600080fd5b806395d89b41116100fd57806395d89b411461059e578063a0bcfc7f146105b3578063a22cb465146105d3578063aa29e23f146105f3578063aa5c468e1461061357600080fd5b80637abb8efb146105085780637c8255db1461052d5780637ea006dd1461054d5780638aa328a21461056d5780638da5cb5b1461058057600080fd5b8063405e3682116101d25780636761a45a116101965780636761a45a146104685780636c0360eb1461047e5780636ed4b488146104935780636f07734f146104b357806370a08231146104d3578063715018a6146104f357600080fd5b8063405e3682146103dc57806342842e0e146103fc578063533d80e71461041c5780635ec8defb146104325780636352211e1461044857600080fd5b8063095ea7b311610219578063095ea7b31461033657806318160ddd1461035857806323b872dd1461036e5780633af32abf1461038e5780633ccfd60b146103c757600080fd5b806301ffc9a7146102565780630251c5271461028b57806303158dde146102c657806306fdde03146102dc578063081812fc146102fe575b600080fd5b34801561026257600080fd5b506102766102713660046123be565b6107a2565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102b86102a6366004612195565b60116020526000908152604090205481565b604051908152602001610282565b3480156102d257600080fd5b506102b8600b5481565b3480156102e857600080fd5b506102f16107f4565b60405161028291906124f2565b34801561030a57600080fd5b5061031e610319366004612441565b610886565b6040516001600160a01b039091168152602001610282565b34801561034257600080fd5b506103566103513660046122c5565b610920565b005b34801561036457600080fd5b506102b8600a5481565b34801561037a57600080fd5b506103566103893660046121e3565b610a36565b34801561039a57600080fd5b506102766103a9366004612195565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156103d357600080fd5b50610356610a67565b3480156103e857600080fd5b506103566103f7366004612441565b610b2e565b34801561040857600080fd5b506103566104173660046121e3565b610b5d565b34801561042857600080fd5b506102b8600c5481565b34801561043e57600080fd5b506102b8600d5481565b34801561045457600080fd5b5061031e610463366004612441565b610b78565b34801561047457600080fd5b506102b860075481565b34801561048a57600080fd5b506102f1610bef565b34801561049f57600080fd5b506103566104ae366004612441565b610c7d565b3480156104bf57600080fd5b506103566104ce366004612441565b610cac565b3480156104df57600080fd5b506102b86104ee366004612195565b610cdb565b3480156104ff57600080fd5b50610356610d62565b34801561051457600080fd5b50600e5461031e9061010090046001600160a01b031681565b34801561053957600080fd5b506103566105483660046122ef565b610d98565b34801561055957600080fd5b50610356610568366004612441565b610e91565b61035661057b366004612441565b610ec0565b34801561058c57600080fd5b506000546001600160a01b031661031e565b3480156105aa57600080fd5b506102f1611251565b3480156105bf57600080fd5b506103566105ce3660046123f8565b611260565b3480156105df57600080fd5b506103566105ee36600461229b565b61129d565b3480156105ff57600080fd5b5061035661060e3660046123a3565b611362565b34801561061f57600080fd5b506102b860085481565b34801561063557600080fd5b50610356610644366004612441565b61139f565b34801561065557600080fd5b506102b8610664366004612195565b60126020526000908152604090205481565b34801561068257600080fd5b5061035661069136600461221f565b6113ce565b3480156106a257600080fd5b50600e546102769060ff1681565b3480156106bc57600080fd5b506102f16106cb366004612441565b611406565b3480156106dc57600080fd5b506102b860095481565b6103566106f4366004612441565b6114e1565b34801561070557600080fd5b50610356610714366004612195565b6117a0565b34801561072557600080fd5b506102766107343660046121b0565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561076e57600080fd5b5061035661077d3660046122ef565b61181a565b34801561078e57600080fd5b5061035661079d366004612195565b6118ac565b60006001600160e01b031982166380ac58cd60e01b14806107d357506001600160e01b03198216635b5e139f60e01b145b806107ee57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546108039061269c565b80601f016020809104026020016040519081016040528092919081815260200182805461082f9061269c565b801561087c5780601f106108515761010080835404028352916020019161087c565b820191906000526020600020905b81548152906001019060200180831161085f57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166109045760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061092b82610b78565b9050806001600160a01b0316836001600160a01b031614156109995760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108fb565b336001600160a01b03821614806109b557506109b58133610734565b610a275760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108fb565b610a318383611947565b505050565b610a4033826119b5565b610a5c5760405162461bcd60e51b81526004016108fb9061258c565b610a31838383611aac565b6000546001600160a01b03163314610a915760405162461bcd60e51b81526004016108fb90612557565b600e54479061010090046001600160a01b03166108fc6064610ab484600361263a565b610abe9190612626565b6040518115909202916000818181858888f19350505050158015610ae6573d6000803e3d6000fd5b50336108fc6064610af884606161263a565b610b029190612626565b6040518115909202916000818181858888f19350505050158015610b2a573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610b585760405162461bcd60e51b81526004016108fb90612557565b600855565b610a31838383604051806020016040528060008152506113ce565b6000818152600360205260408120546001600160a01b0316806107ee5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108fb565b600f8054610bfc9061269c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c289061269c565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b505050505081565b6000546001600160a01b03163314610ca75760405162461bcd60e51b81526004016108fb90612557565b600c55565b6000546001600160a01b03163314610cd65760405162461bcd60e51b81526004016108fb90612557565b600d55565b60006001600160a01b038216610d465760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108fb565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610d8c5760405162461bcd60e51b81526004016108fb90612557565b610d966000611c4c565b565b6000546001600160a01b03163314610dc25760405162461bcd60e51b81526004016108fb90612557565b6009548151600a54610dd4919061260e565b1115610e1b5760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108fb565b60005b8151811015610e7557610e63828281518110610e3c57610e3c612732565b602002602001015182600a546001610e54919061260e565b610e5e919061260e565b611c9c565b80610e6d816126d7565b915050610e1e565b508051600a6000828254610e89919061260e565b909155505050565b6000546001600160a01b03163314610ebb5760405162461bcd60e51b81526004016108fb90612557565b600755565b60008111610f0a5760405162461bcd60e51b815260206004820152601760248201527636b4b73a1030ba103632b0b9ba1037b732903a37b5b2b760491b60448201526064016108fb565b600a811115610f5b5760405162461bcd60e51b815260206004820181905260248201527f4d617820313020416c6c6f77656420696e2031205472616e73616374696f6e2e60448201526064016108fb565b600d5481600a54610f6c919061260e565b1115610fb35760405162461bcd60e51b8152602060048201526016602482015275283932b9b0b632902634b6b4ba102932b0b1b432b21760511b60448201526064016108fb565b80600754610fc1919061263a565b34146110085760405162461bcd60e51b81526020600482015260166024820152751a5b98dbdc9c9958dd08195d1a195c88185b5bdd5b9d60521b60448201526064016108fb565b600c5442101561105a5760405162461bcd60e51b815260206004820152601d60248201527f50726573616c652068617665206e6f742073746172746564207965742e00000060448201526064016108fb565b600b54421061109c5760405162461bcd60e51b815260206004820152600e60248201526d283932b9b0b6329022b73232b21760911b60448201526064016108fb565b600e5460ff16156110e15760405162461bcd60e51b815260206004820152600f60248201526e29b0b6329034b9902830bab9b2b21760891b60448201526064016108fb565b33600090815260116020526040902054600a906110ff90839061260e565b111561116b5760405162461bcd60e51b815260206004820152603560248201527f4f6e6520616464726573732063616e2774206d696e74206d6f7265207468616e604482015274103a37ba30b61018981034b710383932b9b0b6329760591b60648201526084016108fb565b3360009081526010602052604090205460ff166111ca5760405162461bcd60e51b815260206004820152601c60248201527f596f7520617265206e6f7420616c6c6f77656420746f206d696e742e0000000060448201526064016108fb565b60005b818110156111fb576111e93382600a546001610e54919061260e565b806111f3816126d7565b9150506111cd565b5080600a600082825461120e919061260e565b9091555050336000908152601160205260408120805483929061123290849061260e565b9091555050336000908152601060205260409020805460ff1916905550565b6060600280546108039061269c565b6000546001600160a01b0316331461128a5760405162461bcd60e51b81526004016108fb90612557565b8051610b2a90600f906020840190612078565b6001600160a01b0382163314156112f65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108fb565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b0316331461138c5760405162461bcd60e51b81526004016108fb90612557565b600e805460ff1916911515919091179055565b6000546001600160a01b031633146113c95760405162461bcd60e51b81526004016108fb90612557565b600b55565b6113d833836119b5565b6113f45760405162461bcd60e51b81526004016108fb9061258c565b61140084848484611cb6565b50505050565b6000818152600360205260409020546060906001600160a01b03166114855760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108fb565b600061148f611ce9565b905060008151116114af57604051806020016040528060008152506114da565b806114b984611cf8565b6040516020016114ca929190612486565b6040516020818303038152906040525b9392505050565b6000811161152b5760405162461bcd60e51b815260206004820152601760248201527636b4b73a1030ba103632b0b9ba1037b732903a37b5b2b760491b60448201526064016108fb565b600781111561157c5760405162461bcd60e51b815260206004820152601f60248201527f4d6178203720416c6c6f77656420696e2031205472616e73616374696f6e2e0060448201526064016108fb565b60095481600a5461158d919061260e565b11156115d45760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108fb565b806008546115e2919061263a565b34146116295760405162461bcd60e51b81526020600482015260166024820152751a5b98dbdc9c9958dd08195d1a195c88185b5bdd5b9d60521b60448201526064016108fb565b600b544210156116735760405162461bcd60e51b815260206004820152601560248201527429b0b632903737ba1029ba30b93a32b2102cb2ba1760591b60448201526064016108fb565b600e5460ff16156116b85760405162461bcd60e51b815260206004820152600f60248201526e29b0b6329034b9902830bab9b2b21760891b60448201526064016108fb565b336000908152601260205260409020546007906116d690839061260e565b11156117365760405162461bcd60e51b815260206004820152602960248201527f4f6e6520616464726573732063616e2774206d696e74206d6f7265207468616e604482015268101b903a37ba30b61760b91b60648201526084016108fb565b60005b81811015611767576117553382600a546001610e54919061260e565b8061175f816126d7565b915050611739565b50336000908152601260205260408120805483929061178790849061260e565b9250508190555080600a6000828254610e89919061260e565b600e5461010090046001600160a01b031633146117f25760405162461bcd60e51b815260206004820152601060248201526f2cb7ba9030b932903737ba103232bb1760811b60448201526064016108fb565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146118445760405162461bcd60e51b81526004016108fb90612557565b60005b8151811015610b2a5760016010600084848151811061186857611868612732565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806118a4816126d7565b915050611847565b6000546001600160a01b031633146118d65760405162461bcd60e51b81526004016108fb90612557565b6001600160a01b03811661193b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fb565b61194481611c4c565b50565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061197c82610b78565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b0316611a2e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108fb565b6000611a3983610b78565b9050806001600160a01b0316846001600160a01b03161480611a745750836001600160a01b0316611a6984610886565b6001600160a01b0316145b80611aa457506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611abf82610b78565b6001600160a01b031614611b275760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108fb565b6001600160a01b038216611b895760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108fb565b611b94600082611947565b6001600160a01b0383166000908152600460205260408120805460019290611bbd908490612659565b90915550506001600160a01b0382166000908152600460205260408120805460019290611beb90849061260e565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b2a828260405180602001604052806000815250611df6565b611cc1848484611aac565b611ccd84848484611e29565b6114005760405162461bcd60e51b81526004016108fb90612505565b6060600f80546108039061269c565b606081611d1c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d465780611d30816126d7565b9150611d3f9050600a83612626565b9150611d20565b60008167ffffffffffffffff811115611d6157611d61612748565b6040519080825280601f01601f191660200182016040528015611d8b576020820181803683370190505b5090505b8415611aa457611da0600183612659565b9150611dad600a866126f2565b611db890603061260e565b60f81b818381518110611dcd57611dcd612732565b60200101906001600160f81b031916908160001a905350611def600a86612626565b9450611d8f565b611e008383611f36565b611e0d6000848484611e29565b610a315760405162461bcd60e51b81526004016108fb90612505565b60006001600160a01b0384163b15611f2b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e6d9033908990889088906004016124b5565b602060405180830381600087803b158015611e8757600080fd5b505af1925050508015611eb7575060408051601f3d908101601f19168201909252611eb4918101906123db565b60015b611f11573d808015611ee5576040519150601f19603f3d011682016040523d82523d6000602084013e611eea565b606091505b508051611f095760405162461bcd60e51b81526004016108fb90612505565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611aa4565b506001949350505050565b6001600160a01b038216611f8c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108fb565b6000818152600360205260409020546001600160a01b031615611ff15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108fb565b6001600160a01b038216600090815260046020526040812080546001929061201a90849061260e565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546120849061269c565b90600052602060002090601f0160209004810192826120a657600085556120ec565b82601f106120bf57805160ff19168380011785556120ec565b828001600101855582156120ec579182015b828111156120ec5782518255916020019190600101906120d1565b506120f89291506120fc565b5090565b5b808211156120f857600081556001016120fd565b600067ffffffffffffffff83111561212b5761212b612748565b61213e601f8401601f19166020016125dd565b905082815283838301111561215257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461218057600080fd5b919050565b8035801515811461218057600080fd5b6000602082840312156121a757600080fd5b6114da82612169565b600080604083850312156121c357600080fd5b6121cc83612169565b91506121da60208401612169565b90509250929050565b6000806000606084860312156121f857600080fd5b61220184612169565b925061220f60208501612169565b9150604084013590509250925092565b6000806000806080858703121561223557600080fd5b61223e85612169565b935061224c60208601612169565b925060408501359150606085013567ffffffffffffffff81111561226f57600080fd5b8501601f8101871361228057600080fd5b61228f87823560208401612111565b91505092959194509250565b600080604083850312156122ae57600080fd5b6122b783612169565b91506121da60208401612185565b600080604083850312156122d857600080fd5b6122e183612169565b946020939093013593505050565b6000602080838503121561230257600080fd5b823567ffffffffffffffff8082111561231a57600080fd5b818501915085601f83011261232e57600080fd5b81358181111561234057612340612748565b8060051b91506123518483016125dd565b8181528481019084860184860187018a101561236c57600080fd5b600095505b838610156123965761238281612169565b835260019590950194918601918601612371565b5098975050505050505050565b6000602082840312156123b557600080fd5b6114da82612185565b6000602082840312156123d057600080fd5b81356114da8161275e565b6000602082840312156123ed57600080fd5b81516114da8161275e565b60006020828403121561240a57600080fd5b813567ffffffffffffffff81111561242157600080fd5b8201601f8101841361243257600080fd5b611aa484823560208401612111565b60006020828403121561245357600080fd5b5035919050565b60008151808452612472816020860160208601612670565b601f01601f19169290920160200192915050565b60008351612498818460208801612670565b8351908301906124ac818360208801612670565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124e89083018461245a565b9695505050505050565b6020815260006114da602083018461245a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260657612606612748565b604052919050565b6000821982111561262157612621612706565b500190565b6000826126355761263561271c565b500490565b600081600019048311821515161561265457612654612706565b500290565b60008282101561266b5761266b612706565b500390565b60005b8381101561268b578181015183820152602001612673565b838111156114005750506000910152565b600181811c908216806126b057607f821691505b602082108114156126d157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126eb576126eb612706565b5060010190565b6000826127015761270161271c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461194457600080fdfea26469706673582212204f42804eeae27a1f1161399cc3a4748e4ac391f85ad632119be8f4c61abd94f464736f6c6343000807003368747470733a2f2f7777772e74686563727970746f706f6c792e636f6d2f6170692f6e66742f

Deployed Bytecode

0x6080604052600436106102515760003560e01c80637abb8efb11610139578063b27b1a6d116100b6578063d5abeb011161007a578063d5abeb01146106d0578063d96a094a146106e6578063e198efdc146106f9578063e985e9c514610719578063ebb3151014610762578063f2fde38b1461078257600080fd5b8063b27b1a6d14610629578063b3f9f98d14610649578063b88d4fde14610676578063c1580cb314610696578063c87b56dd146106b057600080fd5b806395d89b41116100fd57806395d89b411461059e578063a0bcfc7f146105b3578063a22cb465146105d3578063aa29e23f146105f3578063aa5c468e1461061357600080fd5b80637abb8efb146105085780637c8255db1461052d5780637ea006dd1461054d5780638aa328a21461056d5780638da5cb5b1461058057600080fd5b8063405e3682116101d25780636761a45a116101965780636761a45a146104685780636c0360eb1461047e5780636ed4b488146104935780636f07734f146104b357806370a08231146104d3578063715018a6146104f357600080fd5b8063405e3682146103dc57806342842e0e146103fc578063533d80e71461041c5780635ec8defb146104325780636352211e1461044857600080fd5b8063095ea7b311610219578063095ea7b31461033657806318160ddd1461035857806323b872dd1461036e5780633af32abf1461038e5780633ccfd60b146103c757600080fd5b806301ffc9a7146102565780630251c5271461028b57806303158dde146102c657806306fdde03146102dc578063081812fc146102fe575b600080fd5b34801561026257600080fd5b506102766102713660046123be565b6107a2565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102b86102a6366004612195565b60116020526000908152604090205481565b604051908152602001610282565b3480156102d257600080fd5b506102b8600b5481565b3480156102e857600080fd5b506102f16107f4565b60405161028291906124f2565b34801561030a57600080fd5b5061031e610319366004612441565b610886565b6040516001600160a01b039091168152602001610282565b34801561034257600080fd5b506103566103513660046122c5565b610920565b005b34801561036457600080fd5b506102b8600a5481565b34801561037a57600080fd5b506103566103893660046121e3565b610a36565b34801561039a57600080fd5b506102766103a9366004612195565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156103d357600080fd5b50610356610a67565b3480156103e857600080fd5b506103566103f7366004612441565b610b2e565b34801561040857600080fd5b506103566104173660046121e3565b610b5d565b34801561042857600080fd5b506102b8600c5481565b34801561043e57600080fd5b506102b8600d5481565b34801561045457600080fd5b5061031e610463366004612441565b610b78565b34801561047457600080fd5b506102b860075481565b34801561048a57600080fd5b506102f1610bef565b34801561049f57600080fd5b506103566104ae366004612441565b610c7d565b3480156104bf57600080fd5b506103566104ce366004612441565b610cac565b3480156104df57600080fd5b506102b86104ee366004612195565b610cdb565b3480156104ff57600080fd5b50610356610d62565b34801561051457600080fd5b50600e5461031e9061010090046001600160a01b031681565b34801561053957600080fd5b506103566105483660046122ef565b610d98565b34801561055957600080fd5b50610356610568366004612441565b610e91565b61035661057b366004612441565b610ec0565b34801561058c57600080fd5b506000546001600160a01b031661031e565b3480156105aa57600080fd5b506102f1611251565b3480156105bf57600080fd5b506103566105ce3660046123f8565b611260565b3480156105df57600080fd5b506103566105ee36600461229b565b61129d565b3480156105ff57600080fd5b5061035661060e3660046123a3565b611362565b34801561061f57600080fd5b506102b860085481565b34801561063557600080fd5b50610356610644366004612441565b61139f565b34801561065557600080fd5b506102b8610664366004612195565b60126020526000908152604090205481565b34801561068257600080fd5b5061035661069136600461221f565b6113ce565b3480156106a257600080fd5b50600e546102769060ff1681565b3480156106bc57600080fd5b506102f16106cb366004612441565b611406565b3480156106dc57600080fd5b506102b860095481565b6103566106f4366004612441565b6114e1565b34801561070557600080fd5b50610356610714366004612195565b6117a0565b34801561072557600080fd5b506102766107343660046121b0565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561076e57600080fd5b5061035661077d3660046122ef565b61181a565b34801561078e57600080fd5b5061035661079d366004612195565b6118ac565b60006001600160e01b031982166380ac58cd60e01b14806107d357506001600160e01b03198216635b5e139f60e01b145b806107ee57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546108039061269c565b80601f016020809104026020016040519081016040528092919081815260200182805461082f9061269c565b801561087c5780601f106108515761010080835404028352916020019161087c565b820191906000526020600020905b81548152906001019060200180831161085f57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166109045760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061092b82610b78565b9050806001600160a01b0316836001600160a01b031614156109995760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108fb565b336001600160a01b03821614806109b557506109b58133610734565b610a275760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108fb565b610a318383611947565b505050565b610a4033826119b5565b610a5c5760405162461bcd60e51b81526004016108fb9061258c565b610a31838383611aac565b6000546001600160a01b03163314610a915760405162461bcd60e51b81526004016108fb90612557565b600e54479061010090046001600160a01b03166108fc6064610ab484600361263a565b610abe9190612626565b6040518115909202916000818181858888f19350505050158015610ae6573d6000803e3d6000fd5b50336108fc6064610af884606161263a565b610b029190612626565b6040518115909202916000818181858888f19350505050158015610b2a573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610b585760405162461bcd60e51b81526004016108fb90612557565b600855565b610a31838383604051806020016040528060008152506113ce565b6000818152600360205260408120546001600160a01b0316806107ee5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108fb565b600f8054610bfc9061269c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c289061269c565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b505050505081565b6000546001600160a01b03163314610ca75760405162461bcd60e51b81526004016108fb90612557565b600c55565b6000546001600160a01b03163314610cd65760405162461bcd60e51b81526004016108fb90612557565b600d55565b60006001600160a01b038216610d465760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108fb565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610d8c5760405162461bcd60e51b81526004016108fb90612557565b610d966000611c4c565b565b6000546001600160a01b03163314610dc25760405162461bcd60e51b81526004016108fb90612557565b6009548151600a54610dd4919061260e565b1115610e1b5760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108fb565b60005b8151811015610e7557610e63828281518110610e3c57610e3c612732565b602002602001015182600a546001610e54919061260e565b610e5e919061260e565b611c9c565b80610e6d816126d7565b915050610e1e565b508051600a6000828254610e89919061260e565b909155505050565b6000546001600160a01b03163314610ebb5760405162461bcd60e51b81526004016108fb90612557565b600755565b60008111610f0a5760405162461bcd60e51b815260206004820152601760248201527636b4b73a1030ba103632b0b9ba1037b732903a37b5b2b760491b60448201526064016108fb565b600a811115610f5b5760405162461bcd60e51b815260206004820181905260248201527f4d617820313020416c6c6f77656420696e2031205472616e73616374696f6e2e60448201526064016108fb565b600d5481600a54610f6c919061260e565b1115610fb35760405162461bcd60e51b8152602060048201526016602482015275283932b9b0b632902634b6b4ba102932b0b1b432b21760511b60448201526064016108fb565b80600754610fc1919061263a565b34146110085760405162461bcd60e51b81526020600482015260166024820152751a5b98dbdc9c9958dd08195d1a195c88185b5bdd5b9d60521b60448201526064016108fb565b600c5442101561105a5760405162461bcd60e51b815260206004820152601d60248201527f50726573616c652068617665206e6f742073746172746564207965742e00000060448201526064016108fb565b600b54421061109c5760405162461bcd60e51b815260206004820152600e60248201526d283932b9b0b6329022b73232b21760911b60448201526064016108fb565b600e5460ff16156110e15760405162461bcd60e51b815260206004820152600f60248201526e29b0b6329034b9902830bab9b2b21760891b60448201526064016108fb565b33600090815260116020526040902054600a906110ff90839061260e565b111561116b5760405162461bcd60e51b815260206004820152603560248201527f4f6e6520616464726573732063616e2774206d696e74206d6f7265207468616e604482015274103a37ba30b61018981034b710383932b9b0b6329760591b60648201526084016108fb565b3360009081526010602052604090205460ff166111ca5760405162461bcd60e51b815260206004820152601c60248201527f596f7520617265206e6f7420616c6c6f77656420746f206d696e742e0000000060448201526064016108fb565b60005b818110156111fb576111e93382600a546001610e54919061260e565b806111f3816126d7565b9150506111cd565b5080600a600082825461120e919061260e565b9091555050336000908152601160205260408120805483929061123290849061260e565b9091555050336000908152601060205260409020805460ff1916905550565b6060600280546108039061269c565b6000546001600160a01b0316331461128a5760405162461bcd60e51b81526004016108fb90612557565b8051610b2a90600f906020840190612078565b6001600160a01b0382163314156112f65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108fb565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b0316331461138c5760405162461bcd60e51b81526004016108fb90612557565b600e805460ff1916911515919091179055565b6000546001600160a01b031633146113c95760405162461bcd60e51b81526004016108fb90612557565b600b55565b6113d833836119b5565b6113f45760405162461bcd60e51b81526004016108fb9061258c565b61140084848484611cb6565b50505050565b6000818152600360205260409020546060906001600160a01b03166114855760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108fb565b600061148f611ce9565b905060008151116114af57604051806020016040528060008152506114da565b806114b984611cf8565b6040516020016114ca929190612486565b6040516020818303038152906040525b9392505050565b6000811161152b5760405162461bcd60e51b815260206004820152601760248201527636b4b73a1030ba103632b0b9ba1037b732903a37b5b2b760491b60448201526064016108fb565b600781111561157c5760405162461bcd60e51b815260206004820152601f60248201527f4d6178203720416c6c6f77656420696e2031205472616e73616374696f6e2e0060448201526064016108fb565b60095481600a5461158d919061260e565b11156115d45760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108fb565b806008546115e2919061263a565b34146116295760405162461bcd60e51b81526020600482015260166024820152751a5b98dbdc9c9958dd08195d1a195c88185b5bdd5b9d60521b60448201526064016108fb565b600b544210156116735760405162461bcd60e51b815260206004820152601560248201527429b0b632903737ba1029ba30b93a32b2102cb2ba1760591b60448201526064016108fb565b600e5460ff16156116b85760405162461bcd60e51b815260206004820152600f60248201526e29b0b6329034b9902830bab9b2b21760891b60448201526064016108fb565b336000908152601260205260409020546007906116d690839061260e565b11156117365760405162461bcd60e51b815260206004820152602960248201527f4f6e6520616464726573732063616e2774206d696e74206d6f7265207468616e604482015268101b903a37ba30b61760b91b60648201526084016108fb565b60005b81811015611767576117553382600a546001610e54919061260e565b8061175f816126d7565b915050611739565b50336000908152601260205260408120805483929061178790849061260e565b9250508190555080600a6000828254610e89919061260e565b600e5461010090046001600160a01b031633146117f25760405162461bcd60e51b815260206004820152601060248201526f2cb7ba9030b932903737ba103232bb1760811b60448201526064016108fb565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146118445760405162461bcd60e51b81526004016108fb90612557565b60005b8151811015610b2a5760016010600084848151811061186857611868612732565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806118a4816126d7565b915050611847565b6000546001600160a01b031633146118d65760405162461bcd60e51b81526004016108fb90612557565b6001600160a01b03811661193b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fb565b61194481611c4c565b50565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061197c82610b78565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b0316611a2e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108fb565b6000611a3983610b78565b9050806001600160a01b0316846001600160a01b03161480611a745750836001600160a01b0316611a6984610886565b6001600160a01b0316145b80611aa457506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611abf82610b78565b6001600160a01b031614611b275760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108fb565b6001600160a01b038216611b895760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108fb565b611b94600082611947565b6001600160a01b0383166000908152600460205260408120805460019290611bbd908490612659565b90915550506001600160a01b0382166000908152600460205260408120805460019290611beb90849061260e565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b2a828260405180602001604052806000815250611df6565b611cc1848484611aac565b611ccd84848484611e29565b6114005760405162461bcd60e51b81526004016108fb90612505565b6060600f80546108039061269c565b606081611d1c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d465780611d30816126d7565b9150611d3f9050600a83612626565b9150611d20565b60008167ffffffffffffffff811115611d6157611d61612748565b6040519080825280601f01601f191660200182016040528015611d8b576020820181803683370190505b5090505b8415611aa457611da0600183612659565b9150611dad600a866126f2565b611db890603061260e565b60f81b818381518110611dcd57611dcd612732565b60200101906001600160f81b031916908160001a905350611def600a86612626565b9450611d8f565b611e008383611f36565b611e0d6000848484611e29565b610a315760405162461bcd60e51b81526004016108fb90612505565b60006001600160a01b0384163b15611f2b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e6d9033908990889088906004016124b5565b602060405180830381600087803b158015611e8757600080fd5b505af1925050508015611eb7575060408051601f3d908101601f19168201909252611eb4918101906123db565b60015b611f11573d808015611ee5576040519150601f19603f3d011682016040523d82523d6000602084013e611eea565b606091505b508051611f095760405162461bcd60e51b81526004016108fb90612505565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611aa4565b506001949350505050565b6001600160a01b038216611f8c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108fb565b6000818152600360205260409020546001600160a01b031615611ff15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108fb565b6001600160a01b038216600090815260046020526040812080546001929061201a90849061260e565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546120849061269c565b90600052602060002090601f0160209004810192826120a657600085556120ec565b82601f106120bf57805160ff19168380011785556120ec565b828001600101855582156120ec579182015b828111156120ec5782518255916020019190600101906120d1565b506120f89291506120fc565b5090565b5b808211156120f857600081556001016120fd565b600067ffffffffffffffff83111561212b5761212b612748565b61213e601f8401601f19166020016125dd565b905082815283838301111561215257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461218057600080fd5b919050565b8035801515811461218057600080fd5b6000602082840312156121a757600080fd5b6114da82612169565b600080604083850312156121c357600080fd5b6121cc83612169565b91506121da60208401612169565b90509250929050565b6000806000606084860312156121f857600080fd5b61220184612169565b925061220f60208501612169565b9150604084013590509250925092565b6000806000806080858703121561223557600080fd5b61223e85612169565b935061224c60208601612169565b925060408501359150606085013567ffffffffffffffff81111561226f57600080fd5b8501601f8101871361228057600080fd5b61228f87823560208401612111565b91505092959194509250565b600080604083850312156122ae57600080fd5b6122b783612169565b91506121da60208401612185565b600080604083850312156122d857600080fd5b6122e183612169565b946020939093013593505050565b6000602080838503121561230257600080fd5b823567ffffffffffffffff8082111561231a57600080fd5b818501915085601f83011261232e57600080fd5b81358181111561234057612340612748565b8060051b91506123518483016125dd565b8181528481019084860184860187018a101561236c57600080fd5b600095505b838610156123965761238281612169565b835260019590950194918601918601612371565b5098975050505050505050565b6000602082840312156123b557600080fd5b6114da82612185565b6000602082840312156123d057600080fd5b81356114da8161275e565b6000602082840312156123ed57600080fd5b81516114da8161275e565b60006020828403121561240a57600080fd5b813567ffffffffffffffff81111561242157600080fd5b8201601f8101841361243257600080fd5b611aa484823560208401612111565b60006020828403121561245357600080fd5b5035919050565b60008151808452612472816020860160208601612670565b601f01601f19169290920160200192915050565b60008351612498818460208801612670565b8351908301906124ac818360208801612670565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124e89083018461245a565b9695505050505050565b6020815260006114da602083018461245a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260657612606612748565b604052919050565b6000821982111561262157612621612706565b500190565b6000826126355761263561271c565b500490565b600081600019048311821515161561265457612654612706565b500290565b60008282101561266b5761266b612706565b500390565b60005b8381101561268b578181015183820152602001612673565b838111156114005750506000910152565b600181811c908216806126b057607f821691505b602082108114156126d157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126eb576126eb612706565b5060010190565b6000826127015761270161271c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461194457600080fdfea26469706673582212204f42804eeae27a1f1161399cc3a4748e4ac391f85ad632119be8f4c61abd94f464736f6c63430008070033

Deployed Bytecode Sourcemap

34526:4468:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22380:305;;;;;;;;;;-1:-1:-1;22380:305:0;;;;;:::i;:::-;;:::i;:::-;;;6646:14:1;;6639:22;6621:41;;6609:2;6594:18;22380:305:0;;;;;;;;35118:50;;;;;;;;;;-1:-1:-1;35118:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18831:25:1;;;18819:2;18804:18;35118:50:0;18685:177:1;34739:39:0;;;;;;;;;;;;;;;;23325:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24884:221::-;;;;;;;;;;-1:-1:-1;24884:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5944:32:1;;;5926:51;;5914:2;5899:18;24884:221:0;5780:203:1;24407:411:0;;;;;;;;;;-1:-1:-1;24407:411:0;;;;;:::i;:::-;;:::i;:::-;;34699:27;;;;;;;;;;;;;;;;25774:339;;;;;;;;;;-1:-1:-1;25774:339:0;;;;;:::i;:::-;;:::i;37629:111::-;;;;;;;;;;-1:-1:-1;37629:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;37712:20:0;37689:4;37712:20;;;:11;:20;;;;;;;;;37629:111;38762:229;;;;;;;;;;;;;:::i;38485:105::-;;;;;;;;;;-1:-1:-1;38485:105:0;;;;;:::i;:::-;;:::i;26184:185::-;;;;;;;;;;-1:-1:-1;26184:185:0;;;;;:::i;:::-;;:::i;34786:42::-;;;;;;;;;;;;;;;;34838:32;;;;;;;;;;;;;;;;23019:239;;;;;;;;;;-1:-1:-1;23019:239:0;;;;;:::i;:::-;;:::i;34572:37::-;;;;;;;;;;;;;;;;34996:64;;;;;;;;;;;;;:::i;38159:106::-;;;;;;;;;;-1:-1:-1;38159:106:0;;;;;:::i;:::-;;:::i;38273:99::-;;;;;;;;;;-1:-1:-1;38273:99:0;;;;;:::i;:::-;;:::i;22749:208::-;;;;;;;;;;-1:-1:-1;22749:208:0;;;;;:::i;:::-;;:::i;14227:94::-;;;;;;;;;;;;;:::i;34916:71::-;;;;;;;;;;-1:-1:-1;34916:71:0;;;;;;;-1:-1:-1;;;;;34916:71:0;;;37131:310;;;;;;;;;;-1:-1:-1;37131:310:0;;;;;:::i;:::-;;:::i;38379:99::-;;;;;;;;;;-1:-1:-1;38379:99:0;;;;;:::i;:::-;;:::i;36104:1019::-;;;;;;:::i;:::-;;:::i;13576:87::-;;;;;;;;;;-1:-1:-1;13622:7:0;13649:6;-1:-1:-1;;;;;13649:6:0;13576:87;;23494:104;;;;;;;;;;;;;:::i;37752:92::-;;;;;;;;;;-1:-1:-1;37752:92:0;;;;;:::i;:::-;;:::i;25177:295::-;;;;;;;;;;-1:-1:-1;25177:295:0;;;;;:::i;:::-;;:::i;37850:88::-;;;;;;;;;;-1:-1:-1;37850:88:0;;;;;:::i;:::-;;:::i;34616:41::-;;;;;;;;;;;;;;;;38058:95;;;;;;;;;;-1:-1:-1;38058:95:0;;;;;:::i;:::-;;:::i;35175:53::-;;;;;;;;;;-1:-1:-1;35175:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;26440:328;;;;;;;;;;-1:-1:-1;26440:328:0;;;;;:::i;:::-;;:::i;34879:30::-;;;;;;;;;;-1:-1:-1;34879:30:0;;;;;;;;23669:334;;;;;;;;;;-1:-1:-1;23669:334:0;;;;;:::i;:::-;;:::i;34664:28::-;;;;;;;;;;;;;;;;35299:798;;;;;;:::i;:::-;;:::i;38597:155::-;;;;;;;;;;-1:-1:-1;38597:155:0;;;;;:::i;:::-;;:::i;25543:164::-;;;;;;;;;;-1:-1:-1;25543:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25664:25:0;;;25640:4;25664:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25543:164;37449:168;;;;;;;;;;-1:-1:-1;37449:168:0;;;;;:::i;:::-;;:::i;14476:192::-;;;;;;;;;;-1:-1:-1;14476:192:0;;;;;:::i;:::-;;:::i;22380:305::-;22482:4;-1:-1:-1;;;;;;22519:40:0;;-1:-1:-1;;;22519:40:0;;:105;;-1:-1:-1;;;;;;;22576:48:0;;-1:-1:-1;;;22576:48:0;22519:105;:158;;;-1:-1:-1;;;;;;;;;;15690:40:0;;;22641:36;22499:178;22380:305;-1:-1:-1;;22380:305:0:o;23325:100::-;23379:13;23412:5;23405:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23325:100;:::o;24884:221::-;24960:7;28367:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28367:16:0;24980:73;;;;-1:-1:-1;;;24980:73:0;;13238:2:1;24980:73:0;;;13220:21:1;13277:2;13257:18;;;13250:30;13316:34;13296:18;;;13289:62;-1:-1:-1;;;13367:18:1;;;13360:42;13419:19;;24980:73:0;;;;;;;;;-1:-1:-1;25073:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25073:24:0;;24884:221::o;24407:411::-;24488:13;24504:23;24519:7;24504:14;:23::i;:::-;24488:39;;24552:5;-1:-1:-1;;;;;24546:11:0;:2;-1:-1:-1;;;;;24546:11:0;;;24538:57;;;;-1:-1:-1;;;24538:57:0;;15546:2:1;24538:57:0;;;15528:21:1;15585:2;15565:18;;;15558:30;15624:34;15604:18;;;15597:62;-1:-1:-1;;;15675:18:1;;;15668:31;15716:19;;24538:57:0;15344:397:1;24538:57:0;796:10;-1:-1:-1;;;;;24630:21:0;;;;:62;;-1:-1:-1;24655:37:0;24672:5;796:10;25543:164;:::i;24655:37::-;24608:168;;;;-1:-1:-1;;;24608:168:0;;10858:2:1;24608:168:0;;;10840:21:1;10897:2;10877:18;;;10870:30;10936:34;10916:18;;;10909:62;11007:26;10987:18;;;10980:54;11051:19;;24608:168:0;10656:420:1;24608:168:0;24789:21;24798:2;24802:7;24789:8;:21::i;:::-;24477:341;24407:411;;:::o;25774:339::-;25969:41;796:10;26002:7;25969:18;:41::i;:::-;25961:103;;;;-1:-1:-1;;;25961:103:0;;;;;;;:::i;:::-;26077:28;26087:4;26093:2;26097:7;26077:9;:28::i;38762:229::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;38868:11:::1;::::0;38828:21:::1;::::0;38868:11:::1;::::0;::::1;-1:-1:-1::0;;;;;38868:11:0::1;38860:49;38905:3;38890:12;38828:21:::0;38901:1:::1;38890:12;:::i;:::-;:18;;;;:::i;:::-;38860:49;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;38934:10:0::1;38926:49;38971:3;38955:13;:8:::0;38966:2:::1;38955:13;:::i;:::-;:19;;;;:::i;:::-;38926:49;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38801:190;38762:229::o:0;38485:105::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;38557:16:::1;:25:::0;38485:105::o;26184:185::-;26322:39;26339:4;26345:2;26349:7;26322:39;;;;;;;;;;;;:16;:39::i;23019:239::-;23091:7;23127:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23127:16:0;23162:19;23154:73;;;;-1:-1:-1;;;23154:73:0;;11694:2:1;23154:73:0;;;11676:21:1;11733:2;11713:18;;;11706:30;11772:34;11752:18;;;11745:62;-1:-1:-1;;;11823:18:1;;;11816:39;11872:19;;23154:73:0;11492:405:1;34996:64:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38159:106::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;38232:17:::1;:25:::0;38159:106::o;38273:99::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;38342:13:::1;:22:::0;38273:99::o;22749:208::-;22821:7;-1:-1:-1;;;;;22849:19:0;;22841:74;;;;-1:-1:-1;;;22841:74:0;;11283:2:1;22841:74:0;;;11265:21:1;11322:2;11302:18;;;11295:30;11361:34;11341:18;;;11334:62;-1:-1:-1;;;11412:18:1;;;11405:40;11462:19;;22841:74:0;11081:406:1;22841:74:0;-1:-1:-1;;;;;;22933:16:0;;;;;:9;:16;;;;;;;22749:208::o;14227:94::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;14292:21:::1;14310:1;14292:9;:21::i;:::-;14227:94::o:0;37131:310::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;37247:9:::1;;37228:8;:15;37214:11;;:29;;;;:::i;:::-;:42;;37206:77;;;::::0;-1:-1:-1;;;37206:77:0;;18192:2:1;37206:77:0::1;::::0;::::1;18174:21:1::0;18231:2;18211:18;;;18204:30;-1:-1:-1;;;18250:18:1;;;18243:52;18312:18;;37206:77:0::1;17990:346:1::0;37206:77:0::1;37298:6;37294:98;37314:8;:15;37310:1;:19;37294:98;;;37349:43;37359:8;37368:1;37359:11;;;;;;;;:::i;:::-;;;;;;;37390:1;37372:11;;37386:1;37372:15;;;;:::i;:::-;:19;;;;:::i;:::-;37349:9;:43::i;:::-;37331:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37294:98;;;;37418:8;:15;37403:11;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;37131:310:0:o;38379:99::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;38448:13:::1;:22:::0;38379:99::o;36104:1019::-;36180:1;36171:6;:10;36163:46;;;;-1:-1:-1;;;36163:46:0;;17070:2:1;36163:46:0;;;17052:21:1;17109:2;17089:18;;;17082:30;-1:-1:-1;;;17128:18:1;;;17121:53;17191:18;;36163:46:0;16868:347:1;36163:46:0;36238:2;36228:6;:12;;36220:57;;;;-1:-1:-1;;;36220:57:0;;15948:2:1;36220:57:0;;;15930:21:1;;;15967:18;;;15960:30;16026:34;16006:18;;;15999:62;16078:18;;36220:57:0;15746:356:1;36220:57:0;36320:13;;36310:6;36296:11;;:20;;;;:::i;:::-;:37;;36288:72;;;;-1:-1:-1;;;36288:72:0;;7456:2:1;36288:72:0;;;7438:21:1;7495:2;7475:18;;;7468:30;-1:-1:-1;;;7514:18:1;;;7507:52;7576:18;;36288:72:0;7254:346:1;36288:72:0;36408:6;36392:13;;:22;;;;:::i;:::-;36379:9;:35;36371:70;;;;-1:-1:-1;;;36371:70:0;;10507:2:1;36371:70:0;;;10489:21:1;10546:2;10526:18;;;10519:30;-1:-1:-1;;;10565:18:1;;;10558:52;10627:18;;36371:70:0;10305:346:1;36371:70:0;36479:17;;36460:15;:36;;36452:77;;;;-1:-1:-1;;;36452:77:0;;14012:2:1;36452:77:0;;;13994:21:1;14051:2;14031:18;;;14024:30;14090:31;14070:18;;;14063:59;14139:18;;36452:77:0;13810:353:1;36452:77:0;36566:14;;36548:15;:32;36540:58;;;;-1:-1:-1;;;36540:58:0;;16309:2:1;36540:58:0;;;16291:21:1;16348:2;16328:18;;;16321:30;-1:-1:-1;;;16367:18:1;;;16360:44;16421:18;;36540:58:0;16107:338:1;36540:58:0;36617:10;;;;:19;36609:47;;;;-1:-1:-1;;;36609:47:0;;18543:2:1;36609:47:0;;;18525:21:1;18582:2;18562:18;;;18555:30;-1:-1:-1;;;18601:18:1;;;18594:45;18656:18;;36609:47:0;18341:339:1;36609:47:0;36694:10;36675:30;;;;:18;:30;;;;;;36718:2;;36675:39;;36708:6;;36675:39;:::i;:::-;:45;;36667:111;;;;-1:-1:-1;;;36667:111:0;;12104:2:1;36667:111:0;;;12086:21:1;12143:2;12123:18;;;12116:30;12182:34;12162:18;;;12155:62;-1:-1:-1;;;12233:18:1;;;12226:51;12294:19;;36667:111:0;11902:417:1;36667:111:0;36811:10;37689:4;37712:20;;;:11;:20;;;;;;;;36789:66;;;;-1:-1:-1;;;36789:66:0;;7099:2:1;36789:66:0;;;7081:21:1;7138:2;7118:18;;;7111:30;7177;7157:18;;;7150:58;7225:18;;36789:66:0;6897:352:1;36789:66:0;36880:6;36876:88;36896:6;36892:1;:10;36876:88;;;36922:42;36932:10;36962:1;36944:11;;36958:1;36944:15;;;;:::i;36922:42::-;36904:3;;;;:::i;:::-;;;;36876:88;;;;37008:6;36993:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;37048:10:0;37029:30;;;;:18;:30;;;;;:40;;37063:6;;37029:30;:40;;37063:6;;37029:40;:::i;:::-;;;;-1:-1:-1;;37096:10:0;37110:5;37084:23;;;:11;:23;;;;;:31;;-1:-1:-1;;37084:31:0;;;-1:-1:-1;36104:1019:0:o;23494:104::-;23550:13;23583:7;23576:14;;;;;:::i;37752:92::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;37822:14;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;25177:295::-:0;-1:-1:-1;;;;;25280:24:0;;796:10;25280:24;;25272:62;;;;-1:-1:-1;;;25272:62:0;;9395:2:1;25272:62:0;;;9377:21:1;9434:2;9414:18;;;9407:30;9473:27;9453:18;;;9446:55;9518:18;;25272:62:0;9193:349:1;25272:62:0;796:10;25347:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25347:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25347:53:0;;;;;;;;;;25416:48;;6621:41:1;;;25347:42:0;;796:10;25416:48;;6594:18:1;25416:48:0;;;;;;;25177:295;;:::o;37850:88::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;37913:10:::1;:17:::0;;-1:-1:-1;;37913:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37850:88::o;38058:95::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;38123:14:::1;:22:::0;38058:95::o;26440:328::-;26615:41;796:10;26648:7;26615:18;:41::i;:::-;26607:103;;;;-1:-1:-1;;;26607:103:0;;;;;;;:::i;:::-;26721:39;26735:4;26741:2;26745:7;26754:5;26721:13;:39::i;:::-;26440:328;;;;:::o;23669:334::-;28343:4;28367:16;;;:7;:16;;;;;;23742:13;;-1:-1:-1;;;;;28367:16:0;23768:76;;;;-1:-1:-1;;;23768:76:0;;15130:2:1;23768:76:0;;;15112:21:1;15169:2;15149:18;;;15142:30;15208:34;15188:18;;;15181:62;-1:-1:-1;;;15259:18:1;;;15252:45;15314:19;;23768:76:0;14928:411:1;23768:76:0;23857:21;23881:10;:8;:10::i;:::-;23857:34;;23933:1;23915:7;23909:21;:25;:86;;;;;;;;;;;;;;;;;23961:7;23970:18;:7;:16;:18::i;:::-;23944:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23909:86;23902:93;23669:334;-1:-1:-1;;;23669:334:0:o;35299:798::-;35367:1;35358:6;:10;35350:46;;;;-1:-1:-1;;;35350:46:0;;17070:2:1;35350:46:0;;;17052:21:1;17109:2;17089:18;;;17082:30;-1:-1:-1;;;17128:18:1;;;17121:53;17191:18;;35350:46:0;16868:347:1;35350:46:0;35425:1;35415:6;:11;;35407:55;;;;-1:-1:-1;;;35407:55:0;;17832:2:1;35407:55:0;;;17814:21:1;17871:2;17851:18;;;17844:30;17910:33;17890:18;;;17883:61;17961:18;;35407:55:0;17630:355:1;35407:55:0;35505:9;;35495:6;35481:11;;:20;;;;:::i;:::-;:33;;35473:68;;;;-1:-1:-1;;;35473:68:0;;12526:2:1;35473:68:0;;;12508:21:1;12565:2;12545:18;;;12538:30;-1:-1:-1;;;12584:18:1;;;12577:52;12646:18;;35473:68:0;12324:346:1;35473:68:0;35592:6;35573:16;;:25;;;;:::i;:::-;35560:9;:38;35552:73;;;;-1:-1:-1;;;35552:73:0;;10507:2:1;35552:73:0;;;10489:21:1;10546:2;10526:18;;;10519:30;-1:-1:-1;;;10565:18:1;;;10558:52;10627:18;;35552:73:0;10305:346:1;35552:73:0;35663:14;;35644:15;:33;;35636:66;;;;-1:-1:-1;;;35636:66:0;;14370:2:1;35636:66:0;;;14352:21:1;14409:2;14389:18;;;14382:30;-1:-1:-1;;;14428:18:1;;;14421:51;14489:18;;35636:66:0;14168:345:1;35636:66:0;35721:10;;;;:19;35713:47;;;;-1:-1:-1;;;35713:47:0;;18543:2:1;35713:47:0;;;18525:21:1;18582:2;18562:18;;;18555:30;-1:-1:-1;;;18601:18:1;;;18594:45;18656:18;;35713:47:0;18341:339:1;35713:47:0;35801:10;35779:33;;;;:21;:33;;;;;;35825:1;;35779:42;;35815:6;;35779:42;:::i;:::-;:47;;35771:101;;;;-1:-1:-1;;;35771:101:0;;17422:2:1;35771:101:0;;;17404:21:1;17461:2;17441:18;;;17434:30;17500:34;17480:18;;;17473:62;-1:-1:-1;;;17551:18:1;;;17544:39;17600:19;;35771:101:0;17220:405:1;35771:101:0;35897:6;35893:88;35913:6;35909:1;:10;35893:88;;;35939:42;35949:10;35979:1;35961:11;;35975:1;35961:15;;;;:::i;35939:42::-;35921:3;;;;:::i;:::-;;;;35893:88;;;-1:-1:-1;36032:10:0;36010:33;;;;:21;:33;;;;;:43;;36047:6;;36010:33;:43;;36047:6;;36010:43;:::i;:::-;;;;;;;;36083:6;36068:11;;:21;;;;;;;:::i;38597:155::-;38682:11;;;;;-1:-1:-1;;;;;38682:11:0;38668:10;:25;38660:54;;;;-1:-1:-1;;;38660:54:0;;9749:2:1;38660:54:0;;;9731:21:1;9788:2;9768:18;;;9761:30;-1:-1:-1;;;9807:18:1;;;9800:46;9863:18;;38660:54:0;9547:340:1;38660:54:0;38725:11;:19;;-1:-1:-1;;;;;38725:19:0;;;;;-1:-1:-1;;;;;;38725:19:0;;;;;;;;;38597:155::o;37449:168::-;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;37531:6:::1;37527:82;37543:8;:15;37539:1;:19;37527:82;;;37605:4;37578:11;:24;37590:8;37599:1;37590:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;37578:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;37578:24:0;:31;;-1:-1:-1;;37578:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37560:3;::::1;::::0;::::1;:::i;:::-;;;;37527:82;;14476:192:::0;13622:7;13649:6;-1:-1:-1;;;;;13649:6:0;796:10;13796:23;13788:68;;;;-1:-1:-1;;;13788:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14565:22:0;::::1;14557:73;;;::::0;-1:-1:-1;;;14557:73:0;;8226:2:1;14557:73:0::1;::::0;::::1;8208:21:1::0;8265:2;8245:18;;;8238:30;8304:34;8284:18;;;8277:62;-1:-1:-1;;;8355:18:1;;;8348:36;8401:19;;14557:73:0::1;8024:402:1::0;14557:73:0::1;14641:19;14651:8;14641:9;:19::i;:::-;14476:192:::0;:::o;32260:174::-;32335:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32335:29:0;-1:-1:-1;;;;;32335:29:0;;;;;;;;:24;;32389:23;32335:24;32389:14;:23::i;:::-;-1:-1:-1;;;;;32380:46:0;;;;;;;;;;;32260:174;;:::o;28572:348::-;28665:4;28367:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28367:16:0;28682:73;;;;-1:-1:-1;;;28682:73:0;;10094:2:1;28682:73:0;;;10076:21:1;10133:2;10113:18;;;10106:30;10172:34;10152:18;;;10145:62;-1:-1:-1;;;10223:18:1;;;10216:42;10275:19;;28682:73:0;9892:408:1;28682:73:0;28766:13;28782:23;28797:7;28782:14;:23::i;:::-;28766:39;;28835:5;-1:-1:-1;;;;;28824:16:0;:7;-1:-1:-1;;;;;28824:16:0;;:51;;;;28868:7;-1:-1:-1;;;;;28844:31:0;:20;28856:7;28844:11;:20::i;:::-;-1:-1:-1;;;;;28844:31:0;;28824:51;:87;;;-1:-1:-1;;;;;;25664:25:0;;;25640:4;25664:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28879:32;28816:96;28572:348;-1:-1:-1;;;;28572:348:0:o;31564:578::-;31723:4;-1:-1:-1;;;;;31696:31:0;:23;31711:7;31696:14;:23::i;:::-;-1:-1:-1;;;;;31696:31:0;;31688:85;;;;-1:-1:-1;;;31688:85:0;;14720:2:1;31688:85:0;;;14702:21:1;14759:2;14739:18;;;14732:30;14798:34;14778:18;;;14771:62;-1:-1:-1;;;14849:18:1;;;14842:39;14898:19;;31688:85:0;14518:405:1;31688:85:0;-1:-1:-1;;;;;31792:16:0;;31784:65;;;;-1:-1:-1;;;31784:65:0;;8990:2:1;31784:65:0;;;8972:21:1;9029:2;9009:18;;;9002:30;9068:34;9048:18;;;9041:62;-1:-1:-1;;;9119:18:1;;;9112:34;9163:19;;31784:65:0;8788:400:1;31784:65:0;31966:29;31983:1;31987:7;31966:8;:29::i;:::-;-1:-1:-1;;;;;32008:15:0;;;;;;:9;:15;;;;;:20;;32027:1;;32008:15;:20;;32027:1;;32008:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32039:13:0;;;;;;:9;:13;;;;;:18;;32056:1;;32039:13;:18;;32056:1;;32039:18;:::i;:::-;;;;-1:-1:-1;;32068:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32068:21:0;-1:-1:-1;;;;;32068:21:0;;;;;;;;;32107:27;;32068:16;;32107:27;;;;;;;31564:578;;;:::o;14676:173::-;14732:16;14751:6;;-1:-1:-1;;;;;14768:17:0;;;-1:-1:-1;;;;;;14768:17:0;;;;;;14801:40;;14751:6;;;;;;;14801:40;;14732:16;14801:40;14721:128;14676:173;:::o;29262:110::-;29338:26;29348:2;29352:7;29338:26;;;;;;;;;;;;:9;:26::i;27650:315::-;27807:28;27817:4;27823:2;27827:7;27807:9;:28::i;:::-;27854:48;27877:4;27883:2;27887:7;27896:5;27854:22;:48::i;:::-;27846:111;;;;-1:-1:-1;;;27846:111:0;;;;;;;:::i;37944:108::-;38004:13;38037:7;38030:14;;;;;:::i;1181:723::-;1237:13;1458:10;1454:53;;-1:-1:-1;;1485:10:0;;;;;;;;;;;;-1:-1:-1;;;1485:10:0;;;;;1181:723::o;1454:53::-;1532:5;1517:12;1573:78;1580:9;;1573:78;;1606:8;;;;:::i;:::-;;-1:-1:-1;1629:10:0;;-1:-1:-1;1637:2:0;1629:10;;:::i;:::-;;;1573:78;;;1661:19;1693:6;1683:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1683:17:0;;1661:39;;1711:154;1718:10;;1711:154;;1745:11;1755:1;1745:11;;:::i;:::-;;-1:-1:-1;1814:10:0;1822:2;1814:5;:10;:::i;:::-;1801:24;;:2;:24;:::i;:::-;1788:39;;1771:6;1778;1771:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1771:56:0;;;;;;;;-1:-1:-1;1842:11:0;1851:2;1842:11;;:::i;:::-;;;1711:154;;29599:321;29729:18;29735:2;29739:7;29729:5;:18::i;:::-;29780:54;29811:1;29815:2;29819:7;29828:5;29780:22;:54::i;:::-;29758:154;;;;-1:-1:-1;;;29758:154:0;;;;;;;:::i;32999:799::-;33154:4;-1:-1:-1;;;;;33175:13:0;;3969:20;4017:8;33171:620;;33211:72;;-1:-1:-1;;;33211:72:0;;-1:-1:-1;;;;;33211:36:0;;;;;:72;;796:10;;33262:4;;33268:7;;33277:5;;33211:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33211:72:0;;;;;;;;-1:-1:-1;;33211:72:0;;;;;;;;;;;;:::i;:::-;;;33207:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33453:13:0;;33449:272;;33496:60;;-1:-1:-1;;;33496:60:0;;;;;;;:::i;33449:272::-;33671:6;33665:13;33656:6;33652:2;33648:15;33641:38;33207:529;-1:-1:-1;;;;;;33334:51:0;-1:-1:-1;;;33334:51:0;;-1:-1:-1;33327:58:0;;33171:620;-1:-1:-1;33775:4:0;32999:799;;;;;;:::o;30256:382::-;-1:-1:-1;;;;;30336:16:0;;30328:61;;;;-1:-1:-1;;;30328:61:0;;12877:2:1;30328:61:0;;;12859:21:1;;;12896:18;;;12889:30;12955:34;12935:18;;;12928:62;13007:18;;30328:61:0;12675:356:1;30328:61:0;28343:4;28367:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28367:16:0;:30;30400:58;;;;-1:-1:-1;;;30400:58:0;;8633:2:1;30400:58:0;;;8615:21:1;8672:2;8652:18;;;8645:30;8711;8691:18;;;8684:58;8759:18;;30400:58:0;8431:352:1;30400:58:0;-1:-1:-1;;;;;30529:13:0;;;;;;:9;:13;;;;;:18;;30546:1;;30529:13;:18;;30546:1;;30529:18;:::i;:::-;;;;-1:-1:-1;;30558:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30558:21:0;-1:-1:-1;;;;;30558:21:0;;;;;;;;30597:33;;30558:16;;;30597:33;;30558:16;;30597:33;30256:382;;:::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:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:160::-;668:20;;724:13;;717:21;707:32;;697:60;;753:1;750;743:12;768:186;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;919:29;938:9;919:29;:::i;959:260::-;1027:6;1035;1088:2;1076:9;1067:7;1063:23;1059:32;1056:52;;;1104:1;1101;1094:12;1056:52;1127:29;1146:9;1127:29;:::i;:::-;1117:39;;1175:38;1209:2;1198:9;1194:18;1175:38;:::i;:::-;1165:48;;959:260;;;;;:::o;1224:328::-;1301:6;1309;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;;1457:38;1491:2;1480:9;1476:18;1457:38;:::i;:::-;1447:48;;1542:2;1531:9;1527:18;1514:32;1504:42;;1224:328;;;;;:::o;1557:666::-;1652:6;1660;1668;1676;1729:3;1717:9;1708:7;1704:23;1700:33;1697:53;;;1746:1;1743;1736:12;1697:53;1769:29;1788:9;1769:29;:::i;:::-;1759:39;;1817:38;1851:2;1840:9;1836:18;1817:38;:::i;:::-;1807:48;;1902:2;1891:9;1887:18;1874:32;1864:42;;1957:2;1946:9;1942:18;1929:32;1984:18;1976:6;1973:30;1970:50;;;2016:1;2013;2006:12;1970:50;2039:22;;2092:4;2084:13;;2080:27;-1:-1:-1;2070:55:1;;2121:1;2118;2111:12;2070:55;2144:73;2209:7;2204:2;2191:16;2186:2;2182;2178:11;2144:73;:::i;:::-;2134:83;;;1557:666;;;;;;;:::o;2228:254::-;2293:6;2301;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;2393:29;2412:9;2393:29;:::i;:::-;2383:39;;2441:35;2472:2;2461:9;2457:18;2441:35;:::i;2487:254::-;2555:6;2563;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2655:29;2674:9;2655:29;:::i;:::-;2645:39;2731:2;2716:18;;;;2703:32;;-1:-1:-1;;;2487:254:1:o;2746:963::-;2830:6;2861:2;2904;2892:9;2883:7;2879:23;2875:32;2872:52;;;2920:1;2917;2910:12;2872:52;2960:9;2947:23;2989:18;3030:2;3022:6;3019:14;3016:34;;;3046:1;3043;3036:12;3016:34;3084:6;3073:9;3069:22;3059:32;;3129:7;3122:4;3118:2;3114:13;3110:27;3100:55;;3151:1;3148;3141:12;3100:55;3187:2;3174:16;3209:2;3205;3202:10;3199:36;;;3215:18;;:::i;:::-;3261:2;3258:1;3254:10;3244:20;;3284:28;3308:2;3304;3300:11;3284:28;:::i;:::-;3346:15;;;3377:12;;;;3409:11;;;3439;;;3435:20;;3432:33;-1:-1:-1;3429:53:1;;;3478:1;3475;3468:12;3429:53;3500:1;3491:10;;3510:169;3524:2;3521:1;3518:9;3510:169;;;3581:23;3600:3;3581:23;:::i;:::-;3569:36;;3542:1;3535:9;;;;;3625:12;;;;3657;;3510:169;;;-1:-1:-1;3698:5:1;2746:963;-1:-1:-1;;;;;;;;2746:963:1:o;3714:180::-;3770:6;3823:2;3811:9;3802:7;3798:23;3794:32;3791:52;;;3839:1;3836;3829:12;3791:52;3862:26;3878:9;3862:26;:::i;3899:245::-;3957:6;4010:2;3998:9;3989:7;3985:23;3981:32;3978:52;;;4026:1;4023;4016:12;3978:52;4065:9;4052:23;4084:30;4108:5;4084:30;:::i;4149:249::-;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;4319:9;4313:16;4338:30;4362:5;4338:30;:::i;4403:450::-;4472:6;4525:2;4513:9;4504:7;4500:23;4496:32;4493:52;;;4541:1;4538;4531:12;4493:52;4581:9;4568:23;4614:18;4606:6;4603:30;4600:50;;;4646:1;4643;4636:12;4600:50;4669:22;;4722:4;4714:13;;4710:27;-1:-1:-1;4700:55:1;;4751:1;4748;4741:12;4700:55;4774:73;4839:7;4834:2;4821:16;4816:2;4812;4808:11;4774:73;:::i;4858:180::-;4917:6;4970:2;4958:9;4949:7;4945:23;4941:32;4938:52;;;4986:1;4983;4976:12;4938:52;-1:-1:-1;5009:23:1;;4858:180;-1:-1:-1;4858:180:1:o;5043:257::-;5084:3;5122:5;5116:12;5149:6;5144:3;5137:19;5165:63;5221:6;5214:4;5209:3;5205:14;5198:4;5191:5;5187:16;5165:63;:::i;:::-;5282:2;5261:15;-1:-1:-1;;5257:29:1;5248:39;;;;5289:4;5244:50;;5043:257;-1:-1:-1;;5043:257:1:o;5305:470::-;5484:3;5522:6;5516:13;5538:53;5584:6;5579:3;5572:4;5564:6;5560:17;5538:53;:::i;:::-;5654:13;;5613:16;;;;5676:57;5654:13;5613:16;5710:4;5698:17;;5676:57;:::i;:::-;5749:20;;5305:470;-1:-1:-1;;;;5305:470:1:o;5988:488::-;-1:-1:-1;;;;;6257:15:1;;;6239:34;;6309:15;;6304:2;6289:18;;6282:43;6356:2;6341:18;;6334:34;;;6404:3;6399:2;6384:18;;6377:31;;;6182:4;;6425:45;;6450:19;;6442:6;6425:45;:::i;:::-;6417:53;5988:488;-1:-1:-1;;;;;;5988:488:1:o;6673:219::-;6822:2;6811:9;6804:21;6785:4;6842:44;6882:2;6871:9;6867:18;6859:6;6842:44;:::i;7605:414::-;7807:2;7789:21;;;7846:2;7826:18;;;7819:30;7885:34;7880:2;7865:18;;7858:62;-1:-1:-1;;;7951:2:1;7936:18;;7929:48;8009:3;7994:19;;7605:414::o;13449:356::-;13651:2;13633:21;;;13670:18;;;13663:30;13729:34;13724:2;13709:18;;13702:62;13796:2;13781:18;;13449:356::o;16450:413::-;16652:2;16634:21;;;16691:2;16671:18;;;16664:30;16730:34;16725:2;16710:18;;16703:62;-1:-1:-1;;;16796:2:1;16781:18;;16774:47;16853:3;16838:19;;16450:413::o;18867:275::-;18938:2;18932:9;19003:2;18984:13;;-1:-1:-1;;18980:27:1;18968:40;;19038:18;19023:34;;19059:22;;;19020:62;19017:88;;;19085:18;;:::i;:::-;19121:2;19114:22;18867:275;;-1:-1:-1;18867:275:1:o;19147:128::-;19187:3;19218:1;19214:6;19211:1;19208:13;19205:39;;;19224:18;;:::i;:::-;-1:-1:-1;19260:9:1;;19147:128::o;19280:120::-;19320:1;19346;19336:35;;19351:18;;:::i;:::-;-1:-1:-1;19385:9:1;;19280:120::o;19405:168::-;19445:7;19511:1;19507;19503:6;19499:14;19496:1;19493:21;19488:1;19481:9;19474:17;19470:45;19467:71;;;19518:18;;:::i;:::-;-1:-1:-1;19558:9:1;;19405:168::o;19578:125::-;19618:4;19646:1;19643;19640:8;19637:34;;;19651:18;;:::i;:::-;-1:-1:-1;19688:9:1;;19578:125::o;19708:258::-;19780:1;19790:113;19804:6;19801:1;19798:13;19790:113;;;19880:11;;;19874:18;19861:11;;;19854:39;19826:2;19819:10;19790:113;;;19921:6;19918:1;19915:13;19912:48;;;-1:-1:-1;;19956:1:1;19938:16;;19931:27;19708:258::o;19971:380::-;20050:1;20046:12;;;;20093;;;20114:61;;20168:4;20160:6;20156:17;20146:27;;20114:61;20221:2;20213:6;20210:14;20190:18;20187:38;20184:161;;;20267:10;20262:3;20258:20;20255:1;20248:31;20302:4;20299:1;20292:15;20330:4;20327:1;20320:15;20184:161;;19971:380;;;:::o;20356:135::-;20395:3;-1:-1:-1;;20416:17:1;;20413:43;;;20436:18;;:::i;:::-;-1:-1:-1;20483:1:1;20472:13;;20356:135::o;20496:112::-;20528:1;20554;20544:35;;20559:18;;:::i;:::-;-1:-1:-1;20593:9:1;;20496:112::o;20613:127::-;20674:10;20669:3;20665:20;20662:1;20655:31;20705:4;20702:1;20695:15;20729:4;20726:1;20719:15;20745:127;20806:10;20801:3;20797:20;20794:1;20787:31;20837:4;20834:1;20827:15;20861:4;20858:1;20851:15;20877:127;20938:10;20933:3;20929:20;20926:1;20919:31;20969:4;20966:1;20959:15;20993:4;20990:1;20983:15;21009:127;21070:10;21065:3;21061:20;21058:1;21051:31;21101:4;21098:1;21091:15;21125:4;21122:1;21115:15;21141:131;-1:-1:-1;;;;;;21215:32:1;;21205:43;;21195:71;;21262:1;21259;21252:12

Swarm Source

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