ETH Price: $3,295.25 (-3.38%)
Gas: 14 Gwei

Token

Grown Apes Society (GAS)
 

Overview

Max Total Supply

372 GAS

Holders

194

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
aoijay.eth
Balance
1 GAS
0x605f644264f7c335fa3c5e2166426ac8c9fe43ae
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GrownAS

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/**
 *Submitted for verification at Etherscan.io on 2021-10-13
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

/**
 * @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.m
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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

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

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _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);
    }
}

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


    string public _baseURI;
    /**
     * @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 base = baseURI();
        string memory baseExtension = ".json";
        return bytes(base).length > 0 ? string(abi.encodePacked(base, tokenId.toString(), baseExtension)) : "";
    }

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract DoodleAS {
    function tokensOfOwner(address _owner) public view returns (uint256[] memory){}
}

contract GrownAS is ERC721Enumerable, Ownable
{
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;

    address dasAddress = 0x0e099d20e5f8fAD56C3BDb18Fe499Bc958248251;
    DoodleAS das = DoodleAS(dasAddress);

    uint public constant _TOTALSUPPLY = 5000;
    uint256 public price = 25000000000000000; // 0.025 ETH
    bool public isPaused = true;
    bool public presale = true;

    mapping(address => uint32) freeMintedCount;

    constructor(string memory baseURI) ERC721("Grown Apes Society", "GAS") {
        setBaseURI(baseURI);
    }

    function mint(address _to, uint256 quantity) public payable isSaleOpen {
        require(isPaused == false, "Sale is not active at the moment");
        require(_to != address(0), "Mint to the zero address");

        uint256 maxquantity = 5;
        uint256 temp_price = price;
        if (presale == true) {
            uint256[] memory result = das.tokensOfOwner(msg.sender);
            maxquantity = result.length - freeMintedCount[msg.sender];
            require( result.length > freeMintedCount[msg.sender], "NO DAS TOKENS");
            temp_price = 0;
        }

        require(quantity <= maxquantity, "Exceed max quantity");

        uint256 tokenId = totalSupply();
        
        require(temp_price * quantity <= msg.value, "Wrong amount sent");
        for (uint256 i = 0; i < quantity; i++) {
            tokenId++;
            _safeMint(_to, tokenId);
        }

        if (presale == true) {
            freeMintedCount[msg.sender] += uint32(quantity);
        }
    }

    function DAScountofOwner(address _owner) public view returns (uint256) {
        uint256[] memory result = das.tokensOfOwner(_owner);
        return result.length;
    }

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

    function flipPauseStatus() public onlyOwner {
        isPaused = !isPaused;
    }

    function flipPresaleStatus() public onlyOwner {
        presale = !presale;
    }

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

    function mintByOwner(address _to, uint256 quantity) public onlyOwner{
        require(_to != address(0), "Mint to the zero address");

        uint256 tokenId = totalSupply();
        for (uint256 i = 0; i < quantity; i++) {
            _safeMint(_to, tokenId);
            tokenId++;
        }
    }

    modifier isSaleOpen{
        require(totalSupply() < _TOTALSUPPLY, "Mint wourd exceed totalSupply");
        _;
    }

    function tokensOfOwner(address _owner) public view returns (uint256[] memory)
    {
        uint256 count = balanceOf(_owner);
        uint256[] memory result = new uint256[](count);
        for (uint256 index = 0; index < count; index++) {
            result[index] = tokenOfOwnerByIndex(_owner, index);
        }
        return result;
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"DAScountofOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_TOTALSUPPLY","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":"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":"flipPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052730e099d20e5f8fad56c3bdb18fe499bc958248251600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506658d15e17628000600e556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055503480156200010a57600080fd5b5060405162004f2138038062004f21833981810160405281019062000130919062000498565b6040518060400160405280601281526020017f47726f776e204170657320536f636965747900000000000000000000000000008152506040518060400160405280600381526020017f47415300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001b492919062000376565b508060019080519060200190620001cd92919062000376565b5050506000620001e26200029960201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200029281620002a160201b60201c565b5062000683565b600033905090565b620002b16200029960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d76200034c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000327906200051f565b60405180910390fd5b80600690805190602001906200034892919062000376565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200038490620005ef565b90600052602060002090601f016020900481019282620003a85760008555620003f4565b82601f10620003c357805160ff1916838001178555620003f4565b82800160010185558215620003f4579182015b82811115620003f3578251825591602001919060010190620003d6565b5b50905062000403919062000407565b5090565b5b808211156200042257600081600090555060010162000408565b5090565b60006200043d620004378462000575565b62000541565b9050828152602081018484840111156200045657600080fd5b62000463848285620005b9565b509392505050565b600082601f8301126200047d57600080fd5b81516200048f84826020860162000426565b91505092915050565b600060208284031215620004ab57600080fd5b600082015167ffffffffffffffff811115620004c657600080fd5b620004d4848285016200046b565b91505092915050565b6000620004ec602083620005a8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200053a81620004dd565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200056b576200056a62000654565b5b8060405250919050565b600067ffffffffffffffff82111562000593576200059262000654565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620005d9578082015181840152602081019050620005bc565b83811115620005e9576000848401525b50505050565b600060028204905060018216806200060857607f821691505b602082108114156200061f576200061e62000625565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61488e80620006936000396000f3fe6080604052600436106101ee5760003560e01c8063715018a61161010d578063a260531b116100a0578063db4568e21161006f578063db4568e2146106ee578063e985e9c514610719578063f2fde38b14610756578063fa62884c1461077f578063fdea8e0b14610796576101ee565b8063a260531b14610620578063b187bd261461065d578063b88d4fde14610688578063c87b56dd146106b1576101ee565b806391b7f5ed116100dc57806391b7f5ed1461057857806395d89b41146105a1578063a035b1fe146105cc578063a22cb465146105f7576101ee565b8063715018a6146104ce578063743976a0146104e55780638462151c146105105780638da5cb5b1461054d576101ee565b80633542aee2116101855780634f6ccce7116101545780634f6ccce7146103ee57806355f804b31461042b5780636352211e1461045457806370a0823114610491576101ee565b80633542aee2146103695780633ccfd60b1461039257806340c10f19146103a957806342842e0e146103c5576101ee565b80631725051f116101c15780631725051f146102c157806318160ddd146102d857806323b872dd146103035780632f745c591461032c576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906134fe565b6107c1565b6040516102279190613fdd565b60405180910390f35b34801561023c57600080fd5b5061024561083b565b6040516102529190613ff8565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613591565b6108cd565b60405161028f9190613f54565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613481565b610952565b005b3480156102cd57600080fd5b506102d6610a6a565b005b3480156102e457600080fd5b506102ed610b12565b6040516102fa919061431a565b60405180910390f35b34801561030f57600080fd5b5061032a6004803603810190610325919061337b565b610b1f565b005b34801561033857600080fd5b50610353600480360381019061034e9190613481565b610b7f565b604051610360919061431a565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b9190613481565b610c24565b005b34801561039e57600080fd5b506103a7610d58565b005b6103c360048036038101906103be9190613481565b610e23565b005b3480156103d157600080fd5b506103ec60048036038101906103e7919061337b565b611287565b005b3480156103fa57600080fd5b5061041560048036038101906104109190613591565b6112a7565b604051610422919061431a565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190613550565b61133e565b005b34801561046057600080fd5b5061047b60048036038101906104769190613591565b6113d4565b6040516104889190613f54565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190613316565b611486565b6040516104c5919061431a565b60405180910390f35b3480156104da57600080fd5b506104e361153e565b005b3480156104f157600080fd5b506104fa611643565b6040516105079190613ff8565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613316565b6116d1565b6040516105449190613fbb565b60405180910390f35b34801561055957600080fd5b506105626117cb565b60405161056f9190613f54565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613591565b6117f5565b005b3480156105ad57600080fd5b506105b661187b565b6040516105c39190613ff8565b60405180910390f35b3480156105d857600080fd5b506105e161190d565b6040516105ee919061431a565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613445565b611913565b005b34801561062c57600080fd5b5061064760048036038101906106429190613316565b611a94565b604051610654919061431a565b60405180910390f35b34801561066957600080fd5b50610672611b53565b60405161067f9190613fdd565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa91906133ca565b611b66565b005b3480156106bd57600080fd5b506106d860048036038101906106d39190613591565b611bc8565b6040516106e59190613ff8565b60405180910390f35b3480156106fa57600080fd5b50610703611cac565b604051610710919061431a565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b919061333f565b611cb2565b60405161074d9190613fdd565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190613316565b611d46565b005b34801561078b57600080fd5b50610794611e3e565b005b3480156107a257600080fd5b506107ab611ee6565b6040516107b89190613fdd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610834575061083382611ef9565b5b9050919050565b60606000805461084a90614683565b80601f016020809104026020016040519081016040528092919081815260200182805461087690614683565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b60006108d882611fdb565b610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e906141da565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095d826113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c59061427a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109ed612047565b73ffffffffffffffffffffffffffffffffffffffff161480610a1c5750610a1b81610a16612047565b611cb2565b5b610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a529061415a565b60405180910390fd5b610a65838361204f565b505050565b610a72612047565b73ffffffffffffffffffffffffffffffffffffffff16610a906117cb565b73ffffffffffffffffffffffffffffffffffffffff1614610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add906141fa565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6000600980549050905090565b610b30610b2a612047565b82612108565b610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b669061429a565b60405180910390fd5b610b7a8383836121e6565b505050565b6000610b8a83611486565b8210610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc29061405a565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2c612047565b73ffffffffffffffffffffffffffffffffffffffff16610c4a6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c97906141fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d07906142da565b60405180910390fd5b6000610d1a610b12565b905060005b82811015610d5257610d318483612442565b8180610d3c906146b5565b9250508080610d4a906146b5565b915050610d1f565b50505050565b610d60612047565b73ffffffffffffffffffffffffffffffffffffffff16610d7e6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb906141fa565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e1f573d6000803e3d6000fd5b5050565b611388610e2e610b12565b10610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e659061401a565b60405180910390fd5b60001515600f60009054906101000a900460ff16151514610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb906142fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b906142da565b60405180910390fd5b6000600590506000600e54905060011515600f60019054906101000a900460ff1615151415611113576000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c336040518263ffffffff1660e01b8152600401610fba9190613f54565b60006040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061100f91906134bd565b9050601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff1681516110739190614589565b9250601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff1681511161110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906140da565b60405180910390fd5b60009150505b81831115611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d9061403a565b60405180910390fd5b6000611160610b12565b905034848361116f919061452f565b11156111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a79061425a565b60405180910390fd5b60005b848110156111e65781806111c6906146b5565b9250506111d38683612442565b80806111de906146b5565b9150506111b3565b5060011515600f60019054906101000a900460ff16151514156112805783601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900463ffffffff1661126191906144c4565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b5050505050565b6112a283838360405180602001604052806000815250611b66565b505050565b60006112b1610b12565b82106112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e9906142ba565b60405180910390fd5b6009828154811061132c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611346612047565b73ffffffffffffffffffffffffffffffffffffffff166113646117cb565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906141fa565b60405180910390fd5b80600690805190602001906113d092919061308f565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749061419a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee9061417a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611546612047565b73ffffffffffffffffffffffffffffffffffffffff166115646117cb565b73ffffffffffffffffffffffffffffffffffffffff16146115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906141fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36116416000612460565b565b6006805461165090614683565b80601f016020809104026020016040519081016040528092919081815260200182805461167c90614683565b80156116c95780601f1061169e576101008083540402835291602001916116c9565b820191906000526020600020905b8154815290600101906020018083116116ac57829003601f168201915b505050505081565b606060006116de83611486565b905060008167ffffffffffffffff811115611722577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117505781602001602082028036833780820191505090505b50905060005b828110156117c0576117688582610b7f565b8282815181106117a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806117b8906146b5565b915050611756565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117fd612047565b73ffffffffffffffffffffffffffffffffffffffff1661181b6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614611871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611868906141fa565b60405180910390fd5b80600e8190555050565b60606001805461188a90614683565b80601f01602080910402602001604051908101604052809291908181526020018280546118b690614683565b80156119035780601f106118d857610100808354040283529160200191611903565b820191906000526020600020905b8154815290600101906020018083116118e657829003601f168201915b5050505050905090565b600e5481565b61191b612047565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119809061411a565b60405180910390fd5b8060056000611996612047565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a43612047565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a889190613fdd565b60405180910390a35050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c846040518263ffffffff1660e01b8152600401611af29190613f54565b60006040518083038186803b158015611b0a57600080fd5b505afa158015611b1e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b4791906134bd565b90508051915050919050565b600f60009054906101000a900460ff1681565b611b77611b71612047565b83612108565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061429a565b60405180910390fd5b611bc284848484612526565b50505050565b6060611bd382611fdb565b611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c099061423a565b60405180910390fd5b6000611c1c612582565b905060006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000825111611c765760405180602001604052806000815250611ca3565b81611c8085612614565b82604051602001611c9393929190613f23565b6040516020818303038152906040525b92505050919050565b61138881565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d4e612047565b73ffffffffffffffffffffffffffffffffffffffff16611d6c6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db9906141fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e299061409a565b60405180910390fd5b611e3b81612460565b50565b611e46612047565b73ffffffffffffffffffffffffffffffffffffffff16611e646117cb565b73ffffffffffffffffffffffffffffffffffffffff1614611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb1906141fa565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600f60019054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fc457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fd45750611fd3826127c1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120c2836113d4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061211382611fdb565b612152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121499061413a565b60405180910390fd5b600061215d836113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121cc57508373ffffffffffffffffffffffffffffffffffffffff166121b4846108cd565b73ffffffffffffffffffffffffffffffffffffffff16145b806121dd57506121dc8185611cb2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612206826113d4565b73ffffffffffffffffffffffffffffffffffffffff161461225c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122539061421a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c3906140fa565b60405180910390fd5b6122d783838361282b565b6122e260008261204f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123329190614589565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612389919061446e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61245c82826040518060200160405280600081525061293f565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125318484846121e6565b61253d8484848461299a565b61257c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125739061407a565b60405180910390fd5b50505050565b60606006805461259190614683565b80601f01602080910402602001604051908101604052809291908181526020018280546125bd90614683565b801561260a5780601f106125df5761010080835404028352916020019161260a565b820191906000526020600020905b8154815290600101906020018083116125ed57829003601f168201915b5050505050905090565b6060600082141561265c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127bc565b600082905060005b6000821461268e578080612677906146b5565b915050600a8261268791906144fe565b9150612664565b60008167ffffffffffffffff8111156126d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127025781602001600182028036833780820191505090505b5090505b600085146127b55760018261271b9190614589565b9150600a8561272a91906146fe565b6030612736919061446e565b60f81b818381518110612772577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ae91906144fe565b9450612706565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612836838383612b31565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128795761287481612b36565b6128b8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b7576128b68382612b7f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128fb576128f681612cec565b61293a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612939576129388282612e2f565b5b5b505050565b6129498383612eae565b612956600084848461299a565b612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c9061407a565b60405180910390fd5b505050565b60006129bb8473ffffffffffffffffffffffffffffffffffffffff1661307c565b15612b24578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e4612047565b8786866040518563ffffffff1660e01b8152600401612a069493929190613f6f565b602060405180830381600087803b158015612a2057600080fd5b505af1925050508015612a5157506040513d601f19601f82011682018060405250810190612a4e9190613527565b60015b612ad4573d8060008114612a81576040519150601f19603f3d011682016040523d82523d6000602084013e612a86565b606091505b50600081511415612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac39061407a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b29565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8c84611486565b612b969190614589565b9050600060086000848152602001908152602001600020549050818114612c7b576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612d009190614589565b90506000600a6000848152602001908152602001600020549050600060098381548110612d56577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612d9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612e13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e3a83611486565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f15906141ba565b60405180910390fd5b612f2781611fdb565b15612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e906140ba565b60405180910390fd5b612f736000838361282b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc3919061446e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461309b90614683565b90600052602060002090601f0160209004810192826130bd5760008555613104565b82601f106130d657805160ff1916838001178555613104565b82800160010185558215613104579182015b828111156131035782518255916020019190600101906130e8565b5b5090506131119190613115565b5090565b5b8082111561312e576000816000905550600101613116565b5090565b600061314561314084614366565b614335565b9050808382526020820190508285602086028201111561316457600080fd5b60005b85811015613194578161317a8882613301565b845260208401935060208301925050600181019050613167565b5050509392505050565b60006131b16131ac84614392565b614335565b9050828152602081018484840111156131c957600080fd5b6131d4848285614641565b509392505050565b60006131ef6131ea846143c2565b614335565b90508281526020810184848401111561320757600080fd5b613212848285614641565b509392505050565b600081359050613229816147fc565b92915050565b600082601f83011261324057600080fd5b8151613250848260208601613132565b91505092915050565b60008135905061326881614813565b92915050565b60008135905061327d8161482a565b92915050565b6000815190506132928161482a565b92915050565b600082601f8301126132a957600080fd5b81356132b984826020860161319e565b91505092915050565b600082601f8301126132d357600080fd5b81356132e38482602086016131dc565b91505092915050565b6000813590506132fb81614841565b92915050565b60008151905061331081614841565b92915050565b60006020828403121561332857600080fd5b60006133368482850161321a565b91505092915050565b6000806040838503121561335257600080fd5b60006133608582860161321a565b92505060206133718582860161321a565b9150509250929050565b60008060006060848603121561339057600080fd5b600061339e8682870161321a565b93505060206133af8682870161321a565b92505060406133c0868287016132ec565b9150509250925092565b600080600080608085870312156133e057600080fd5b60006133ee8782880161321a565b94505060206133ff8782880161321a565b9350506040613410878288016132ec565b925050606085013567ffffffffffffffff81111561342d57600080fd5b61343987828801613298565b91505092959194509250565b6000806040838503121561345857600080fd5b60006134668582860161321a565b925050602061347785828601613259565b9150509250929050565b6000806040838503121561349457600080fd5b60006134a28582860161321a565b92505060206134b3858286016132ec565b9150509250929050565b6000602082840312156134cf57600080fd5b600082015167ffffffffffffffff8111156134e957600080fd5b6134f58482850161322f565b91505092915050565b60006020828403121561351057600080fd5b600061351e8482850161326e565b91505092915050565b60006020828403121561353957600080fd5b600061354784828501613283565b91505092915050565b60006020828403121561356257600080fd5b600082013567ffffffffffffffff81111561357c57600080fd5b613588848285016132c2565b91505092915050565b6000602082840312156135a357600080fd5b60006135b1848285016132ec565b91505092915050565b60006135c68383613f05565b60208301905092915050565b6135db816145bd565b82525050565b60006135ec82614402565b6135f68185614430565b9350613601836143f2565b8060005b8381101561363257815161361988826135ba565b975061362483614423565b925050600181019050613605565b5085935050505092915050565b613648816145cf565b82525050565b60006136598261440d565b6136638185614441565b9350613673818560208601614650565b61367c816147eb565b840191505092915050565b600061369282614418565b61369c8185614452565b93506136ac818560208601614650565b6136b5816147eb565b840191505092915050565b60006136cb82614418565b6136d58185614463565b93506136e5818560208601614650565b80840191505092915050565b60006136fe601d83614452565b91507f4d696e7420776f7572642065786365656420746f74616c537570706c790000006000830152602082019050919050565b600061373e601383614452565b91507f457863656564206d6178207175616e74697479000000000000000000000000006000830152602082019050919050565b600061377e602b83614452565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006137e4603283614452565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061384a602683614452565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138b0601c83614452565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006138f0600d83614452565b91507f4e4f2044415320544f4b454e53000000000000000000000000000000000000006000830152602082019050919050565b6000613930602483614452565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613996601983614452565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139d6602c83614452565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a3c603883614452565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613aa2602a83614452565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b08602983614452565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b6e602083614452565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613bae602c83614452565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c14602083614452565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c54602983614452565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cba602f83614452565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613d20601183614452565b91507f57726f6e6720616d6f756e742073656e740000000000000000000000000000006000830152602082019050919050565b6000613d60602183614452565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dc6603183614452565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e2c602c83614452565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613e92601883614452565b91507f4d696e7420746f20746865207a65726f206164647265737300000000000000006000830152602082019050919050565b6000613ed2602083614452565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b613f0e81614627565b82525050565b613f1d81614627565b82525050565b6000613f2f82866136c0565b9150613f3b82856136c0565b9150613f4782846136c0565b9150819050949350505050565b6000602082019050613f6960008301846135d2565b92915050565b6000608082019050613f8460008301876135d2565b613f9160208301866135d2565b613f9e6040830185613f14565b8181036060830152613fb0818461364e565b905095945050505050565b60006020820190508181036000830152613fd581846135e1565b905092915050565b6000602082019050613ff2600083018461363f565b92915050565b600060208201905081810360008301526140128184613687565b905092915050565b60006020820190508181036000830152614033816136f1565b9050919050565b6000602082019050818103600083015261405381613731565b9050919050565b6000602082019050818103600083015261407381613771565b9050919050565b60006020820190508181036000830152614093816137d7565b9050919050565b600060208201905081810360008301526140b38161383d565b9050919050565b600060208201905081810360008301526140d3816138a3565b9050919050565b600060208201905081810360008301526140f3816138e3565b9050919050565b6000602082019050818103600083015261411381613923565b9050919050565b6000602082019050818103600083015261413381613989565b9050919050565b60006020820190508181036000830152614153816139c9565b9050919050565b6000602082019050818103600083015261417381613a2f565b9050919050565b6000602082019050818103600083015261419381613a95565b9050919050565b600060208201905081810360008301526141b381613afb565b9050919050565b600060208201905081810360008301526141d381613b61565b9050919050565b600060208201905081810360008301526141f381613ba1565b9050919050565b6000602082019050818103600083015261421381613c07565b9050919050565b6000602082019050818103600083015261423381613c47565b9050919050565b6000602082019050818103600083015261425381613cad565b9050919050565b6000602082019050818103600083015261427381613d13565b9050919050565b6000602082019050818103600083015261429381613d53565b9050919050565b600060208201905081810360008301526142b381613db9565b9050919050565b600060208201905081810360008301526142d381613e1f565b9050919050565b600060208201905081810360008301526142f381613e85565b9050919050565b6000602082019050818103600083015261431381613ec5565b9050919050565b600060208201905061432f6000830184613f14565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561435c5761435b6147bc565b5b8060405250919050565b600067ffffffffffffffff821115614381576143806147bc565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143ad576143ac6147bc565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143dd576143dc6147bc565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061447982614627565b915061448483614627565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144b9576144b861472f565b5b828201905092915050565b60006144cf82614631565b91506144da83614631565b92508263ffffffff038211156144f3576144f261472f565b5b828201905092915050565b600061450982614627565b915061451483614627565b9250826145245761452361475e565b5b828204905092915050565b600061453a82614627565b915061454583614627565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561457e5761457d61472f565b5b828202905092915050565b600061459482614627565b915061459f83614627565b9250828210156145b2576145b161472f565b5b828203905092915050565b60006145c882614607565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561466e578082015181840152602081019050614653565b8381111561467d576000848401525b50505050565b6000600282049050600182168061469b57607f821691505b602082108114156146af576146ae61478d565b5b50919050565b60006146c082614627565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146f3576146f261472f565b5b600182019050919050565b600061470982614627565b915061471483614627565b9250826147245761472361475e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614805816145bd565b811461481057600080fd5b50565b61481c816145cf565b811461482757600080fd5b50565b614833816145db565b811461483e57600080fd5b50565b61484a81614627565b811461485557600080fd5b5056fea26469706673582212206c916442bc257a2a4d668fab3df3aeff44eaab58490e33df3f6b05e8adf9371d64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d4e77587956684d54424639597266367733394a7a4b616e586255535a386d6465725a386f6b795447476d627a2f000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c8063715018a61161010d578063a260531b116100a0578063db4568e21161006f578063db4568e2146106ee578063e985e9c514610719578063f2fde38b14610756578063fa62884c1461077f578063fdea8e0b14610796576101ee565b8063a260531b14610620578063b187bd261461065d578063b88d4fde14610688578063c87b56dd146106b1576101ee565b806391b7f5ed116100dc57806391b7f5ed1461057857806395d89b41146105a1578063a035b1fe146105cc578063a22cb465146105f7576101ee565b8063715018a6146104ce578063743976a0146104e55780638462151c146105105780638da5cb5b1461054d576101ee565b80633542aee2116101855780634f6ccce7116101545780634f6ccce7146103ee57806355f804b31461042b5780636352211e1461045457806370a0823114610491576101ee565b80633542aee2146103695780633ccfd60b1461039257806340c10f19146103a957806342842e0e146103c5576101ee565b80631725051f116101c15780631725051f146102c157806318160ddd146102d857806323b872dd146103035780632f745c591461032c576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906134fe565b6107c1565b6040516102279190613fdd565b60405180910390f35b34801561023c57600080fd5b5061024561083b565b6040516102529190613ff8565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613591565b6108cd565b60405161028f9190613f54565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613481565b610952565b005b3480156102cd57600080fd5b506102d6610a6a565b005b3480156102e457600080fd5b506102ed610b12565b6040516102fa919061431a565b60405180910390f35b34801561030f57600080fd5b5061032a6004803603810190610325919061337b565b610b1f565b005b34801561033857600080fd5b50610353600480360381019061034e9190613481565b610b7f565b604051610360919061431a565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b9190613481565b610c24565b005b34801561039e57600080fd5b506103a7610d58565b005b6103c360048036038101906103be9190613481565b610e23565b005b3480156103d157600080fd5b506103ec60048036038101906103e7919061337b565b611287565b005b3480156103fa57600080fd5b5061041560048036038101906104109190613591565b6112a7565b604051610422919061431a565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190613550565b61133e565b005b34801561046057600080fd5b5061047b60048036038101906104769190613591565b6113d4565b6040516104889190613f54565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190613316565b611486565b6040516104c5919061431a565b60405180910390f35b3480156104da57600080fd5b506104e361153e565b005b3480156104f157600080fd5b506104fa611643565b6040516105079190613ff8565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613316565b6116d1565b6040516105449190613fbb565b60405180910390f35b34801561055957600080fd5b506105626117cb565b60405161056f9190613f54565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613591565b6117f5565b005b3480156105ad57600080fd5b506105b661187b565b6040516105c39190613ff8565b60405180910390f35b3480156105d857600080fd5b506105e161190d565b6040516105ee919061431a565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613445565b611913565b005b34801561062c57600080fd5b5061064760048036038101906106429190613316565b611a94565b604051610654919061431a565b60405180910390f35b34801561066957600080fd5b50610672611b53565b60405161067f9190613fdd565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa91906133ca565b611b66565b005b3480156106bd57600080fd5b506106d860048036038101906106d39190613591565b611bc8565b6040516106e59190613ff8565b60405180910390f35b3480156106fa57600080fd5b50610703611cac565b604051610710919061431a565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b919061333f565b611cb2565b60405161074d9190613fdd565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190613316565b611d46565b005b34801561078b57600080fd5b50610794611e3e565b005b3480156107a257600080fd5b506107ab611ee6565b6040516107b89190613fdd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610834575061083382611ef9565b5b9050919050565b60606000805461084a90614683565b80601f016020809104026020016040519081016040528092919081815260200182805461087690614683565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b60006108d882611fdb565b610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e906141da565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095d826113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c59061427a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109ed612047565b73ffffffffffffffffffffffffffffffffffffffff161480610a1c5750610a1b81610a16612047565b611cb2565b5b610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a529061415a565b60405180910390fd5b610a65838361204f565b505050565b610a72612047565b73ffffffffffffffffffffffffffffffffffffffff16610a906117cb565b73ffffffffffffffffffffffffffffffffffffffff1614610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add906141fa565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6000600980549050905090565b610b30610b2a612047565b82612108565b610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b669061429a565b60405180910390fd5b610b7a8383836121e6565b505050565b6000610b8a83611486565b8210610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc29061405a565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2c612047565b73ffffffffffffffffffffffffffffffffffffffff16610c4a6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c97906141fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d07906142da565b60405180910390fd5b6000610d1a610b12565b905060005b82811015610d5257610d318483612442565b8180610d3c906146b5565b9250508080610d4a906146b5565b915050610d1f565b50505050565b610d60612047565b73ffffffffffffffffffffffffffffffffffffffff16610d7e6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb906141fa565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e1f573d6000803e3d6000fd5b5050565b611388610e2e610b12565b10610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e659061401a565b60405180910390fd5b60001515600f60009054906101000a900460ff16151514610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb906142fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b906142da565b60405180910390fd5b6000600590506000600e54905060011515600f60019054906101000a900460ff1615151415611113576000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c336040518263ffffffff1660e01b8152600401610fba9190613f54565b60006040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061100f91906134bd565b9050601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff1681516110739190614589565b9250601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff1681511161110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906140da565b60405180910390fd5b60009150505b81831115611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d9061403a565b60405180910390fd5b6000611160610b12565b905034848361116f919061452f565b11156111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a79061425a565b60405180910390fd5b60005b848110156111e65781806111c6906146b5565b9250506111d38683612442565b80806111de906146b5565b9150506111b3565b5060011515600f60019054906101000a900460ff16151514156112805783601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900463ffffffff1661126191906144c4565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b5050505050565b6112a283838360405180602001604052806000815250611b66565b505050565b60006112b1610b12565b82106112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e9906142ba565b60405180910390fd5b6009828154811061132c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611346612047565b73ffffffffffffffffffffffffffffffffffffffff166113646117cb565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906141fa565b60405180910390fd5b80600690805190602001906113d092919061308f565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749061419a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee9061417a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611546612047565b73ffffffffffffffffffffffffffffffffffffffff166115646117cb565b73ffffffffffffffffffffffffffffffffffffffff16146115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906141fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36116416000612460565b565b6006805461165090614683565b80601f016020809104026020016040519081016040528092919081815260200182805461167c90614683565b80156116c95780601f1061169e576101008083540402835291602001916116c9565b820191906000526020600020905b8154815290600101906020018083116116ac57829003601f168201915b505050505081565b606060006116de83611486565b905060008167ffffffffffffffff811115611722577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117505781602001602082028036833780820191505090505b50905060005b828110156117c0576117688582610b7f565b8282815181106117a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806117b8906146b5565b915050611756565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117fd612047565b73ffffffffffffffffffffffffffffffffffffffff1661181b6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614611871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611868906141fa565b60405180910390fd5b80600e8190555050565b60606001805461188a90614683565b80601f01602080910402602001604051908101604052809291908181526020018280546118b690614683565b80156119035780601f106118d857610100808354040283529160200191611903565b820191906000526020600020905b8154815290600101906020018083116118e657829003601f168201915b5050505050905090565b600e5481565b61191b612047565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119809061411a565b60405180910390fd5b8060056000611996612047565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a43612047565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a889190613fdd565b60405180910390a35050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c846040518263ffffffff1660e01b8152600401611af29190613f54565b60006040518083038186803b158015611b0a57600080fd5b505afa158015611b1e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b4791906134bd565b90508051915050919050565b600f60009054906101000a900460ff1681565b611b77611b71612047565b83612108565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061429a565b60405180910390fd5b611bc284848484612526565b50505050565b6060611bd382611fdb565b611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c099061423a565b60405180910390fd5b6000611c1c612582565b905060006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000825111611c765760405180602001604052806000815250611ca3565b81611c8085612614565b82604051602001611c9393929190613f23565b6040516020818303038152906040525b92505050919050565b61138881565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d4e612047565b73ffffffffffffffffffffffffffffffffffffffff16611d6c6117cb565b73ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db9906141fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e299061409a565b60405180910390fd5b611e3b81612460565b50565b611e46612047565b73ffffffffffffffffffffffffffffffffffffffff16611e646117cb565b73ffffffffffffffffffffffffffffffffffffffff1614611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb1906141fa565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600f60019054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fc457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fd45750611fd3826127c1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120c2836113d4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061211382611fdb565b612152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121499061413a565b60405180910390fd5b600061215d836113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121cc57508373ffffffffffffffffffffffffffffffffffffffff166121b4846108cd565b73ffffffffffffffffffffffffffffffffffffffff16145b806121dd57506121dc8185611cb2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612206826113d4565b73ffffffffffffffffffffffffffffffffffffffff161461225c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122539061421a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c3906140fa565b60405180910390fd5b6122d783838361282b565b6122e260008261204f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123329190614589565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612389919061446e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61245c82826040518060200160405280600081525061293f565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125318484846121e6565b61253d8484848461299a565b61257c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125739061407a565b60405180910390fd5b50505050565b60606006805461259190614683565b80601f01602080910402602001604051908101604052809291908181526020018280546125bd90614683565b801561260a5780601f106125df5761010080835404028352916020019161260a565b820191906000526020600020905b8154815290600101906020018083116125ed57829003601f168201915b5050505050905090565b6060600082141561265c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127bc565b600082905060005b6000821461268e578080612677906146b5565b915050600a8261268791906144fe565b9150612664565b60008167ffffffffffffffff8111156126d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127025781602001600182028036833780820191505090505b5090505b600085146127b55760018261271b9190614589565b9150600a8561272a91906146fe565b6030612736919061446e565b60f81b818381518110612772577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ae91906144fe565b9450612706565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612836838383612b31565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128795761287481612b36565b6128b8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b7576128b68382612b7f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128fb576128f681612cec565b61293a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612939576129388282612e2f565b5b5b505050565b6129498383612eae565b612956600084848461299a565b612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c9061407a565b60405180910390fd5b505050565b60006129bb8473ffffffffffffffffffffffffffffffffffffffff1661307c565b15612b24578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e4612047565b8786866040518563ffffffff1660e01b8152600401612a069493929190613f6f565b602060405180830381600087803b158015612a2057600080fd5b505af1925050508015612a5157506040513d601f19601f82011682018060405250810190612a4e9190613527565b60015b612ad4573d8060008114612a81576040519150601f19603f3d011682016040523d82523d6000602084013e612a86565b606091505b50600081511415612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac39061407a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b29565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8c84611486565b612b969190614589565b9050600060086000848152602001908152602001600020549050818114612c7b576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612d009190614589565b90506000600a6000848152602001908152602001600020549050600060098381548110612d56577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612d9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612e13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e3a83611486565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f15906141ba565b60405180910390fd5b612f2781611fdb565b15612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e906140ba565b60405180910390fd5b612f736000838361282b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc3919061446e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461309b90614683565b90600052602060002090601f0160209004810192826130bd5760008555613104565b82601f106130d657805160ff1916838001178555613104565b82800160010185558215613104579182015b828111156131035782518255916020019190600101906130e8565b5b5090506131119190613115565b5090565b5b8082111561312e576000816000905550600101613116565b5090565b600061314561314084614366565b614335565b9050808382526020820190508285602086028201111561316457600080fd5b60005b85811015613194578161317a8882613301565b845260208401935060208301925050600181019050613167565b5050509392505050565b60006131b16131ac84614392565b614335565b9050828152602081018484840111156131c957600080fd5b6131d4848285614641565b509392505050565b60006131ef6131ea846143c2565b614335565b90508281526020810184848401111561320757600080fd5b613212848285614641565b509392505050565b600081359050613229816147fc565b92915050565b600082601f83011261324057600080fd5b8151613250848260208601613132565b91505092915050565b60008135905061326881614813565b92915050565b60008135905061327d8161482a565b92915050565b6000815190506132928161482a565b92915050565b600082601f8301126132a957600080fd5b81356132b984826020860161319e565b91505092915050565b600082601f8301126132d357600080fd5b81356132e38482602086016131dc565b91505092915050565b6000813590506132fb81614841565b92915050565b60008151905061331081614841565b92915050565b60006020828403121561332857600080fd5b60006133368482850161321a565b91505092915050565b6000806040838503121561335257600080fd5b60006133608582860161321a565b92505060206133718582860161321a565b9150509250929050565b60008060006060848603121561339057600080fd5b600061339e8682870161321a565b93505060206133af8682870161321a565b92505060406133c0868287016132ec565b9150509250925092565b600080600080608085870312156133e057600080fd5b60006133ee8782880161321a565b94505060206133ff8782880161321a565b9350506040613410878288016132ec565b925050606085013567ffffffffffffffff81111561342d57600080fd5b61343987828801613298565b91505092959194509250565b6000806040838503121561345857600080fd5b60006134668582860161321a565b925050602061347785828601613259565b9150509250929050565b6000806040838503121561349457600080fd5b60006134a28582860161321a565b92505060206134b3858286016132ec565b9150509250929050565b6000602082840312156134cf57600080fd5b600082015167ffffffffffffffff8111156134e957600080fd5b6134f58482850161322f565b91505092915050565b60006020828403121561351057600080fd5b600061351e8482850161326e565b91505092915050565b60006020828403121561353957600080fd5b600061354784828501613283565b91505092915050565b60006020828403121561356257600080fd5b600082013567ffffffffffffffff81111561357c57600080fd5b613588848285016132c2565b91505092915050565b6000602082840312156135a357600080fd5b60006135b1848285016132ec565b91505092915050565b60006135c68383613f05565b60208301905092915050565b6135db816145bd565b82525050565b60006135ec82614402565b6135f68185614430565b9350613601836143f2565b8060005b8381101561363257815161361988826135ba565b975061362483614423565b925050600181019050613605565b5085935050505092915050565b613648816145cf565b82525050565b60006136598261440d565b6136638185614441565b9350613673818560208601614650565b61367c816147eb565b840191505092915050565b600061369282614418565b61369c8185614452565b93506136ac818560208601614650565b6136b5816147eb565b840191505092915050565b60006136cb82614418565b6136d58185614463565b93506136e5818560208601614650565b80840191505092915050565b60006136fe601d83614452565b91507f4d696e7420776f7572642065786365656420746f74616c537570706c790000006000830152602082019050919050565b600061373e601383614452565b91507f457863656564206d6178207175616e74697479000000000000000000000000006000830152602082019050919050565b600061377e602b83614452565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006137e4603283614452565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061384a602683614452565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138b0601c83614452565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006138f0600d83614452565b91507f4e4f2044415320544f4b454e53000000000000000000000000000000000000006000830152602082019050919050565b6000613930602483614452565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613996601983614452565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139d6602c83614452565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a3c603883614452565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613aa2602a83614452565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b08602983614452565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b6e602083614452565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613bae602c83614452565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c14602083614452565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c54602983614452565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cba602f83614452565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613d20601183614452565b91507f57726f6e6720616d6f756e742073656e740000000000000000000000000000006000830152602082019050919050565b6000613d60602183614452565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dc6603183614452565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e2c602c83614452565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613e92601883614452565b91507f4d696e7420746f20746865207a65726f206164647265737300000000000000006000830152602082019050919050565b6000613ed2602083614452565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b613f0e81614627565b82525050565b613f1d81614627565b82525050565b6000613f2f82866136c0565b9150613f3b82856136c0565b9150613f4782846136c0565b9150819050949350505050565b6000602082019050613f6960008301846135d2565b92915050565b6000608082019050613f8460008301876135d2565b613f9160208301866135d2565b613f9e6040830185613f14565b8181036060830152613fb0818461364e565b905095945050505050565b60006020820190508181036000830152613fd581846135e1565b905092915050565b6000602082019050613ff2600083018461363f565b92915050565b600060208201905081810360008301526140128184613687565b905092915050565b60006020820190508181036000830152614033816136f1565b9050919050565b6000602082019050818103600083015261405381613731565b9050919050565b6000602082019050818103600083015261407381613771565b9050919050565b60006020820190508181036000830152614093816137d7565b9050919050565b600060208201905081810360008301526140b38161383d565b9050919050565b600060208201905081810360008301526140d3816138a3565b9050919050565b600060208201905081810360008301526140f3816138e3565b9050919050565b6000602082019050818103600083015261411381613923565b9050919050565b6000602082019050818103600083015261413381613989565b9050919050565b60006020820190508181036000830152614153816139c9565b9050919050565b6000602082019050818103600083015261417381613a2f565b9050919050565b6000602082019050818103600083015261419381613a95565b9050919050565b600060208201905081810360008301526141b381613afb565b9050919050565b600060208201905081810360008301526141d381613b61565b9050919050565b600060208201905081810360008301526141f381613ba1565b9050919050565b6000602082019050818103600083015261421381613c07565b9050919050565b6000602082019050818103600083015261423381613c47565b9050919050565b6000602082019050818103600083015261425381613cad565b9050919050565b6000602082019050818103600083015261427381613d13565b9050919050565b6000602082019050818103600083015261429381613d53565b9050919050565b600060208201905081810360008301526142b381613db9565b9050919050565b600060208201905081810360008301526142d381613e1f565b9050919050565b600060208201905081810360008301526142f381613e85565b9050919050565b6000602082019050818103600083015261431381613ec5565b9050919050565b600060208201905061432f6000830184613f14565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561435c5761435b6147bc565b5b8060405250919050565b600067ffffffffffffffff821115614381576143806147bc565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143ad576143ac6147bc565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143dd576143dc6147bc565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061447982614627565b915061448483614627565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144b9576144b861472f565b5b828201905092915050565b60006144cf82614631565b91506144da83614631565b92508263ffffffff038211156144f3576144f261472f565b5b828201905092915050565b600061450982614627565b915061451483614627565b9250826145245761452361475e565b5b828204905092915050565b600061453a82614627565b915061454583614627565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561457e5761457d61472f565b5b828202905092915050565b600061459482614627565b915061459f83614627565b9250828210156145b2576145b161472f565b5b828203905092915050565b60006145c882614607565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561466e578082015181840152602081019050614653565b8381111561467d576000848401525b50505050565b6000600282049050600182168061469b57607f821691505b602082108114156146af576146ae61478d565b5b50919050565b60006146c082614627565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146f3576146f261472f565b5b600182019050919050565b600061470982614627565b915061471483614627565b9250826147245761472361475e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614805816145bd565b811461481057600080fd5b50565b61481c816145cf565b811461482757600080fd5b50565b614833816145db565b811461483e57600080fd5b50565b61484a81614627565b811461485557600080fd5b5056fea26469706673582212206c916442bc257a2a4d668fab3df3aeff44eaab58490e33df3f6b05e8adf9371d64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d4e77587956684d54424639597266367733394a7a4b616e586255535a386d6465725a386f6b795447476d627a2f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://gateway.pinata.cloud/ipfs/QmNwXyVhMTBF9Yrf6w39JzKanXbUSZ8mderZ8okyTGGmbz/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d4e77587956684d54424639597266367733394a7a4b616e586255535a
Arg [4] : 386d6465725a386f6b795447476d627a2f000000000000000000000000000000


Deployed Bytecode Sourcemap

49141:3148:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42882:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30828:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32445:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31968:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51152:83;;;;;;;;;;;;;:::i;:::-;;43522:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33335:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43190:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51343:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52146:140;;;;;;;;;;;;;:::i;:::-;;49752:1016;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33745:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43712:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50956:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30522:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30252:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27940:150;;;;;;;;;;;;;:::i;:::-;;29550:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51787:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27289:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51243:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30997:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49455:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32738:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50776:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49515:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34001:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31172:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49408:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33104:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28245:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51061:83;;;;;;;;;;;;;:::i;:::-;;49549:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42882:224;42984:4;43023:35;43008:50;;;:11;:50;;;;:90;;;;43062:36;43086:11;43062:23;:36::i;:::-;43008:90;43001:97;;42882:224;;;:::o;30828:100::-;30882:13;30915:5;30908:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30828:100;:::o;32445:221::-;32521:7;32549:16;32557:7;32549;:16::i;:::-;32541:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32634:15;:24;32650:7;32634:24;;;;;;;;;;;;;;;;;;;;;32627:31;;32445:221;;;:::o;31968:411::-;32049:13;32065:23;32080:7;32065:14;:23::i;:::-;32049:39;;32113:5;32107:11;;:2;:11;;;;32099:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32207:5;32191:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32216:37;32233:5;32240:12;:10;:12::i;:::-;32216:16;:37::i;:::-;32191:62;32169:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32350:21;32359:2;32363:7;32350:8;:21::i;:::-;31968:411;;;:::o;51152:83::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51220:7:::1;;;;;;;;;;;51219:8;51209:7;;:18;;;;;;;;;;;;;;;;;;51152:83::o:0;43522:113::-;43583:7;43610:10;:17;;;;43603:24;;43522:113;:::o;33335:339::-;33530:41;33549:12;:10;:12::i;:::-;33563:7;33530:18;:41::i;:::-;33522:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33638:28;33648:4;33654:2;33658:7;33638:9;:28::i;:::-;33335:339;;;:::o;43190:256::-;43287:7;43323:23;43340:5;43323:16;:23::i;:::-;43315:5;:31;43307:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43412:12;:19;43425:5;43412:19;;;;;;;;;;;;;;;:26;43432:5;43412:26;;;;;;;;;;;;43405:33;;43190:256;;;;:::o;51343:308::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51445:1:::1;51430:17;;:3;:17;;;;51422:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;51489:15;51507:13;:11;:13::i;:::-;51489:31;;51536:9;51531:113;51555:8;51551:1;:12;51531:113;;;51585:23;51595:3;51600:7;51585:9;:23::i;:::-;51623:9;;;;;:::i;:::-;;;;51565:3;;;;;:::i;:::-;;;;51531:113;;;;27580:1;51343:308:::0;;:::o;52146:140::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52194:12:::1;52209:21;52194:36;;52249:10;52241:28;;:37;52270:7;52241:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27580:1;52146:140::o:0;49752:1016::-;49444:4;51697:13;:11;:13::i;:::-;:28;51689:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;49854:5:::1;49842:17;;:8;;;;;;;;;;;:17;;;49834:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49930:1;49915:17;;:3;:17;;;;49907:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;49974:19;49996:1;49974:23;;50008:18;50029:5;;50008:26;;50060:4;50049:15;;:7;;;;;;;;;;;:15;;;50045:289;;;50081:23;50107:3;;;;;;;;;;;:17;;;50125:10;50107:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50081:55;;50181:15;:27;50197:10;50181:27;;;;;;;;;;;;;;;;;;;;;;;;;50165:43;;:6;:13;:43;;;;:::i;:::-;50151:57;;50248:15;:27;50264:10;50248:27;;;;;;;;;;;;;;;;;;;;;;;;;50232:43;;:6;:13;:43;50223:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50321:1;50308:14;;50045:289;;50366:11;50354:8;:23;;50346:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50414:15;50432:13;:11;:13::i;:::-;50414:31;;50499:9;50487:8;50474:10;:21;;;;:::i;:::-;:34;;50466:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50546:9;50541:113;50565:8;50561:1;:12;50541:113;;;50595:9;;;;;:::i;:::-;;;;50619:23;50629:3;50634:7;50619:9;:23::i;:::-;50575:3;;;;;:::i;:::-;;;;50541:113;;;;50681:4;50670:15;;:7;;;;;;;;;;;:15;;;50666:95;;;50740:8;50702:15;:27;50718:10;50702:27;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50666:95;51770:1;;;49752:1016:::0;;:::o;33745:185::-;33883:39;33900:4;33906:2;33910:7;33883:39;;;;;;;;;;;;:16;:39::i;:::-;33745:185;;;:::o;43712:233::-;43787:7;43823:30;:28;:30::i;:::-;43815:5;:38;43807:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43920:10;43931:5;43920:17;;;;;;;;;;;;;;;;;;;;;;;;43913:24;;43712:233;;;:::o;50956:97::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51038:7:::1;51027:8;:18;;;;;;;;;;;;:::i;:::-;;50956:97:::0;:::o;30522:239::-;30594:7;30614:13;30630:7;:16;30638:7;30630:16;;;;;;;;;;;;;;;;;;;;;30614:32;;30682:1;30665:19;;:5;:19;;;;30657:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30748:5;30741:12;;;30522:239;;;:::o;30252:208::-;30324:7;30369:1;30352:19;;:5;:19;;;;30344:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30436:9;:16;30446:5;30436:16;;;;;;;;;;;;;;;;30429:23;;30252:208;;;:::o;27940:150::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28047:1:::1;28010:40;;28031:6;;;;;;;;;;;28010:40;;;;;;;;;;;;28061:21;28079:1;28061:9;:21::i;:::-;27940:150::o:0;29550:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51787:351::-;51847:16;51881:13;51897:17;51907:6;51897:9;:17::i;:::-;51881:33;;51925:23;51965:5;51951:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51925:46;;51987:13;51982:125;52014:5;52006;:13;51982:125;;;52061:34;52081:6;52089:5;52061:19;:34::i;:::-;52045:6;52052:5;52045:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;52021:7;;;;;:::i;:::-;;;;51982:125;;;;52124:6;52117:13;;;;51787:351;;;:::o;27289:87::-;27335:7;27362:6;;;;;;;;;;;27355:13;;27289:87;:::o;51243:92::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51318:9:::1;51310:5;:17;;;;51243:92:::0;:::o;30997:104::-;31053:13;31086:7;31079:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30997:104;:::o;49455:40::-;;;;:::o;32738:295::-;32853:12;:10;:12::i;:::-;32841:24;;:8;:24;;;;32833:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32953:8;32908:18;:32;32927:12;:10;:12::i;:::-;32908:32;;;;;;;;;;;;;;;:42;32941:8;32908:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33006:8;32977:48;;32992:12;:10;:12::i;:::-;32977:48;;;33016:8;32977:48;;;;;;:::i;:::-;;;;;;;;32738:295;;:::o;50776:172::-;50838:7;50858:23;50884:3;;;;;;;;;;;:17;;;50902:6;50884:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50858:51;;50927:6;:13;50920:20;;;50776:172;;;:::o;49515:27::-;;;;;;;;;;;;;:::o;34001:328::-;34176:41;34195:12;:10;:12::i;:::-;34209:7;34176:18;:41::i;:::-;34168:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34282:39;34296:4;34302:2;34306:7;34315:5;34282:13;:39::i;:::-;34001:328;;;;:::o;31172:387::-;31245:13;31279:16;31287:7;31279;:16::i;:::-;31271:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31360:18;31381:9;:7;:9::i;:::-;31360:30;;31401:27;:37;;;;;;;;;;;;;;;;;;;31477:1;31462:4;31456:18;:22;:95;;;;;;;;;;;;;;;;;31505:4;31511:18;:7;:16;:18::i;:::-;31531:13;31488:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31456:95;31449:102;;;;31172:387;;;:::o;49408:40::-;49444:4;49408:40;:::o;33104:164::-;33201:4;33225:18;:25;33244:5;33225:25;;;;;;;;;;;;;;;:35;33251:8;33225:35;;;;;;;;;;;;;;;;;;;;;;;;;33218:42;;33104:164;;;;:::o;28245:192::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28354:1:::1;28334:22;;:8;:22;;;;28326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28410:19;28420:8;28410:9;:19::i;:::-;28245:192:::0;:::o;51061:83::-;27520:12;:10;:12::i;:::-;27509:23;;:7;:5;:7::i;:::-;:23;;;27501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51128:8:::1;;;;;;;;;;;51127:9;51116:8;;:20;;;;;;;;;;;;;;;;;;51061:83::o:0;49549:26::-;;;;;;;;;;;;;:::o;29883:305::-;29985:4;30037:25;30022:40;;;:11;:40;;;;:105;;;;30094:33;30079:48;;;:11;:48;;;;30022:105;:158;;;;30144:36;30168:11;30144:23;:36::i;:::-;30022:158;30002:178;;29883:305;;;:::o;35839:127::-;35904:4;35956:1;35928:30;;:7;:16;35936:7;35928:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35921:37;;35839:127;;;:::o;26067:98::-;26120:7;26147:10;26140:17;;26067:98;:::o;39821:174::-;39923:2;39896:15;:24;39912:7;39896:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39979:7;39975:2;39941:46;;39950:23;39965:7;39950:14;:23::i;:::-;39941:46;;;;;;;;;;;;39821:174;;:::o;36133:348::-;36226:4;36251:16;36259:7;36251;:16::i;:::-;36243:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36327:13;36343:23;36358:7;36343:14;:23::i;:::-;36327:39;;36396:5;36385:16;;:7;:16;;;:51;;;;36429:7;36405:31;;:20;36417:7;36405:11;:20::i;:::-;:31;;;36385:51;:87;;;;36440:32;36457:5;36464:7;36440:16;:32::i;:::-;36385:87;36377:96;;;36133:348;;;;:::o;39125:578::-;39284:4;39257:31;;:23;39272:7;39257:14;:23::i;:::-;:31;;;39249:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39367:1;39353:16;;:2;:16;;;;39345:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39423:39;39444:4;39450:2;39454:7;39423:20;:39::i;:::-;39527:29;39544:1;39548:7;39527:8;:29::i;:::-;39588:1;39569:9;:15;39579:4;39569:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39617:1;39600:9;:13;39610:2;39600:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39648:2;39629:7;:16;39637:7;39629:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39687:7;39683:2;39668:27;;39677:4;39668:27;;;;;;;;;;;;39125:578;;;:::o;36823:110::-;36899:26;36909:2;36913:7;36899:26;;;;;;;;;;;;:9;:26::i;:::-;36823:110;;:::o;28445:173::-;28501:16;28520:6;;;;;;;;;;;28501:25;;28546:8;28537:6;;:17;;;;;;;;;;;;;;;;;;28601:8;28570:40;;28591:8;28570:40;;;;;;;;;;;;28445:173;;:::o;35211:315::-;35368:28;35378:4;35384:2;35388:7;35368:9;:28::i;:::-;35415:48;35438:4;35444:2;35448:7;35457:5;35415:22;:48::i;:::-;35407:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35211:315;;;;:::o;31807:99::-;31857:13;31890:8;31883:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31807:99;:::o;7296:723::-;7352:13;7582:1;7573:5;:10;7569:53;;;7600:10;;;;;;;;;;;;;;;;;;;;;7569:53;7632:12;7647:5;7632:20;;7663:14;7688:78;7703:1;7695:4;:9;7688:78;;7721:8;;;;;:::i;:::-;;;;7752:2;7744:10;;;;;:::i;:::-;;;7688:78;;;7776:19;7808:6;7798:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7776:39;;7826:154;7842:1;7833:5;:10;7826:154;;7870:1;7860:11;;;;;:::i;:::-;;;7937:2;7929:5;:10;;;;:::i;:::-;7916:2;:24;;;;:::i;:::-;7903:39;;7886:6;7893;7886:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7966:2;7957:11;;;;;:::i;:::-;;;7826:154;;;8004:6;7990:21;;;;;7296:723;;;;:::o;19161:157::-;19246:4;19285:25;19270:40;;;:11;:40;;;;19263:47;;19161:157;;;:::o;44558:589::-;44702:45;44729:4;44735:2;44739:7;44702:26;:45::i;:::-;44780:1;44764:18;;:4;:18;;;44760:187;;;44799:40;44831:7;44799:31;:40::i;:::-;44760:187;;;44869:2;44861:10;;:4;:10;;;44857:90;;44888:47;44921:4;44927:7;44888:32;:47::i;:::-;44857:90;44760:187;44975:1;44961:16;;:2;:16;;;44957:183;;;44994:45;45031:7;44994:36;:45::i;:::-;44957:183;;;45067:4;45061:10;;:2;:10;;;45057:83;;45088:40;45116:2;45120:7;45088:27;:40::i;:::-;45057:83;44957:183;44558:589;;;:::o;37160:321::-;37290:18;37296:2;37300:7;37290:5;:18::i;:::-;37341:54;37372:1;37376:2;37380:7;37389:5;37341:22;:54::i;:::-;37319:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37160:321;;;:::o;40560:803::-;40715:4;40736:15;:2;:13;;;:15::i;:::-;40732:624;;;40788:2;40772:36;;;40809:12;:10;:12::i;:::-;40823:4;40829:7;40838:5;40772:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40768:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41035:1;41018:6;:13;:18;41014:272;;;41061:60;;;;;;;;;;:::i;:::-;;;;;;;;41014:272;41236:6;41230:13;41221:6;41217:2;41213:15;41206:38;40768:533;40905:45;;;40895:55;;;:6;:55;;;;40888:62;;;;;40732:624;41340:4;41333:11;;40560:803;;;;;;;:::o;41935:126::-;;;;:::o;45870:164::-;45974:10;:17;;;;45947:15;:24;45963:7;45947:24;;;;;;;;;;;:44;;;;46002:10;46018:7;46002:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45870:164;:::o;46661:988::-;46927:22;46977:1;46952:22;46969:4;46952:16;:22::i;:::-;:26;;;;:::i;:::-;46927:51;;46989:18;47010:17;:26;47028:7;47010:26;;;;;;;;;;;;46989:47;;47157:14;47143:10;:28;47139:328;;47188:19;47210:12;:18;47223:4;47210:18;;;;;;;;;;;;;;;:34;47229:14;47210:34;;;;;;;;;;;;47188:56;;47294:11;47261:12;:18;47274:4;47261:18;;;;;;;;;;;;;;;:30;47280:10;47261:30;;;;;;;;;;;:44;;;;47411:10;47378:17;:30;47396:11;47378:30;;;;;;;;;;;:43;;;;47139:328;;47563:17;:26;47581:7;47563:26;;;;;;;;;;;47556:33;;;47607:12;:18;47620:4;47607:18;;;;;;;;;;;;;;;:34;47626:14;47607:34;;;;;;;;;;;47600:41;;;46661:988;;;;:::o;47944:1079::-;48197:22;48242:1;48222:10;:17;;;;:21;;;;:::i;:::-;48197:46;;48254:18;48275:15;:24;48291:7;48275:24;;;;;;;;;;;;48254:45;;48626:19;48648:10;48659:14;48648:26;;;;;;;;;;;;;;;;;;;;;;;;48626:48;;48712:11;48687:10;48698;48687:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48823:10;48792:15;:28;48808:11;48792:28;;;;;;;;;;;:41;;;;48964:15;:24;48980:7;48964:24;;;;;;;;;;;48957:31;;;48999:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47944:1079;;;;:::o;45448:221::-;45533:14;45550:20;45567:2;45550:16;:20::i;:::-;45533:37;;45608:7;45581:12;:16;45594:2;45581:16;;;;;;;;;;;;;;;:24;45598:6;45581:24;;;;;;;;;;;:34;;;;45655:6;45626:17;:26;45644:7;45626:26;;;;;;;;;;;:35;;;;45448:221;;;:::o;37817:382::-;37911:1;37897:16;;:2;:16;;;;37889:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37970:16;37978:7;37970;:16::i;:::-;37969:17;37961:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38032:45;38061:1;38065:2;38069:7;38032:20;:45::i;:::-;38107:1;38090:9;:13;38100:2;38090:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38138:2;38119:7;:16;38127:7;38119:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38183:7;38179:2;38158:33;;38175:1;38158:33;;;;;;;;;;;;37817:382;;:::o;9736:387::-;9796:4;10004:12;10071:7;10059:20;10051:28;;10114:1;10107:4;:8;10100:15;;;9736:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:644:1:-;;156:80;171:64;228:6;171:64;:::i;:::-;156:80;:::i;:::-;147:89;;256:5;284:6;277:5;270:21;310:4;303:5;299:16;292:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;402:1;399;392:12;350:2;430:1;415:247;440:6;437:1;434:13;415:247;;;507:3;535:48;579:3;567:10;535:48;:::i;:::-;530:3;523:61;613:4;608:3;604:14;597:21;;647:4;642:3;638:14;631:21;;475:187;462:1;459;455:9;450:14;;415:247;;;419:14;137:531;;;;;;;:::o;674:342::-;;776:64;791:48;832:6;791:48;:::i;:::-;776:64;:::i;:::-;767:73;;863:6;856:5;849:21;901:4;894:5;890:16;939:3;930:6;925:3;921:16;918:25;915:2;;;956:1;953;946:12;915:2;969:41;1003:6;998:3;993;969:41;:::i;:::-;757:259;;;;;;:::o;1022:344::-;;1125:65;1140:49;1182:6;1140:49;:::i;:::-;1125:65;:::i;:::-;1116:74;;1213:6;1206:5;1199:21;1251:4;1244:5;1240:16;1289:3;1280:6;1275:3;1271:16;1268:25;1265:2;;;1306:1;1303;1296:12;1265:2;1319:41;1353:6;1348:3;1343;1319:41;:::i;:::-;1106:260;;;;;;:::o;1372:139::-;;1456:6;1443:20;1434:29;;1472:33;1499:5;1472:33;:::i;:::-;1424:87;;;;:::o;1534:318::-;;1665:3;1658:4;1650:6;1646:17;1642:27;1632:2;;1683:1;1680;1673:12;1632:2;1716:6;1710:13;1741:105;1842:3;1834:6;1827:4;1819:6;1815:17;1741:105;:::i;:::-;1732:114;;1622:230;;;;;:::o;1858:133::-;;1939:6;1926:20;1917:29;;1955:30;1979:5;1955:30;:::i;:::-;1907:84;;;;:::o;1997:137::-;;2080:6;2067:20;2058:29;;2096:32;2122:5;2096:32;:::i;:::-;2048:86;;;;:::o;2140:141::-;;2227:6;2221:13;2212:22;;2243:32;2269:5;2243:32;:::i;:::-;2202:79;;;;:::o;2300:271::-;;2404:3;2397:4;2389:6;2385:17;2381:27;2371:2;;2422:1;2419;2412:12;2371:2;2462:6;2449:20;2487:78;2561:3;2553:6;2546:4;2538:6;2534:17;2487:78;:::i;:::-;2478:87;;2361:210;;;;;:::o;2591:273::-;;2696:3;2689:4;2681:6;2677:17;2673:27;2663:2;;2714:1;2711;2704:12;2663:2;2754:6;2741:20;2779:79;2854:3;2846:6;2839:4;2831:6;2827:17;2779:79;:::i;:::-;2770:88;;2653:211;;;;;:::o;2870:139::-;;2954:6;2941:20;2932:29;;2970:33;2997:5;2970:33;:::i;:::-;2922:87;;;;:::o;3015:143::-;;3103:6;3097:13;3088:22;;3119:33;3146:5;3119:33;:::i;:::-;3078:80;;;;:::o;3164:262::-;;3272:2;3260:9;3251:7;3247:23;3243:32;3240:2;;;3288:1;3285;3278:12;3240:2;3331:1;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3302:117;3230:196;;;;:::o;3432:407::-;;;3557:2;3545:9;3536:7;3532:23;3528:32;3525:2;;;3573:1;3570;3563:12;3525:2;3616:1;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3587:117;3743:2;3769:53;3814:7;3805:6;3794:9;3790:22;3769:53;:::i;:::-;3759:63;;3714:118;3515:324;;;;;:::o;3845:552::-;;;;3987:2;3975:9;3966:7;3962:23;3958:32;3955:2;;;4003:1;4000;3993:12;3955:2;4046:1;4071:53;4116:7;4107:6;4096:9;4092:22;4071:53;:::i;:::-;4061:63;;4017:117;4173:2;4199:53;4244:7;4235:6;4224:9;4220:22;4199:53;:::i;:::-;4189:63;;4144:118;4301:2;4327:53;4372:7;4363:6;4352:9;4348:22;4327:53;:::i;:::-;4317:63;;4272:118;3945:452;;;;;:::o;4403:809::-;;;;;4571:3;4559:9;4550:7;4546:23;4542:33;4539:2;;;4588:1;4585;4578:12;4539:2;4631:1;4656:53;4701:7;4692:6;4681:9;4677:22;4656:53;:::i;:::-;4646:63;;4602:117;4758:2;4784:53;4829:7;4820:6;4809:9;4805:22;4784:53;:::i;:::-;4774:63;;4729:118;4886:2;4912:53;4957:7;4948:6;4937:9;4933:22;4912:53;:::i;:::-;4902:63;;4857:118;5042:2;5031:9;5027:18;5014:32;5073:18;5065:6;5062:30;5059:2;;;5105:1;5102;5095:12;5059:2;5133:62;5187:7;5178:6;5167:9;5163:22;5133:62;:::i;:::-;5123:72;;4985:220;4529:683;;;;;;;:::o;5218:401::-;;;5340:2;5328:9;5319:7;5315:23;5311:32;5308:2;;;5356:1;5353;5346:12;5308:2;5399:1;5424:53;5469:7;5460:6;5449:9;5445:22;5424:53;:::i;:::-;5414:63;;5370:117;5526:2;5552:50;5594:7;5585:6;5574:9;5570:22;5552:50;:::i;:::-;5542:60;;5497:115;5298:321;;;;;:::o;5625:407::-;;;5750:2;5738:9;5729:7;5725:23;5721:32;5718:2;;;5766:1;5763;5756:12;5718:2;5809:1;5834:53;5879:7;5870:6;5859:9;5855:22;5834:53;:::i;:::-;5824:63;;5780:117;5936:2;5962:53;6007:7;5998:6;5987:9;5983:22;5962:53;:::i;:::-;5952:63;;5907:118;5708:324;;;;;:::o;6038:420::-;;6182:2;6170:9;6161:7;6157:23;6153:32;6150:2;;;6198:1;6195;6188:12;6150:2;6262:1;6251:9;6247:17;6241:24;6292:18;6284:6;6281:30;6278:2;;;6324:1;6321;6314:12;6278:2;6352:89;6433:7;6424:6;6413:9;6409:22;6352:89;:::i;:::-;6342:99;;6212:239;6140:318;;;;:::o;6464:260::-;;6571:2;6559:9;6550:7;6546:23;6542:32;6539:2;;;6587:1;6584;6577:12;6539:2;6630:1;6655:52;6699:7;6690:6;6679:9;6675:22;6655:52;:::i;:::-;6645:62;;6601:116;6529:195;;;;:::o;6730:282::-;;6848:2;6836:9;6827:7;6823:23;6819:32;6816:2;;;6864:1;6861;6854:12;6816:2;6907:1;6932:63;6987:7;6978:6;6967:9;6963:22;6932:63;:::i;:::-;6922:73;;6878:127;6806:206;;;;:::o;7018:375::-;;7136:2;7124:9;7115:7;7111:23;7107:32;7104:2;;;7152:1;7149;7142:12;7104:2;7223:1;7212:9;7208:17;7195:31;7253:18;7245:6;7242:30;7239:2;;;7285:1;7282;7275:12;7239:2;7313:63;7368:7;7359:6;7348:9;7344:22;7313:63;:::i;:::-;7303:73;;7166:220;7094:299;;;;:::o;7399:262::-;;7507:2;7495:9;7486:7;7482:23;7478:32;7475:2;;;7523:1;7520;7513:12;7475:2;7566:1;7591:53;7636:7;7627:6;7616:9;7612:22;7591:53;:::i;:::-;7581:63;;7537:117;7465:196;;;;:::o;7667:179::-;;7757:46;7799:3;7791:6;7757:46;:::i;:::-;7835:4;7830:3;7826:14;7812:28;;7747:99;;;;:::o;7852:118::-;7939:24;7957:5;7939:24;:::i;:::-;7934:3;7927:37;7917:53;;:::o;8006:732::-;;8154:54;8202:5;8154:54;:::i;:::-;8224:86;8303:6;8298:3;8224:86;:::i;:::-;8217:93;;8334:56;8384:5;8334:56;:::i;:::-;8413:7;8444:1;8429:284;8454:6;8451:1;8448:13;8429:284;;;8530:6;8524:13;8557:63;8616:3;8601:13;8557:63;:::i;:::-;8550:70;;8643:60;8696:6;8643:60;:::i;:::-;8633:70;;8489:224;8476:1;8473;8469:9;8464:14;;8429:284;;;8433:14;8729:3;8722:10;;8130:608;;;;;;;:::o;8744:109::-;8825:21;8840:5;8825:21;:::i;:::-;8820:3;8813:34;8803:50;;:::o;8859:360::-;;8973:38;9005:5;8973:38;:::i;:::-;9027:70;9090:6;9085:3;9027:70;:::i;:::-;9020:77;;9106:52;9151:6;9146:3;9139:4;9132:5;9128:16;9106:52;:::i;:::-;9183:29;9205:6;9183:29;:::i;:::-;9178:3;9174:39;9167:46;;8949:270;;;;;:::o;9225:364::-;;9341:39;9374:5;9341:39;:::i;:::-;9396:71;9460:6;9455:3;9396:71;:::i;:::-;9389:78;;9476:52;9521:6;9516:3;9509:4;9502:5;9498:16;9476:52;:::i;:::-;9553:29;9575:6;9553:29;:::i;:::-;9548:3;9544:39;9537:46;;9317:272;;;;;:::o;9595:377::-;;9729:39;9762:5;9729:39;:::i;:::-;9784:89;9866:6;9861:3;9784:89;:::i;:::-;9777:96;;9882:52;9927:6;9922:3;9915:4;9908:5;9904:16;9882:52;:::i;:::-;9959:6;9954:3;9950:16;9943:23;;9705:267;;;;;:::o;9978:327::-;;10141:67;10205:2;10200:3;10141:67;:::i;:::-;10134:74;;10238:31;10234:1;10229:3;10225:11;10218:52;10296:2;10291:3;10287:12;10280:19;;10124:181;;;:::o;10311:317::-;;10474:67;10538:2;10533:3;10474:67;:::i;:::-;10467:74;;10571:21;10567:1;10562:3;10558:11;10551:42;10619:2;10614:3;10610:12;10603:19;;10457:171;;;:::o;10634:375::-;;10797:67;10861:2;10856:3;10797:67;:::i;:::-;10790:74;;10894:34;10890:1;10885:3;10881:11;10874:55;10960:13;10955:2;10950:3;10946:12;10939:35;11000:2;10995:3;10991:12;10984:19;;10780:229;;;:::o;11015:382::-;;11178:67;11242:2;11237:3;11178:67;:::i;:::-;11171:74;;11275:34;11271:1;11266:3;11262:11;11255:55;11341:20;11336:2;11331:3;11327:12;11320:42;11388:2;11383:3;11379:12;11372:19;;11161:236;;;:::o;11403:370::-;;11566:67;11630:2;11625:3;11566:67;:::i;:::-;11559:74;;11663:34;11659:1;11654:3;11650:11;11643:55;11729:8;11724:2;11719:3;11715:12;11708:30;11764:2;11759:3;11755:12;11748:19;;11549:224;;;:::o;11779:326::-;;11942:67;12006:2;12001:3;11942:67;:::i;:::-;11935:74;;12039:30;12035:1;12030:3;12026:11;12019:51;12096:2;12091:3;12087:12;12080:19;;11925:180;;;:::o;12111:311::-;;12274:67;12338:2;12333:3;12274:67;:::i;:::-;12267:74;;12371:15;12367:1;12362:3;12358:11;12351:36;12413:2;12408:3;12404:12;12397:19;;12257:165;;;:::o;12428:368::-;;12591:67;12655:2;12650:3;12591:67;:::i;:::-;12584:74;;12688:34;12684:1;12679:3;12675:11;12668:55;12754:6;12749:2;12744:3;12740:12;12733:28;12787:2;12782:3;12778:12;12771:19;;12574:222;;;:::o;12802:323::-;;12965:67;13029:2;13024:3;12965:67;:::i;:::-;12958:74;;13062:27;13058:1;13053:3;13049:11;13042:48;13116:2;13111:3;13107:12;13100:19;;12948:177;;;:::o;13131:376::-;;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13391:34;13387:1;13382:3;13378:11;13371:55;13457:14;13452:2;13447:3;13443:12;13436:36;13498:2;13493:3;13489:12;13482:19;;13277:230;;;:::o;13513:388::-;;13676:67;13740:2;13735:3;13676:67;:::i;:::-;13669:74;;13773:34;13769:1;13764:3;13760:11;13753:55;13839:26;13834:2;13829:3;13825:12;13818:48;13892:2;13887:3;13883:12;13876:19;;13659:242;;;:::o;13907:374::-;;14070:67;14134:2;14129:3;14070:67;:::i;:::-;14063:74;;14167:34;14163:1;14158:3;14154:11;14147:55;14233:12;14228:2;14223:3;14219:12;14212:34;14272:2;14267:3;14263:12;14256:19;;14053:228;;;:::o;14287:373::-;;14450:67;14514:2;14509:3;14450:67;:::i;:::-;14443:74;;14547:34;14543:1;14538:3;14534:11;14527:55;14613:11;14608:2;14603:3;14599:12;14592:33;14651:2;14646:3;14642:12;14635:19;;14433:227;;;:::o;14666:330::-;;14829:67;14893:2;14888:3;14829:67;:::i;:::-;14822:74;;14926:34;14922:1;14917:3;14913:11;14906:55;14987:2;14982:3;14978:12;14971:19;;14812:184;;;:::o;15002:376::-;;15165:67;15229:2;15224:3;15165:67;:::i;:::-;15158:74;;15262:34;15258:1;15253:3;15249:11;15242:55;15328:14;15323:2;15318:3;15314:12;15307:36;15369:2;15364:3;15360:12;15353:19;;15148:230;;;:::o;15384:330::-;;15547:67;15611:2;15606:3;15547:67;:::i;:::-;15540:74;;15644:34;15640:1;15635:3;15631:11;15624:55;15705:2;15700:3;15696:12;15689:19;;15530:184;;;:::o;15720:373::-;;15883:67;15947:2;15942:3;15883:67;:::i;:::-;15876:74;;15980:34;15976:1;15971:3;15967:11;15960:55;16046:11;16041:2;16036:3;16032:12;16025:33;16084:2;16079:3;16075:12;16068:19;;15866:227;;;:::o;16099:379::-;;16262:67;16326:2;16321:3;16262:67;:::i;:::-;16255:74;;16359:34;16355:1;16350:3;16346:11;16339:55;16425:17;16420:2;16415:3;16411:12;16404:39;16469:2;16464:3;16460:12;16453:19;;16245:233;;;:::o;16484:315::-;;16647:67;16711:2;16706:3;16647:67;:::i;:::-;16640:74;;16744:19;16740:1;16735:3;16731:11;16724:40;16790:2;16785:3;16781:12;16774:19;;16630:169;;;:::o;16805:365::-;;16968:67;17032:2;17027:3;16968:67;:::i;:::-;16961:74;;17065:34;17061:1;17056:3;17052:11;17045:55;17131:3;17126:2;17121:3;17117:12;17110:25;17161:2;17156:3;17152:12;17145:19;;16951:219;;;:::o;17176:381::-;;17339:67;17403:2;17398:3;17339:67;:::i;:::-;17332:74;;17436:34;17432:1;17427:3;17423:11;17416:55;17502:19;17497:2;17492:3;17488:12;17481:41;17548:2;17543:3;17539:12;17532:19;;17322:235;;;:::o;17563:376::-;;17726:67;17790:2;17785:3;17726:67;:::i;:::-;17719:74;;17823:34;17819:1;17814:3;17810:11;17803:55;17889:14;17884:2;17879:3;17875:12;17868:36;17930:2;17925:3;17921:12;17914:19;;17709:230;;;:::o;17945:322::-;;18108:67;18172:2;18167:3;18108:67;:::i;:::-;18101:74;;18205:26;18201:1;18196:3;18192:11;18185:47;18258:2;18253:3;18249:12;18242:19;;18091:176;;;:::o;18273:330::-;;18436:67;18500:2;18495:3;18436:67;:::i;:::-;18429:74;;18533:34;18529:1;18524:3;18520:11;18513:55;18594:2;18589:3;18585:12;18578:19;;18419:184;;;:::o;18609:108::-;18686:24;18704:5;18686:24;:::i;:::-;18681:3;18674:37;18664:53;;:::o;18723:118::-;18810:24;18828:5;18810:24;:::i;:::-;18805:3;18798:37;18788:53;;:::o;18847:595::-;;19097:95;19188:3;19179:6;19097:95;:::i;:::-;19090:102;;19209:95;19300:3;19291:6;19209:95;:::i;:::-;19202:102;;19321:95;19412:3;19403:6;19321:95;:::i;:::-;19314:102;;19433:3;19426:10;;19079:363;;;;;;:::o;19448:222::-;;19579:2;19568:9;19564:18;19556:26;;19592:71;19660:1;19649:9;19645:17;19636:6;19592:71;:::i;:::-;19546:124;;;;:::o;19676:640::-;;19909:3;19898:9;19894:19;19886:27;;19923:71;19991:1;19980:9;19976:17;19967:6;19923:71;:::i;:::-;20004:72;20072:2;20061:9;20057:18;20048:6;20004:72;:::i;:::-;20086;20154:2;20143:9;20139:18;20130:6;20086:72;:::i;:::-;20205:9;20199:4;20195:20;20190:2;20179:9;20175:18;20168:48;20233:76;20304:4;20295:6;20233:76;:::i;:::-;20225:84;;19876:440;;;;;;;:::o;20322:373::-;;20503:2;20492:9;20488:18;20480:26;;20552:9;20546:4;20542:20;20538:1;20527:9;20523:17;20516:47;20580:108;20683:4;20674:6;20580:108;:::i;:::-;20572:116;;20470:225;;;;:::o;20701:210::-;;20826:2;20815:9;20811:18;20803:26;;20839:65;20901:1;20890:9;20886:17;20877:6;20839:65;:::i;:::-;20793:118;;;;:::o;20917:313::-;;21068:2;21057:9;21053:18;21045:26;;21117:9;21111:4;21107:20;21103:1;21092:9;21088:17;21081:47;21145:78;21218:4;21209:6;21145:78;:::i;:::-;21137:86;;21035:195;;;;:::o;21236:419::-;;21440:2;21429:9;21425:18;21417:26;;21489:9;21483:4;21479:20;21475:1;21464:9;21460:17;21453:47;21517:131;21643:4;21517:131;:::i;:::-;21509:139;;21407:248;;;:::o;21661:419::-;;21865:2;21854:9;21850:18;21842:26;;21914:9;21908:4;21904:20;21900:1;21889:9;21885:17;21878:47;21942:131;22068:4;21942:131;:::i;:::-;21934:139;;21832:248;;;:::o;22086:419::-;;22290:2;22279:9;22275:18;22267:26;;22339:9;22333:4;22329:20;22325:1;22314:9;22310:17;22303:47;22367:131;22493:4;22367:131;:::i;:::-;22359:139;;22257:248;;;:::o;22511:419::-;;22715:2;22704:9;22700:18;22692:26;;22764:9;22758:4;22754:20;22750:1;22739:9;22735:17;22728:47;22792:131;22918:4;22792:131;:::i;:::-;22784:139;;22682:248;;;:::o;22936:419::-;;23140:2;23129:9;23125:18;23117:26;;23189:9;23183:4;23179:20;23175:1;23164:9;23160:17;23153:47;23217:131;23343:4;23217:131;:::i;:::-;23209:139;;23107:248;;;:::o;23361:419::-;;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23532:248;;;:::o;23786:419::-;;23990:2;23979:9;23975:18;23967:26;;24039:9;24033:4;24029:20;24025:1;24014:9;24010:17;24003:47;24067:131;24193:4;24067:131;:::i;:::-;24059:139;;23957:248;;;:::o;24211:419::-;;24415:2;24404:9;24400:18;24392:26;;24464:9;24458:4;24454:20;24450:1;24439:9;24435:17;24428:47;24492:131;24618:4;24492:131;:::i;:::-;24484:139;;24382:248;;;:::o;24636:419::-;;24840:2;24829:9;24825:18;24817:26;;24889:9;24883:4;24879:20;24875:1;24864:9;24860:17;24853:47;24917:131;25043:4;24917:131;:::i;:::-;24909:139;;24807:248;;;:::o;25061:419::-;;25265:2;25254:9;25250:18;25242:26;;25314:9;25308:4;25304:20;25300:1;25289:9;25285:17;25278:47;25342:131;25468:4;25342:131;:::i;:::-;25334:139;;25232:248;;;:::o;25486:419::-;;25690:2;25679:9;25675:18;25667:26;;25739:9;25733:4;25729:20;25725:1;25714:9;25710:17;25703:47;25767:131;25893:4;25767:131;:::i;:::-;25759:139;;25657:248;;;:::o;25911:419::-;;26115:2;26104:9;26100:18;26092:26;;26164:9;26158:4;26154:20;26150:1;26139:9;26135:17;26128:47;26192:131;26318:4;26192:131;:::i;:::-;26184:139;;26082:248;;;:::o;26336:419::-;;26540:2;26529:9;26525:18;26517:26;;26589:9;26583:4;26579:20;26575:1;26564:9;26560:17;26553:47;26617:131;26743:4;26617:131;:::i;:::-;26609:139;;26507:248;;;:::o;26761:419::-;;26965:2;26954:9;26950:18;26942:26;;27014:9;27008:4;27004:20;27000:1;26989:9;26985:17;26978:47;27042:131;27168:4;27042:131;:::i;:::-;27034:139;;26932:248;;;:::o;27186:419::-;;27390:2;27379:9;27375:18;27367:26;;27439:9;27433:4;27429:20;27425:1;27414:9;27410:17;27403:47;27467:131;27593:4;27467:131;:::i;:::-;27459:139;;27357:248;;;:::o;27611:419::-;;27815:2;27804:9;27800:18;27792:26;;27864:9;27858:4;27854:20;27850:1;27839:9;27835:17;27828:47;27892:131;28018:4;27892:131;:::i;:::-;27884:139;;27782:248;;;:::o;28036:419::-;;28240:2;28229:9;28225:18;28217:26;;28289:9;28283:4;28279:20;28275:1;28264:9;28260:17;28253:47;28317:131;28443:4;28317:131;:::i;:::-;28309:139;;28207:248;;;:::o;28461:419::-;;28665:2;28654:9;28650:18;28642:26;;28714:9;28708:4;28704:20;28700:1;28689:9;28685:17;28678:47;28742:131;28868:4;28742:131;:::i;:::-;28734:139;;28632:248;;;:::o;28886:419::-;;29090:2;29079:9;29075:18;29067:26;;29139:9;29133:4;29129:20;29125:1;29114:9;29110:17;29103:47;29167:131;29293:4;29167:131;:::i;:::-;29159:139;;29057:248;;;:::o;29311:419::-;;29515:2;29504:9;29500:18;29492:26;;29564:9;29558:4;29554:20;29550:1;29539:9;29535:17;29528:47;29592:131;29718:4;29592:131;:::i;:::-;29584:139;;29482:248;;;:::o;29736:419::-;;29940:2;29929:9;29925:18;29917:26;;29989:9;29983:4;29979:20;29975:1;29964:9;29960:17;29953:47;30017:131;30143:4;30017:131;:::i;:::-;30009:139;;29907:248;;;:::o;30161:419::-;;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30332:248;;;:::o;30586:419::-;;30790:2;30779:9;30775:18;30767:26;;30839:9;30833:4;30829:20;30825:1;30814:9;30810:17;30803:47;30867:131;30993:4;30867:131;:::i;:::-;30859:139;;30757:248;;;:::o;31011:419::-;;31215:2;31204:9;31200:18;31192:26;;31264:9;31258:4;31254:20;31250:1;31239:9;31235:17;31228:47;31292:131;31418:4;31292:131;:::i;:::-;31284:139;;31182:248;;;:::o;31436:222::-;;31567:2;31556:9;31552:18;31544:26;;31580:71;31648:1;31637:9;31633:17;31624:6;31580:71;:::i;:::-;31534:124;;;;:::o;31664:283::-;;31730:2;31724:9;31714:19;;31772:4;31764:6;31760:17;31879:6;31867:10;31864:22;31843:18;31831:10;31828:34;31825:62;31822:2;;;31890:18;;:::i;:::-;31822:2;31930:10;31926:2;31919:22;31704:243;;;;:::o;31953:311::-;;32120:18;32112:6;32109:30;32106:2;;;32142:18;;:::i;:::-;32106:2;32192:4;32184:6;32180:17;32172:25;;32252:4;32246;32242:15;32234:23;;32035:229;;;:::o;32270:331::-;;32421:18;32413:6;32410:30;32407:2;;;32443:18;;:::i;:::-;32407:2;32528:4;32524:9;32517:4;32509:6;32505:17;32501:33;32493:41;;32589:4;32583;32579:15;32571:23;;32336:265;;;:::o;32607:332::-;;32759:18;32751:6;32748:30;32745:2;;;32781:18;;:::i;:::-;32745:2;32866:4;32862:9;32855:4;32847:6;32843:17;32839:33;32831:41;;32927:4;32921;32917:15;32909:23;;32674:265;;;:::o;32945:132::-;;33035:3;33027:11;;33065:4;33060:3;33056:14;33048:22;;33017:60;;;:::o;33083:114::-;;33184:5;33178:12;33168:22;;33157:40;;;:::o;33203:98::-;;33288:5;33282:12;33272:22;;33261:40;;;:::o;33307:99::-;;33393:5;33387:12;33377:22;;33366:40;;;:::o;33412:113::-;;33514:4;33509:3;33505:14;33497:22;;33487:38;;;:::o;33531:184::-;;33664:6;33659:3;33652:19;33704:4;33699:3;33695:14;33680:29;;33642:73;;;;:::o;33721:168::-;;33838:6;33833:3;33826:19;33878:4;33873:3;33869:14;33854:29;;33816:73;;;;:::o;33895:169::-;;34013:6;34008:3;34001:19;34053:4;34048:3;34044:14;34029:29;;33991:73;;;;:::o;34070:148::-;;34209:3;34194:18;;34184:34;;;;:::o;34224:305::-;;34283:20;34301:1;34283:20;:::i;:::-;34278:25;;34317:20;34335:1;34317:20;:::i;:::-;34312:25;;34471:1;34403:66;34399:74;34396:1;34393:81;34390:2;;;34477:18;;:::i;:::-;34390:2;34521:1;34518;34514:9;34507:16;;34268:261;;;;:::o;34535:246::-;;34593:19;34610:1;34593:19;:::i;:::-;34588:24;;34626:19;34643:1;34626:19;:::i;:::-;34621:24;;34723:1;34711:10;34707:18;34704:1;34701:25;34698:2;;;34729:18;;:::i;:::-;34698:2;34773:1;34770;34766:9;34759:16;;34578:203;;;;:::o;34787:185::-;;34844:20;34862:1;34844:20;:::i;:::-;34839:25;;34878:20;34896:1;34878:20;:::i;:::-;34873:25;;34917:1;34907:2;;34922:18;;:::i;:::-;34907:2;34964:1;34961;34957:9;34952:14;;34829:143;;;;:::o;34978:348::-;;35041:20;35059:1;35041:20;:::i;:::-;35036:25;;35075:20;35093:1;35075:20;:::i;:::-;35070:25;;35263:1;35195:66;35191:74;35188:1;35185:81;35180:1;35173:9;35166:17;35162:105;35159:2;;;35270:18;;:::i;:::-;35159:2;35318:1;35315;35311:9;35300:20;;35026:300;;;;:::o;35332:191::-;;35392:20;35410:1;35392:20;:::i;:::-;35387:25;;35426:20;35444:1;35426:20;:::i;:::-;35421:25;;35465:1;35462;35459:8;35456:2;;;35470:18;;:::i;:::-;35456:2;35515:1;35512;35508:9;35500:17;;35377:146;;;;:::o;35529:96::-;;35595:24;35613:5;35595:24;:::i;:::-;35584:35;;35574:51;;;:::o;35631:90::-;;35708:5;35701:13;35694:21;35683:32;;35673:48;;;:::o;35727:149::-;;35803:66;35796:5;35792:78;35781:89;;35771:105;;;:::o;35882:126::-;;35959:42;35952:5;35948:54;35937:65;;35927:81;;;:::o;36014:77::-;;36080:5;36069:16;;36059:32;;;:::o;36097:93::-;;36173:10;36166:5;36162:22;36151:33;;36141:49;;;:::o;36196:154::-;36280:6;36275:3;36270;36257:30;36342:1;36333:6;36328:3;36324:16;36317:27;36247:103;;;:::o;36356:307::-;36424:1;36434:113;36448:6;36445:1;36442:13;36434:113;;;36533:1;36528:3;36524:11;36518:18;36514:1;36509:3;36505:11;36498:39;36470:2;36467:1;36463:10;36458:15;;36434:113;;;36565:6;36562:1;36559:13;36556:2;;;36645:1;36636:6;36631:3;36627:16;36620:27;36556:2;36405:258;;;;:::o;36669:320::-;;36750:1;36744:4;36740:12;36730:22;;36797:1;36791:4;36787:12;36818:18;36808:2;;36874:4;36866:6;36862:17;36852:27;;36808:2;36936;36928:6;36925:14;36905:18;36902:38;36899:2;;;36955:18;;:::i;:::-;36899:2;36720:269;;;;:::o;36995:233::-;;37057:24;37075:5;37057:24;:::i;:::-;37048:33;;37103:66;37096:5;37093:77;37090:2;;;37173:18;;:::i;:::-;37090:2;37220:1;37213:5;37209:13;37202:20;;37038:190;;;:::o;37234:176::-;;37283:20;37301:1;37283:20;:::i;:::-;37278:25;;37317:20;37335:1;37317:20;:::i;:::-;37312:25;;37356:1;37346:2;;37361:18;;:::i;:::-;37346:2;37402:1;37399;37395:9;37390:14;;37268:142;;;;:::o;37416:180::-;37464:77;37461:1;37454:88;37561:4;37558:1;37551:15;37585:4;37582:1;37575:15;37602:180;37650:77;37647:1;37640:88;37747:4;37744:1;37737:15;37771:4;37768:1;37761:15;37788:180;37836:77;37833:1;37826:88;37933:4;37930:1;37923:15;37957:4;37954:1;37947:15;37974:180;38022:77;38019:1;38012:88;38119:4;38116:1;38109:15;38143:4;38140:1;38133:15;38160:102;;38252:2;38248:7;38243:2;38236:5;38232:14;38228:28;38218:38;;38208:54;;;:::o;38268:122::-;38341:24;38359:5;38341:24;:::i;:::-;38334:5;38331:35;38321:2;;38380:1;38377;38370:12;38321:2;38311:79;:::o;38396:116::-;38466:21;38481:5;38466:21;:::i;:::-;38459:5;38456:32;38446:2;;38502:1;38499;38492:12;38446:2;38436:76;:::o;38518:120::-;38590:23;38607:5;38590:23;:::i;:::-;38583:5;38580:34;38570:2;;38628:1;38625;38618:12;38570:2;38560:78;:::o;38644:122::-;38717:24;38735:5;38717:24;:::i;:::-;38710:5;38707:35;38697:2;;38756:1;38753;38746:12;38697:2;38687:79;:::o

Swarm Source

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