ETH Price: $3,430.06 (-1.44%)
Gas: 6 Gwei

Token

Creative Art Quest Magical Waves (CAQmw)
 

Overview

Max Total Supply

600 CAQmw

Holders

221

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
drogbaba.eth
Balance
3 CAQmw
0x7c86a99624f3988b31065e8349a93db86c3c1ac2
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:
CreativeArtQuestMagicalWaves

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional 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);
}

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

/**
 * @dev 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.
     */

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Implementation of 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();
        return bytes(base).length > 0 ? string(abi.encodePacked(base, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function baseURI() internal view virtual returns (string memory) {
        return _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 {}
}

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

contract  CreativeArtQuestMagicalWaves  is ERC721Enumerable, Ownable
{       
    mapping(string=>bool) artNames;

    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;

    uint public constant _TOTALSUPPLY =600;
    uint public maxQuantity =10;
    uint public maxNewColQuantity=30;
    uint256 public price = 0.06 ether;
    uint public preSaleSupply=360;
    bool public isPaused = true;
    bool public isPreSalePaused=true;
    bool public isNewColPaused=true;
    uint public whiteListCounter=2;
    uint private newColSupply=600;
    uint private tokenId=1;
    
    struct SpecificAddresses{
        
        
        address userAddress;
        uint counter;
    }
    struct NewCollection{
        string name;
        uint quantity;
        uint price;
    }
    mapping(string => NewCollection) public _newCollection;
    mapping(address => SpecificAddresses) public _whiteList;
    mapping(address=>bool) public _addressExist;
       

    constructor(string memory baseURI) ERC721("Creative Art Quest Magical Waves", "CAQmw")  {
        setBaseURI(baseURI);
    }
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseURI = baseURI;
    }

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




    modifier isSaleOpen{
        require(totalSupply() < _TOTALSUPPLY, "Sale end");
        _;
    }
    function flipPauseStatus() public onlyOwner {
        isPaused = !isPaused;
    }
    function flipPreSalePauseStatus() public onlyOwner {
        isPreSalePaused = !isPreSalePaused;
    }
    function flipNewColPauseStatus() public onlyOwner {
        isNewColPaused = !isNewColPaused;
    }
    function getPrice(uint256 _quantity) public view returns (uint256) {
       
           return _quantity*price ;
     }

  
    function addWhiteListBundle(address[] memory whiteAddress)public onlyOwner {
            for (uint i = 0; i < whiteAddress.length; i++)
            {
        
        require(!_addressExist[whiteAddress[i]],"Address already Exist");
        _whiteList[whiteAddress[i]]=SpecificAddresses({
             userAddress :whiteAddress[i],
            counter:whiteListCounter
           });
           _addressExist[whiteAddress[i]]=true;
    }
        }
    function addNewCollection(string memory _artName,uint _quantity,uint _price)public onlyOwner
    {
        artNames[_artName] = true;
          _newCollection[_artName]=NewCollection({
            name :_artName,
            quantity:_quantity,
            price:_price
           });
    }


     function preSaleMint(uint quantity) public payable{
        
        require(isPreSalePaused == false, "Sale is not active at the moment");
        require(quantity>0,"quantity less than one");
        require(preSaleSupply>=quantity,"Quantity is greater than remaining Supply");
        require(price.mul(quantity) == msg.value, "Sent ether value is incorrect");
        require(_addressExist[msg.sender]==true,"Address not Found in whitelist");
        SpecificAddresses storage myaddress = _whiteList[msg.sender];
        require(quantity<=myaddress.counter,"The Amount Selected is Greater than the Remaining Amount of the Token at this Address");
        preSaleSupply-=quantity;
        myaddress.counter-=quantity;
        
         for (uint256 i; i < quantity; i++) {
            _safeMint(msg.sender, totalsupply());
            tokenId++;
        }

        
    }

    function mint(uint chosenAmount) public payable isSaleOpen{
        require(isPaused == false, "Sale is not active at the moment");
        require(totalSupply()+chosenAmount<=_TOTALSUPPLY,"Quantity must be lesser then MaxSupply");
        require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0");
        require(chosenAmount <= maxQuantity,"Chosen Amount exceeds MaxQuantity");
        require(price.mul(chosenAmount) == msg.value, "Sent ether value is incorrect");
        for (uint i = 0; i < chosenAmount; i++) {
            _safeMint(msg.sender, totalsupply());
            tokenId++;
            }
    }
    function newCollectionMint(string memory _artName, uint _chosenAmount) public payable {
        require(artNames[_artName], "Non exist artName");



        require(isNewColPaused == false, "Sale is not active at the moment");
        require(_chosenAmount > 0, "Number of tokens can not be less than or equal to 0");
        require(_chosenAmount <= maxNewColQuantity,"Chosen Amount exceeds MaxQuantity");
        NewCollection storage newArt = _newCollection[_artName];
        require(newArt.quantity>0,"Sold Out");
        require(newArt.quantity>=_chosenAmount,"Quantity is greater than remaining Supply");
        require(newArt.price.mul(_chosenAmount) == msg.value, "Sent ether value is incorrect");
        newArt.quantity-=_chosenAmount;

        for (uint i = 0; i < _chosenAmount; i++) {
            _safeMint(msg.sender, newColTotalSupply());
            newColSupply++;
            
            }
        
        
    }
    
    function newColTotalSupply() private view returns (uint)
    {
        return newColSupply;
    }

    function totalsupply() private view returns (uint)
    {
        return tokenId;
    }
 
    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":[],"name":"_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_addressExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"_newCollection","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whiteList","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_artName","type":"string"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"addNewCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whiteAddress","type":"address[]"}],"name":"addWhiteListBundle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipNewColPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPreSalePauseStatus","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":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNewColPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPreSalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNewColQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_artName","type":"string"},{"internalType":"uint256","name":"_chosenAmount","type":"uint256"}],"name":"newCollectionMint","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"_quantity","type":"uint256"}],"name":"setMaxxQtPerTx","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":"whiteListCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a600d55601e600e5566d529ae9e860000600f556101686010556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff021916908315150217905550600260125561025860135560016014553480156200008d57600080fd5b5060405162005df838038062005df88339818101604052810190620000b3919062000427565b6040518060400160405280602081526020017f437265617469766520417274205175657374204d61676963616c2057617665738152506040518060400160405280600581526020017f4341516d77000000000000000000000000000000000000000000000000000000815250816000908051906020019062000137929190620002f9565b50806001908051906020019062000150929190620002f9565b5050506000620001656200021c60201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000215816200022460201b60201c565b506200067f565b600033905090565b620002346200021c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025a620002cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002aa906200049f565b60405180910390fd5b8060069080519060200190620002cb929190620002f9565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003079062000567565b90600052602060002090601f0160209004810192826200032b576000855562000377565b82601f106200034657805160ff191683800117855562000377565b8280016001018555821562000377579182015b828111156200037657825182559160200191906001019062000359565b5b5090506200038691906200038a565b5090565b5b80821115620003a55760008160009055506001016200038b565b5090565b6000620003c0620003ba84620004ea565b620004c1565b905082815260208101848484011115620003df57620003de62000636565b5b620003ec84828562000531565b509392505050565b600082601f8301126200040c576200040b62000631565b5b81516200041e848260208601620003a9565b91505092915050565b60006020828403121562000440576200043f62000640565b5b600082015167ffffffffffffffff8111156200046157620004606200063b565b5b6200046f84828501620003f4565b91505092915050565b60006200048760208362000520565b9150620004948262000656565b602082019050919050565b60006020820190508181036000830152620004ba8162000478565b9050919050565b6000620004cd620004e0565b9050620004db82826200059d565b919050565b6000604051905090565b600067ffffffffffffffff82111562000508576200050762000602565b5b620005138262000645565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200055157808201518184015260208101905062000534565b8381111562000561576000848401525b50505050565b600060028204905060018216806200058057607f821691505b60208210811415620005975762000596620005d3565b5b50919050565b620005a88262000645565b810181811067ffffffffffffffff82111715620005ca57620005c962000602565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615769806200068f6000396000f3fe6080604052600436106102725760003560e01c8063743976a01161014f578063b187bd26116100c1578063e640cf7d1161007a578063e640cf7d14610952578063e75722301461097d578063e985e9c5146109ba578063f2fde38b146109f7578063f83fe73414610a20578063fa62884c14610a4957610272565b8063b187bd261461082e578063b88d4fde14610859578063c2f0377614610882578063c87b56dd146108bf578063cd6a695c146108fc578063db4568e21461092757610272565b806391b7f5ed1161011357806391b7f5ed1461074157806395d89b411461076a5780639d38fd2114610795578063a035b1fe146107be578063a0712d68146107e9578063a22cb4651461080557610272565b8063743976a0146106535780637835c6351461067e5780638462151c1461069a5780638da5cb5b146106d75780638e734fa91461070257610272565b80632f745c59116101e85780634f6ccce7116101ac5780634f6ccce71461053157806355f804b31461056e5780636352211e1461059757806367f8ccb8146105d45780636913ba3e146105eb57806370a082311461061657610272565b80632f745c591461046f57806332534629146104ac5780633ccfd60b146104d55780633d0d7463146104ec57806342842e0e1461050857610272565b806318160ddd1161023a57806318160ddd146103835780631bbeefd2146103ae578063215ab613146103c557806323b872dd146103f05780632e055bcc146104195780632e280e321461044457610272565b806301ffc9a71461027757806305d60ffb146102b457806306fdde03146102f2578063081812fc1461031d578063095ea7b31461035a575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d3d565b610a60565b6040516102ab9190614557565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613b31565b610ada565b6040516102e992919061450c565b60405180910390f35b3480156102fe57600080fd5b50610307610b1e565b6040516103149190614572565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613eab565b610bb0565b60405161035191906144a5565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613cb4565b610c35565b005b34801561038f57600080fd5b50610398610d4d565b6040516103a591906149b2565b60405180910390f35b3480156103ba57600080fd5b506103c3610d5a565b005b3480156103d157600080fd5b506103da610e02565b6040516103e791906149b2565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613b9e565b610e08565b005b34801561042557600080fd5b5061042e610e68565b60405161043b91906149b2565b60405180910390f35b34801561045057600080fd5b50610459610e6e565b6040516104669190614557565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613cb4565b610e81565b6040516104a391906149b2565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613e3c565b610f26565b005b3480156104e157600080fd5b506104ea61104b565b005b61050660048036038101906105019190613de0565b611116565b005b34801561051457600080fd5b5061052f600480360381019061052a9190613b9e565b6113cf565b005b34801561053d57600080fd5b5061055860048036038101906105539190613eab565b6113ef565b60405161056591906149b2565b60405180910390f35b34801561057a57600080fd5b5061059560048036038101906105909190613d97565b611460565b005b3480156105a357600080fd5b506105be60048036038101906105b99190613eab565b6114f6565b6040516105cb91906144a5565b60405180910390f35b3480156105e057600080fd5b506105e96115a8565b005b3480156105f757600080fd5b50610600611650565b60405161060d91906149b2565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613b31565b611656565b60405161064a91906149b2565b60405180910390f35b34801561065f57600080fd5b5061066861170e565b6040516106759190614572565b60405180910390f35b61069860048036038101906106939190613eab565b61179c565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613b31565b611a6d565b6040516106ce9190614535565b60405180910390f35b3480156106e357600080fd5b506106ec611b1b565b6040516106f991906144a5565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613d97565b611b45565b60405161073893929190614594565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613eab565b611c0d565b005b34801561077657600080fd5b5061077f611c93565b60405161078c9190614572565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613eab565b611d25565b005b3480156107ca57600080fd5b506107d3611dab565b6040516107e091906149b2565b60405180910390f35b61080360048036038101906107fe9190613eab565b611db1565b005b34801561081157600080fd5b5061082c60048036038101906108279190613c74565b611fd2565b005b34801561083a57600080fd5b50610843612153565b6040516108509190614557565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613bf1565b612166565b005b34801561088e57600080fd5b506108a960048036038101906108a49190613b31565b6121c8565b6040516108b69190614557565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190613eab565b6121e8565b6040516108f39190614572565b60405180910390f35b34801561090857600080fd5b5061091161228f565b60405161091e9190614557565b60405180910390f35b34801561093357600080fd5b5061093c6122a2565b60405161094991906149b2565b60405180910390f35b34801561095e57600080fd5b506109676122a8565b60405161097491906149b2565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613eab565b6122ae565b6040516109b191906149b2565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613b5e565b6122c5565b6040516109ee9190614557565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613b31565b612359565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190613cf4565b612451565b005b348015610a5557600080fd5b50610a5e6126fd565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad35750610ad2826127a5565b5b9050919050565b60166020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b606060008054610b2d90614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5990614cc7565b8015610ba65780601f10610b7b57610100808354040283529160200191610ba6565b820191906000526020600020905b815481529060010190602001808311610b8957829003601f168201915b5050505050905090565b6000610bbb82612887565b610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf190614892565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c40826114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614932565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd06128f3565b73ffffffffffffffffffffffffffffffffffffffff161480610cff5750610cfe81610cf96128f3565b6122c5565b5b610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d35906147b2565b60405180910390fd5b610d4883836128fb565b505050565b6000600980549050905090565b610d626128f3565b73ffffffffffffffffffffffffffffffffffffffff16610d80611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd906148b2565b60405180910390fd5b601160029054906101000a900460ff1615601160026101000a81548160ff021916908315150217905550565b60125481565b610e19610e136128f3565b826129b4565b610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90614952565b60405180910390fd5b610e63838383612a92565b505050565b60105481565b601160019054906101000a900460ff1681565b6000610e8c83611656565b8210610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490614612565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f2e6128f3565b73ffffffffffffffffffffffffffffffffffffffff16610f4c611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f99906148b2565b60405180910390fd5b6001600c84604051610fb4919061446a565b908152602001604051809103902060006101000a81548160ff021916908315150217905550604051806060016040528084815260200183815260200182815250601584604051611004919061446a565b9081526020016040518091039020600082015181600001908051906020019061102e9291906138a7565b506020820151816001015560408201518160020155905050505050565b6110536128f3565b73ffffffffffffffffffffffffffffffffffffffff16611071611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be906148b2565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611112573d6000803e3d6000fd5b5050565b600c82604051611126919061446a565b908152602001604051809103902060009054906101000a900460ff16611181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611178906145d2565b60405180910390fd5b60001515601160029054906101000a900460ff161515146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90614992565b60405180910390fd5b6000811161121a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611211906145f2565b60405180910390fd5b600e5481111561125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690614872565b60405180910390fd5b6000601583604051611271919061446a565b9081526020016040518091039020905060008160010154116112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614652565b60405180910390fd5b818160010154101561130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690614752565b60405180910390fd5b34611327838360020154612cee90919063ffffffff16565b14611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90614812565b60405180910390fd5b8181600101600082825461137b9190614bdd565b9250508190555060005b828110156113c95761139e33611399612d04565b612d0e565b601360008154809291906113b190614d2a565b919050555080806113c190614d2a565b915050611385565b50505050565b6113ea83838360405180602001604052806000815250612166565b505050565b60006113f9610d4d565b821061143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190614972565b60405180910390fd5b6009828154811061144e5761144d614e60565b5b90600052602060002001549050919050565b6114686128f3565b73ffffffffffffffffffffffffffffffffffffffff16611486611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906148b2565b60405180910390fd5b80600690805190602001906114f29291906138a7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906147f2565b60405180910390fd5b80915050919050565b6115b06128f3565b73ffffffffffffffffffffffffffffffffffffffff166115ce611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b906148b2565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906147d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6006805461171b90614cc7565b80601f016020809104026020016040519081016040528092919081815260200182805461174790614cc7565b80156117945780601f1061176957610100808354040283529160200191611794565b820191906000526020600020905b81548152906001019060200180831161177757829003601f168201915b505050505081565b60001515601160019054906101000a900460ff161515146117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990614992565b60405180910390fd5b60008111611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90614772565b60405180910390fd5b80601054101561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614752565b60405180910390fd5b3461189082600f54612cee90919063ffffffff16565b146118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c790614812565b60405180910390fd5b60011515601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906146b2565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600101548211156119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614792565b60405180910390fd5b81601060008282546119ff9190614bdd565b9250508190555081816001016000828254611a1a9190614bdd565b9250508190555060005b82811015611a6857611a3d33611a38612d2c565b612d0e565b60146000815480929190611a5090614d2a565b91905055508080611a6090614d2a565b915050611a24565b505050565b60606000611a7a83611656565b905060008167ffffffffffffffff811115611a9857611a97614e8f565b5b604051908082528060200260200182016040528015611ac65781602001602082028036833780820191505090505b50905060005b82811015611b1057611ade8582610e81565b828281518110611af157611af0614e60565b5b6020026020010181815250508080611b0890614d2a565b915050611acc565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601581805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054611b7e90614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054611baa90614cc7565b8015611bf75780601f10611bcc57610100808354040283529160200191611bf7565b820191906000526020600020905b815481529060010190602001808311611bda57829003601f168201915b5050505050908060010154908060020154905083565b611c156128f3565b73ffffffffffffffffffffffffffffffffffffffff16611c33611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906148b2565b60405180910390fd5b80600f8190555050565b606060018054611ca290614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614cc7565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b5050505050905090565b611d2d6128f3565b73ffffffffffffffffffffffffffffffffffffffff16611d4b611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d98906148b2565b60405180910390fd5b80600d8190555050565b600f5481565b610258611dbc610d4d565b10611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614852565b60405180910390fd5b60001515601160009054906101000a900460ff16151514611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990614992565b60405180910390fd5b61025881611e5e610d4d565b611e689190614afc565b1115611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906148d2565b60405180910390fd5b60008111611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906145f2565b60405180910390fd5b600d54811115611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890614872565b60405180910390fd5b34611f4782600f54612cee90919063ffffffff16565b14611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90614812565b60405180910390fd5b60005b81811015611fce57611fa333611f9e612d2c565b612d0e565b60146000815480929190611fb690614d2a565b91905055508080611fc690614d2a565b915050611f8a565b5050565b611fda6128f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90614712565b60405180910390fd5b80600560006120556128f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121026128f3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121479190614557565b60405180910390a35050565b601160009054906101000a900460ff1681565b6121776121716128f3565b836129b4565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614952565b60405180910390fd5b6121c284848484612d36565b50505050565b60176020528060005260406000206000915054906101000a900460ff1681565b60606121f382612887565b612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614912565b60405180910390fd5b600061223c612d92565b9050600081511161225c5760405180602001604052806000815250612287565b8061226684612e24565b604051602001612277929190614481565b6040516020818303038152906040525b915050919050565b601160029054906101000a900460ff1681565b61025881565b600d5481565b6000600f54826122be9190614b83565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123616128f3565b73ffffffffffffffffffffffffffffffffffffffff1661237f611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906148b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243c90614672565b60405180910390fd5b61244e81612f85565b50565b6124596128f3565b73ffffffffffffffffffffffffffffffffffffffff16612477611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c4906148b2565b60405180910390fd5b60005b81518110156126f957601760008383815181106124f0576124ef614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612577906146d2565b60405180910390fd5b604051806040016040528083838151811061259e5761259d614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001601254815250601660008484815181106125de576125dd614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060016017600084848151811061268d5761268c614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806126f190614d2a565b9150506124d0565b5050565b6127056128f3565b73ffffffffffffffffffffffffffffffffffffffff16612723611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906148b2565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061287057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612880575061287f8261304b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661296e836114f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129bf82612887565b6129fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f590614732565b60405180910390fd5b6000612a09836114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a7857508373ffffffffffffffffffffffffffffffffffffffff16612a6084610bb0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a895750612a8881856122c5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ab2826114f6565b73ffffffffffffffffffffffffffffffffffffffff1614612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff906148f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f906146f2565b60405180910390fd5b612b838383836130b5565b612b8e6000826128fb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bde9190614bdd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c359190614afc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612cfc9190614b83565b905092915050565b6000601354905090565b612d288282604051806020016040528060008152506131c9565b5050565b6000601454905090565b612d41848484612a92565b612d4d84848484613224565b612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8390614632565b60405180910390fd5b50505050565b606060068054612da190614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054612dcd90614cc7565b8015612e1a5780601f10612def57610100808354040283529160200191612e1a565b820191906000526020600020905b815481529060010190602001808311612dfd57829003601f168201915b5050505050905090565b60606000821415612e6c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f80565b600082905060005b60008214612e9e578080612e8790614d2a565b915050600a82612e979190614b52565b9150612e74565b60008167ffffffffffffffff811115612eba57612eb9614e8f565b5b6040519080825280601f01601f191660200182016040528015612eec5781602001600182028036833780820191505090505b5090505b60008514612f7957600182612f059190614bdd565b9150600a85612f149190614d73565b6030612f209190614afc565b60f81b818381518110612f3657612f35614e60565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f729190614b52565b9450612ef0565b8093505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6130c08383836133bb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613103576130fe816133c0565b613142565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613141576131408382613409565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131855761318081613576565b6131c4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146131c3576131c28282613647565b5b5b505050565b6131d383836136c6565b6131e06000848484613224565b61321f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321690614632565b60405180910390fd5b505050565b60006132458473ffffffffffffffffffffffffffffffffffffffff16613894565b156133ae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261326e6128f3565b8786866040518563ffffffff1660e01b815260040161329094939291906144c0565b602060405180830381600087803b1580156132aa57600080fd5b505af19250505080156132db57506040513d601f19601f820116820180604052508101906132d89190613d6a565b60015b61335e573d806000811461330b576040519150601f19603f3d011682016040523d82523d6000602084013e613310565b606091505b50600081511415613356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334d90614632565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133b3565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161341684611656565b6134209190614bdd565b9050600060086000848152602001908152602001600020549050818114613505576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061358a9190614bdd565b90506000600a60008481526020019081526020016000205490506000600983815481106135ba576135b9614e60565b5b9060005260206000200154905080600983815481106135dc576135db614e60565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061362b5761362a614e31565b5b6001900381819060005260206000200160009055905550505050565b600061365283611656565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372d90614832565b60405180910390fd5b61373f81612887565b1561377f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377690614692565b60405180910390fd5b61378b600083836130b5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137db9190614afc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546138b390614cc7565b90600052602060002090601f0160209004810192826138d5576000855561391c565b82601f106138ee57805160ff191683800117855561391c565b8280016001018555821561391c579182015b8281111561391b578251825591602001919060010190613900565b5b509050613929919061392d565b5090565b5b8082111561394657600081600090555060010161392e565b5090565b600061395d613958846149f2565b6149cd565b905080838252602082019050828560208602820111156139805761397f614ec3565b5b60005b858110156139b057816139968882613a3e565b845260208401935060208301925050600181019050613983565b5050509392505050565b60006139cd6139c884614a1e565b6149cd565b9050828152602081018484840111156139e9576139e8614ec8565b5b6139f4848285614c85565b509392505050565b6000613a0f613a0a84614a4f565b6149cd565b905082815260208101848484011115613a2b57613a2a614ec8565b5b613a36848285614c85565b509392505050565b600081359050613a4d816156d7565b92915050565b600082601f830112613a6857613a67614ebe565b5b8135613a7884826020860161394a565b91505092915050565b600081359050613a90816156ee565b92915050565b600081359050613aa581615705565b92915050565b600081519050613aba81615705565b92915050565b600082601f830112613ad557613ad4614ebe565b5b8135613ae58482602086016139ba565b91505092915050565b600082601f830112613b0357613b02614ebe565b5b8135613b138482602086016139fc565b91505092915050565b600081359050613b2b8161571c565b92915050565b600060208284031215613b4757613b46614ed2565b5b6000613b5584828501613a3e565b91505092915050565b60008060408385031215613b7557613b74614ed2565b5b6000613b8385828601613a3e565b9250506020613b9485828601613a3e565b9150509250929050565b600080600060608486031215613bb757613bb6614ed2565b5b6000613bc586828701613a3e565b9350506020613bd686828701613a3e565b9250506040613be786828701613b1c565b9150509250925092565b60008060008060808587031215613c0b57613c0a614ed2565b5b6000613c1987828801613a3e565b9450506020613c2a87828801613a3e565b9350506040613c3b87828801613b1c565b925050606085013567ffffffffffffffff811115613c5c57613c5b614ecd565b5b613c6887828801613ac0565b91505092959194509250565b60008060408385031215613c8b57613c8a614ed2565b5b6000613c9985828601613a3e565b9250506020613caa85828601613a81565b9150509250929050565b60008060408385031215613ccb57613cca614ed2565b5b6000613cd985828601613a3e565b9250506020613cea85828601613b1c565b9150509250929050565b600060208284031215613d0a57613d09614ed2565b5b600082013567ffffffffffffffff811115613d2857613d27614ecd565b5b613d3484828501613a53565b91505092915050565b600060208284031215613d5357613d52614ed2565b5b6000613d6184828501613a96565b91505092915050565b600060208284031215613d8057613d7f614ed2565b5b6000613d8e84828501613aab565b91505092915050565b600060208284031215613dad57613dac614ed2565b5b600082013567ffffffffffffffff811115613dcb57613dca614ecd565b5b613dd784828501613aee565b91505092915050565b60008060408385031215613df757613df6614ed2565b5b600083013567ffffffffffffffff811115613e1557613e14614ecd565b5b613e2185828601613aee565b9250506020613e3285828601613b1c565b9150509250929050565b600080600060608486031215613e5557613e54614ed2565b5b600084013567ffffffffffffffff811115613e7357613e72614ecd565b5b613e7f86828701613aee565b9350506020613e9086828701613b1c565b9250506040613ea186828701613b1c565b9150509250925092565b600060208284031215613ec157613ec0614ed2565b5b6000613ecf84828501613b1c565b91505092915050565b6000613ee4838361444c565b60208301905092915050565b613ef981614c11565b82525050565b6000613f0a82614a90565b613f148185614abe565b9350613f1f83614a80565b8060005b83811015613f50578151613f378882613ed8565b9750613f4283614ab1565b925050600181019050613f23565b5085935050505092915050565b613f6681614c23565b82525050565b6000613f7782614a9b565b613f818185614acf565b9350613f91818560208601614c94565b613f9a81614ed7565b840191505092915050565b6000613fb082614aa6565b613fba8185614ae0565b9350613fca818560208601614c94565b613fd381614ed7565b840191505092915050565b6000613fe982614aa6565b613ff38185614af1565b9350614003818560208601614c94565b80840191505092915050565b600061401c601183614ae0565b915061402782614ee8565b602082019050919050565b600061403f603383614ae0565b915061404a82614f11565b604082019050919050565b6000614062602b83614ae0565b915061406d82614f60565b604082019050919050565b6000614085603283614ae0565b915061409082614faf565b604082019050919050565b60006140a8600883614ae0565b91506140b382614ffe565b602082019050919050565b60006140cb602683614ae0565b91506140d682615027565b604082019050919050565b60006140ee601c83614ae0565b91506140f982615076565b602082019050919050565b6000614111601e83614ae0565b915061411c8261509f565b602082019050919050565b6000614134601583614ae0565b915061413f826150c8565b602082019050919050565b6000614157602483614ae0565b9150614162826150f1565b604082019050919050565b600061417a601983614ae0565b915061418582615140565b602082019050919050565b600061419d602c83614ae0565b91506141a882615169565b604082019050919050565b60006141c0602983614ae0565b91506141cb826151b8565b604082019050919050565b60006141e3601683614ae0565b91506141ee82615207565b602082019050919050565b6000614206605583614ae0565b915061421182615230565b606082019050919050565b6000614229603883614ae0565b9150614234826152a5565b604082019050919050565b600061424c602a83614ae0565b9150614257826152f4565b604082019050919050565b600061426f602983614ae0565b915061427a82615343565b604082019050919050565b6000614292601d83614ae0565b915061429d82615392565b602082019050919050565b60006142b5602083614ae0565b91506142c0826153bb565b602082019050919050565b60006142d8600883614ae0565b91506142e3826153e4565b602082019050919050565b60006142fb602183614ae0565b91506143068261540d565b604082019050919050565b600061431e602c83614ae0565b91506143298261545c565b604082019050919050565b6000614341602083614ae0565b915061434c826154ab565b602082019050919050565b6000614364602683614ae0565b915061436f826154d4565b604082019050919050565b6000614387602983614ae0565b915061439282615523565b604082019050919050565b60006143aa602f83614ae0565b91506143b582615572565b604082019050919050565b60006143cd602183614ae0565b91506143d8826155c1565b604082019050919050565b60006143f0603183614ae0565b91506143fb82615610565b604082019050919050565b6000614413602c83614ae0565b915061441e8261565f565b604082019050919050565b6000614436602083614ae0565b9150614441826156ae565b602082019050919050565b61445581614c7b565b82525050565b61446481614c7b565b82525050565b60006144768284613fde565b915081905092915050565b600061448d8285613fde565b91506144998284613fde565b91508190509392505050565b60006020820190506144ba6000830184613ef0565b92915050565b60006080820190506144d56000830187613ef0565b6144e26020830186613ef0565b6144ef604083018561445b565b81810360608301526145018184613f6c565b905095945050505050565b60006040820190506145216000830185613ef0565b61452e602083018461445b565b9392505050565b6000602082019050818103600083015261454f8184613eff565b905092915050565b600060208201905061456c6000830184613f5d565b92915050565b6000602082019050818103600083015261458c8184613fa5565b905092915050565b600060608201905081810360008301526145ae8186613fa5565b90506145bd602083018561445b565b6145ca604083018461445b565b949350505050565b600060208201905081810360008301526145eb8161400f565b9050919050565b6000602082019050818103600083015261460b81614032565b9050919050565b6000602082019050818103600083015261462b81614055565b9050919050565b6000602082019050818103600083015261464b81614078565b9050919050565b6000602082019050818103600083015261466b8161409b565b9050919050565b6000602082019050818103600083015261468b816140be565b9050919050565b600060208201905081810360008301526146ab816140e1565b9050919050565b600060208201905081810360008301526146cb81614104565b9050919050565b600060208201905081810360008301526146eb81614127565b9050919050565b6000602082019050818103600083015261470b8161414a565b9050919050565b6000602082019050818103600083015261472b8161416d565b9050919050565b6000602082019050818103600083015261474b81614190565b9050919050565b6000602082019050818103600083015261476b816141b3565b9050919050565b6000602082019050818103600083015261478b816141d6565b9050919050565b600060208201905081810360008301526147ab816141f9565b9050919050565b600060208201905081810360008301526147cb8161421c565b9050919050565b600060208201905081810360008301526147eb8161423f565b9050919050565b6000602082019050818103600083015261480b81614262565b9050919050565b6000602082019050818103600083015261482b81614285565b9050919050565b6000602082019050818103600083015261484b816142a8565b9050919050565b6000602082019050818103600083015261486b816142cb565b9050919050565b6000602082019050818103600083015261488b816142ee565b9050919050565b600060208201905081810360008301526148ab81614311565b9050919050565b600060208201905081810360008301526148cb81614334565b9050919050565b600060208201905081810360008301526148eb81614357565b9050919050565b6000602082019050818103600083015261490b8161437a565b9050919050565b6000602082019050818103600083015261492b8161439d565b9050919050565b6000602082019050818103600083015261494b816143c0565b9050919050565b6000602082019050818103600083015261496b816143e3565b9050919050565b6000602082019050818103600083015261498b81614406565b9050919050565b600060208201905081810360008301526149ab81614429565b9050919050565b60006020820190506149c7600083018461445b565b92915050565b60006149d76149e8565b90506149e38282614cf9565b919050565b6000604051905090565b600067ffffffffffffffff821115614a0d57614a0c614e8f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a3957614a38614e8f565b5b614a4282614ed7565b9050602081019050919050565b600067ffffffffffffffff821115614a6a57614a69614e8f565b5b614a7382614ed7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b0782614c7b565b9150614b1283614c7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b4757614b46614da4565b5b828201905092915050565b6000614b5d82614c7b565b9150614b6883614c7b565b925082614b7857614b77614dd3565b5b828204905092915050565b6000614b8e82614c7b565b9150614b9983614c7b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bd257614bd1614da4565b5b828202905092915050565b6000614be882614c7b565b9150614bf383614c7b565b925082821015614c0657614c05614da4565b5b828203905092915050565b6000614c1c82614c5b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cb2578082015181840152602081019050614c97565b83811115614cc1576000848401525b50505050565b60006002820490506001821680614cdf57607f821691505b60208210811415614cf357614cf2614e02565b5b50919050565b614d0282614ed7565b810181811067ffffffffffffffff82111715614d2157614d20614e8f565b5b80604052505050565b6000614d3582614c7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d6857614d67614da4565b5b600182019050919050565b6000614d7e82614c7b565b9150614d8983614c7b565b925082614d9957614d98614dd3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f6e206578697374206172744e616d65000000000000000000000000000000600082015250565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f41646472657373206e6f7420466f756e6420696e2077686974656c6973740000600082015250565b7f4164647265737320616c72656164792045786973740000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5175616e746974792069732067726561746572207468616e2072656d61696e6960008201527f6e6720537570706c790000000000000000000000000000000000000000000000602082015250565b7f7175616e74697479206c657373207468616e206f6e6500000000000000000000600082015250565b7f54686520416d6f756e742053656c65637465642069732047726561746572207460008201527f68616e207468652052656d61696e696e6720416d6f756e74206f66207468652060208201527f546f6b656e206174207468697320416464726573730000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6156e081614c11565b81146156eb57600080fd5b50565b6156f781614c23565b811461570257600080fd5b50565b61570e81614c2f565b811461571957600080fd5b50565b61572581614c7b565b811461573057600080fd5b5056fea26469706673582212208e71c9dc2a191d0c35d2567e9b95935d6a6f0e0263a8bfb0727d6dad07c7478c64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e63726561746976656172742e71756573742f6170692f6d657461646174612f000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063743976a01161014f578063b187bd26116100c1578063e640cf7d1161007a578063e640cf7d14610952578063e75722301461097d578063e985e9c5146109ba578063f2fde38b146109f7578063f83fe73414610a20578063fa62884c14610a4957610272565b8063b187bd261461082e578063b88d4fde14610859578063c2f0377614610882578063c87b56dd146108bf578063cd6a695c146108fc578063db4568e21461092757610272565b806391b7f5ed1161011357806391b7f5ed1461074157806395d89b411461076a5780639d38fd2114610795578063a035b1fe146107be578063a0712d68146107e9578063a22cb4651461080557610272565b8063743976a0146106535780637835c6351461067e5780638462151c1461069a5780638da5cb5b146106d75780638e734fa91461070257610272565b80632f745c59116101e85780634f6ccce7116101ac5780634f6ccce71461053157806355f804b31461056e5780636352211e1461059757806367f8ccb8146105d45780636913ba3e146105eb57806370a082311461061657610272565b80632f745c591461046f57806332534629146104ac5780633ccfd60b146104d55780633d0d7463146104ec57806342842e0e1461050857610272565b806318160ddd1161023a57806318160ddd146103835780631bbeefd2146103ae578063215ab613146103c557806323b872dd146103f05780632e055bcc146104195780632e280e321461044457610272565b806301ffc9a71461027757806305d60ffb146102b457806306fdde03146102f2578063081812fc1461031d578063095ea7b31461035a575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613d3d565b610a60565b6040516102ab9190614557565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613b31565b610ada565b6040516102e992919061450c565b60405180910390f35b3480156102fe57600080fd5b50610307610b1e565b6040516103149190614572565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613eab565b610bb0565b60405161035191906144a5565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613cb4565b610c35565b005b34801561038f57600080fd5b50610398610d4d565b6040516103a591906149b2565b60405180910390f35b3480156103ba57600080fd5b506103c3610d5a565b005b3480156103d157600080fd5b506103da610e02565b6040516103e791906149b2565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613b9e565b610e08565b005b34801561042557600080fd5b5061042e610e68565b60405161043b91906149b2565b60405180910390f35b34801561045057600080fd5b50610459610e6e565b6040516104669190614557565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613cb4565b610e81565b6040516104a391906149b2565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613e3c565b610f26565b005b3480156104e157600080fd5b506104ea61104b565b005b61050660048036038101906105019190613de0565b611116565b005b34801561051457600080fd5b5061052f600480360381019061052a9190613b9e565b6113cf565b005b34801561053d57600080fd5b5061055860048036038101906105539190613eab565b6113ef565b60405161056591906149b2565b60405180910390f35b34801561057a57600080fd5b5061059560048036038101906105909190613d97565b611460565b005b3480156105a357600080fd5b506105be60048036038101906105b99190613eab565b6114f6565b6040516105cb91906144a5565b60405180910390f35b3480156105e057600080fd5b506105e96115a8565b005b3480156105f757600080fd5b50610600611650565b60405161060d91906149b2565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613b31565b611656565b60405161064a91906149b2565b60405180910390f35b34801561065f57600080fd5b5061066861170e565b6040516106759190614572565b60405180910390f35b61069860048036038101906106939190613eab565b61179c565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613b31565b611a6d565b6040516106ce9190614535565b60405180910390f35b3480156106e357600080fd5b506106ec611b1b565b6040516106f991906144a5565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613d97565b611b45565b60405161073893929190614594565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613eab565b611c0d565b005b34801561077657600080fd5b5061077f611c93565b60405161078c9190614572565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613eab565b611d25565b005b3480156107ca57600080fd5b506107d3611dab565b6040516107e091906149b2565b60405180910390f35b61080360048036038101906107fe9190613eab565b611db1565b005b34801561081157600080fd5b5061082c60048036038101906108279190613c74565b611fd2565b005b34801561083a57600080fd5b50610843612153565b6040516108509190614557565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613bf1565b612166565b005b34801561088e57600080fd5b506108a960048036038101906108a49190613b31565b6121c8565b6040516108b69190614557565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190613eab565b6121e8565b6040516108f39190614572565b60405180910390f35b34801561090857600080fd5b5061091161228f565b60405161091e9190614557565b60405180910390f35b34801561093357600080fd5b5061093c6122a2565b60405161094991906149b2565b60405180910390f35b34801561095e57600080fd5b506109676122a8565b60405161097491906149b2565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613eab565b6122ae565b6040516109b191906149b2565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc9190613b5e565b6122c5565b6040516109ee9190614557565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613b31565b612359565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190613cf4565b612451565b005b348015610a5557600080fd5b50610a5e6126fd565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad35750610ad2826127a5565b5b9050919050565b60166020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b606060008054610b2d90614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5990614cc7565b8015610ba65780601f10610b7b57610100808354040283529160200191610ba6565b820191906000526020600020905b815481529060010190602001808311610b8957829003601f168201915b5050505050905090565b6000610bbb82612887565b610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf190614892565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c40826114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614932565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd06128f3565b73ffffffffffffffffffffffffffffffffffffffff161480610cff5750610cfe81610cf96128f3565b6122c5565b5b610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d35906147b2565b60405180910390fd5b610d4883836128fb565b505050565b6000600980549050905090565b610d626128f3565b73ffffffffffffffffffffffffffffffffffffffff16610d80611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd906148b2565b60405180910390fd5b601160029054906101000a900460ff1615601160026101000a81548160ff021916908315150217905550565b60125481565b610e19610e136128f3565b826129b4565b610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90614952565b60405180910390fd5b610e63838383612a92565b505050565b60105481565b601160019054906101000a900460ff1681565b6000610e8c83611656565b8210610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490614612565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f2e6128f3565b73ffffffffffffffffffffffffffffffffffffffff16610f4c611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f99906148b2565b60405180910390fd5b6001600c84604051610fb4919061446a565b908152602001604051809103902060006101000a81548160ff021916908315150217905550604051806060016040528084815260200183815260200182815250601584604051611004919061446a565b9081526020016040518091039020600082015181600001908051906020019061102e9291906138a7565b506020820151816001015560408201518160020155905050505050565b6110536128f3565b73ffffffffffffffffffffffffffffffffffffffff16611071611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be906148b2565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611112573d6000803e3d6000fd5b5050565b600c82604051611126919061446a565b908152602001604051809103902060009054906101000a900460ff16611181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611178906145d2565b60405180910390fd5b60001515601160029054906101000a900460ff161515146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90614992565b60405180910390fd5b6000811161121a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611211906145f2565b60405180910390fd5b600e5481111561125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690614872565b60405180910390fd5b6000601583604051611271919061446a565b9081526020016040518091039020905060008160010154116112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614652565b60405180910390fd5b818160010154101561130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690614752565b60405180910390fd5b34611327838360020154612cee90919063ffffffff16565b14611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90614812565b60405180910390fd5b8181600101600082825461137b9190614bdd565b9250508190555060005b828110156113c95761139e33611399612d04565b612d0e565b601360008154809291906113b190614d2a565b919050555080806113c190614d2a565b915050611385565b50505050565b6113ea83838360405180602001604052806000815250612166565b505050565b60006113f9610d4d565b821061143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190614972565b60405180910390fd5b6009828154811061144e5761144d614e60565b5b90600052602060002001549050919050565b6114686128f3565b73ffffffffffffffffffffffffffffffffffffffff16611486611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906148b2565b60405180910390fd5b80600690805190602001906114f29291906138a7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906147f2565b60405180910390fd5b80915050919050565b6115b06128f3565b73ffffffffffffffffffffffffffffffffffffffff166115ce611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b906148b2565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906147d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6006805461171b90614cc7565b80601f016020809104026020016040519081016040528092919081815260200182805461174790614cc7565b80156117945780601f1061176957610100808354040283529160200191611794565b820191906000526020600020905b81548152906001019060200180831161177757829003601f168201915b505050505081565b60001515601160019054906101000a900460ff161515146117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990614992565b60405180910390fd5b60008111611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90614772565b60405180910390fd5b80601054101561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614752565b60405180910390fd5b3461189082600f54612cee90919063ffffffff16565b146118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c790614812565b60405180910390fd5b60011515601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906146b2565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600101548211156119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614792565b60405180910390fd5b81601060008282546119ff9190614bdd565b9250508190555081816001016000828254611a1a9190614bdd565b9250508190555060005b82811015611a6857611a3d33611a38612d2c565b612d0e565b60146000815480929190611a5090614d2a565b91905055508080611a6090614d2a565b915050611a24565b505050565b60606000611a7a83611656565b905060008167ffffffffffffffff811115611a9857611a97614e8f565b5b604051908082528060200260200182016040528015611ac65781602001602082028036833780820191505090505b50905060005b82811015611b1057611ade8582610e81565b828281518110611af157611af0614e60565b5b6020026020010181815250508080611b0890614d2a565b915050611acc565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601581805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054611b7e90614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054611baa90614cc7565b8015611bf75780601f10611bcc57610100808354040283529160200191611bf7565b820191906000526020600020905b815481529060010190602001808311611bda57829003601f168201915b5050505050908060010154908060020154905083565b611c156128f3565b73ffffffffffffffffffffffffffffffffffffffff16611c33611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906148b2565b60405180910390fd5b80600f8190555050565b606060018054611ca290614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614cc7565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b5050505050905090565b611d2d6128f3565b73ffffffffffffffffffffffffffffffffffffffff16611d4b611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d98906148b2565b60405180910390fd5b80600d8190555050565b600f5481565b610258611dbc610d4d565b10611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614852565b60405180910390fd5b60001515601160009054906101000a900460ff16151514611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990614992565b60405180910390fd5b61025881611e5e610d4d565b611e689190614afc565b1115611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906148d2565b60405180910390fd5b60008111611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906145f2565b60405180910390fd5b600d54811115611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890614872565b60405180910390fd5b34611f4782600f54612cee90919063ffffffff16565b14611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90614812565b60405180910390fd5b60005b81811015611fce57611fa333611f9e612d2c565b612d0e565b60146000815480929190611fb690614d2a565b91905055508080611fc690614d2a565b915050611f8a565b5050565b611fda6128f3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90614712565b60405180910390fd5b80600560006120556128f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121026128f3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121479190614557565b60405180910390a35050565b601160009054906101000a900460ff1681565b6121776121716128f3565b836129b4565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614952565b60405180910390fd5b6121c284848484612d36565b50505050565b60176020528060005260406000206000915054906101000a900460ff1681565b60606121f382612887565b612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222990614912565b60405180910390fd5b600061223c612d92565b9050600081511161225c5760405180602001604052806000815250612287565b8061226684612e24565b604051602001612277929190614481565b6040516020818303038152906040525b915050919050565b601160029054906101000a900460ff1681565b61025881565b600d5481565b6000600f54826122be9190614b83565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123616128f3565b73ffffffffffffffffffffffffffffffffffffffff1661237f611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc906148b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243c90614672565b60405180910390fd5b61244e81612f85565b50565b6124596128f3565b73ffffffffffffffffffffffffffffffffffffffff16612477611b1b565b73ffffffffffffffffffffffffffffffffffffffff16146124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c4906148b2565b60405180910390fd5b60005b81518110156126f957601760008383815181106124f0576124ef614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612577906146d2565b60405180910390fd5b604051806040016040528083838151811061259e5761259d614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001601254815250601660008484815181106125de576125dd614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015590505060016017600084848151811061268d5761268c614e60565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806126f190614d2a565b9150506124d0565b5050565b6127056128f3565b73ffffffffffffffffffffffffffffffffffffffff16612723611b1b565b73ffffffffffffffffffffffffffffffffffffffff1614612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906148b2565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061287057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612880575061287f8261304b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661296e836114f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129bf82612887565b6129fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f590614732565b60405180910390fd5b6000612a09836114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a7857508373ffffffffffffffffffffffffffffffffffffffff16612a6084610bb0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a895750612a8881856122c5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ab2826114f6565b73ffffffffffffffffffffffffffffffffffffffff1614612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff906148f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f906146f2565b60405180910390fd5b612b838383836130b5565b612b8e6000826128fb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bde9190614bdd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c359190614afc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612cfc9190614b83565b905092915050565b6000601354905090565b612d288282604051806020016040528060008152506131c9565b5050565b6000601454905090565b612d41848484612a92565b612d4d84848484613224565b612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8390614632565b60405180910390fd5b50505050565b606060068054612da190614cc7565b80601f0160208091040260200160405190810160405280929190818152602001828054612dcd90614cc7565b8015612e1a5780601f10612def57610100808354040283529160200191612e1a565b820191906000526020600020905b815481529060010190602001808311612dfd57829003601f168201915b5050505050905090565b60606000821415612e6c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f80565b600082905060005b60008214612e9e578080612e8790614d2a565b915050600a82612e979190614b52565b9150612e74565b60008167ffffffffffffffff811115612eba57612eb9614e8f565b5b6040519080825280601f01601f191660200182016040528015612eec5781602001600182028036833780820191505090505b5090505b60008514612f7957600182612f059190614bdd565b9150600a85612f149190614d73565b6030612f209190614afc565b60f81b818381518110612f3657612f35614e60565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f729190614b52565b9450612ef0565b8093505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6130c08383836133bb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613103576130fe816133c0565b613142565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613141576131408382613409565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131855761318081613576565b6131c4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146131c3576131c28282613647565b5b5b505050565b6131d383836136c6565b6131e06000848484613224565b61321f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321690614632565b60405180910390fd5b505050565b60006132458473ffffffffffffffffffffffffffffffffffffffff16613894565b156133ae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261326e6128f3565b8786866040518563ffffffff1660e01b815260040161329094939291906144c0565b602060405180830381600087803b1580156132aa57600080fd5b505af19250505080156132db57506040513d601f19601f820116820180604052508101906132d89190613d6a565b60015b61335e573d806000811461330b576040519150601f19603f3d011682016040523d82523d6000602084013e613310565b606091505b50600081511415613356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334d90614632565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133b3565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161341684611656565b6134209190614bdd565b9050600060086000848152602001908152602001600020549050818114613505576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061358a9190614bdd565b90506000600a60008481526020019081526020016000205490506000600983815481106135ba576135b9614e60565b5b9060005260206000200154905080600983815481106135dc576135db614e60565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548061362b5761362a614e31565b5b6001900381819060005260206000200160009055905550505050565b600061365283611656565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372d90614832565b60405180910390fd5b61373f81612887565b1561377f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377690614692565b60405180910390fd5b61378b600083836130b5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137db9190614afc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546138b390614cc7565b90600052602060002090601f0160209004810192826138d5576000855561391c565b82601f106138ee57805160ff191683800117855561391c565b8280016001018555821561391c579182015b8281111561391b578251825591602001919060010190613900565b5b509050613929919061392d565b5090565b5b8082111561394657600081600090555060010161392e565b5090565b600061395d613958846149f2565b6149cd565b905080838252602082019050828560208602820111156139805761397f614ec3565b5b60005b858110156139b057816139968882613a3e565b845260208401935060208301925050600181019050613983565b5050509392505050565b60006139cd6139c884614a1e565b6149cd565b9050828152602081018484840111156139e9576139e8614ec8565b5b6139f4848285614c85565b509392505050565b6000613a0f613a0a84614a4f565b6149cd565b905082815260208101848484011115613a2b57613a2a614ec8565b5b613a36848285614c85565b509392505050565b600081359050613a4d816156d7565b92915050565b600082601f830112613a6857613a67614ebe565b5b8135613a7884826020860161394a565b91505092915050565b600081359050613a90816156ee565b92915050565b600081359050613aa581615705565b92915050565b600081519050613aba81615705565b92915050565b600082601f830112613ad557613ad4614ebe565b5b8135613ae58482602086016139ba565b91505092915050565b600082601f830112613b0357613b02614ebe565b5b8135613b138482602086016139fc565b91505092915050565b600081359050613b2b8161571c565b92915050565b600060208284031215613b4757613b46614ed2565b5b6000613b5584828501613a3e565b91505092915050565b60008060408385031215613b7557613b74614ed2565b5b6000613b8385828601613a3e565b9250506020613b9485828601613a3e565b9150509250929050565b600080600060608486031215613bb757613bb6614ed2565b5b6000613bc586828701613a3e565b9350506020613bd686828701613a3e565b9250506040613be786828701613b1c565b9150509250925092565b60008060008060808587031215613c0b57613c0a614ed2565b5b6000613c1987828801613a3e565b9450506020613c2a87828801613a3e565b9350506040613c3b87828801613b1c565b925050606085013567ffffffffffffffff811115613c5c57613c5b614ecd565b5b613c6887828801613ac0565b91505092959194509250565b60008060408385031215613c8b57613c8a614ed2565b5b6000613c9985828601613a3e565b9250506020613caa85828601613a81565b9150509250929050565b60008060408385031215613ccb57613cca614ed2565b5b6000613cd985828601613a3e565b9250506020613cea85828601613b1c565b9150509250929050565b600060208284031215613d0a57613d09614ed2565b5b600082013567ffffffffffffffff811115613d2857613d27614ecd565b5b613d3484828501613a53565b91505092915050565b600060208284031215613d5357613d52614ed2565b5b6000613d6184828501613a96565b91505092915050565b600060208284031215613d8057613d7f614ed2565b5b6000613d8e84828501613aab565b91505092915050565b600060208284031215613dad57613dac614ed2565b5b600082013567ffffffffffffffff811115613dcb57613dca614ecd565b5b613dd784828501613aee565b91505092915050565b60008060408385031215613df757613df6614ed2565b5b600083013567ffffffffffffffff811115613e1557613e14614ecd565b5b613e2185828601613aee565b9250506020613e3285828601613b1c565b9150509250929050565b600080600060608486031215613e5557613e54614ed2565b5b600084013567ffffffffffffffff811115613e7357613e72614ecd565b5b613e7f86828701613aee565b9350506020613e9086828701613b1c565b9250506040613ea186828701613b1c565b9150509250925092565b600060208284031215613ec157613ec0614ed2565b5b6000613ecf84828501613b1c565b91505092915050565b6000613ee4838361444c565b60208301905092915050565b613ef981614c11565b82525050565b6000613f0a82614a90565b613f148185614abe565b9350613f1f83614a80565b8060005b83811015613f50578151613f378882613ed8565b9750613f4283614ab1565b925050600181019050613f23565b5085935050505092915050565b613f6681614c23565b82525050565b6000613f7782614a9b565b613f818185614acf565b9350613f91818560208601614c94565b613f9a81614ed7565b840191505092915050565b6000613fb082614aa6565b613fba8185614ae0565b9350613fca818560208601614c94565b613fd381614ed7565b840191505092915050565b6000613fe982614aa6565b613ff38185614af1565b9350614003818560208601614c94565b80840191505092915050565b600061401c601183614ae0565b915061402782614ee8565b602082019050919050565b600061403f603383614ae0565b915061404a82614f11565b604082019050919050565b6000614062602b83614ae0565b915061406d82614f60565b604082019050919050565b6000614085603283614ae0565b915061409082614faf565b604082019050919050565b60006140a8600883614ae0565b91506140b382614ffe565b602082019050919050565b60006140cb602683614ae0565b91506140d682615027565b604082019050919050565b60006140ee601c83614ae0565b91506140f982615076565b602082019050919050565b6000614111601e83614ae0565b915061411c8261509f565b602082019050919050565b6000614134601583614ae0565b915061413f826150c8565b602082019050919050565b6000614157602483614ae0565b9150614162826150f1565b604082019050919050565b600061417a601983614ae0565b915061418582615140565b602082019050919050565b600061419d602c83614ae0565b91506141a882615169565b604082019050919050565b60006141c0602983614ae0565b91506141cb826151b8565b604082019050919050565b60006141e3601683614ae0565b91506141ee82615207565b602082019050919050565b6000614206605583614ae0565b915061421182615230565b606082019050919050565b6000614229603883614ae0565b9150614234826152a5565b604082019050919050565b600061424c602a83614ae0565b9150614257826152f4565b604082019050919050565b600061426f602983614ae0565b915061427a82615343565b604082019050919050565b6000614292601d83614ae0565b915061429d82615392565b602082019050919050565b60006142b5602083614ae0565b91506142c0826153bb565b602082019050919050565b60006142d8600883614ae0565b91506142e3826153e4565b602082019050919050565b60006142fb602183614ae0565b91506143068261540d565b604082019050919050565b600061431e602c83614ae0565b91506143298261545c565b604082019050919050565b6000614341602083614ae0565b915061434c826154ab565b602082019050919050565b6000614364602683614ae0565b915061436f826154d4565b604082019050919050565b6000614387602983614ae0565b915061439282615523565b604082019050919050565b60006143aa602f83614ae0565b91506143b582615572565b604082019050919050565b60006143cd602183614ae0565b91506143d8826155c1565b604082019050919050565b60006143f0603183614ae0565b91506143fb82615610565b604082019050919050565b6000614413602c83614ae0565b915061441e8261565f565b604082019050919050565b6000614436602083614ae0565b9150614441826156ae565b602082019050919050565b61445581614c7b565b82525050565b61446481614c7b565b82525050565b60006144768284613fde565b915081905092915050565b600061448d8285613fde565b91506144998284613fde565b91508190509392505050565b60006020820190506144ba6000830184613ef0565b92915050565b60006080820190506144d56000830187613ef0565b6144e26020830186613ef0565b6144ef604083018561445b565b81810360608301526145018184613f6c565b905095945050505050565b60006040820190506145216000830185613ef0565b61452e602083018461445b565b9392505050565b6000602082019050818103600083015261454f8184613eff565b905092915050565b600060208201905061456c6000830184613f5d565b92915050565b6000602082019050818103600083015261458c8184613fa5565b905092915050565b600060608201905081810360008301526145ae8186613fa5565b90506145bd602083018561445b565b6145ca604083018461445b565b949350505050565b600060208201905081810360008301526145eb8161400f565b9050919050565b6000602082019050818103600083015261460b81614032565b9050919050565b6000602082019050818103600083015261462b81614055565b9050919050565b6000602082019050818103600083015261464b81614078565b9050919050565b6000602082019050818103600083015261466b8161409b565b9050919050565b6000602082019050818103600083015261468b816140be565b9050919050565b600060208201905081810360008301526146ab816140e1565b9050919050565b600060208201905081810360008301526146cb81614104565b9050919050565b600060208201905081810360008301526146eb81614127565b9050919050565b6000602082019050818103600083015261470b8161414a565b9050919050565b6000602082019050818103600083015261472b8161416d565b9050919050565b6000602082019050818103600083015261474b81614190565b9050919050565b6000602082019050818103600083015261476b816141b3565b9050919050565b6000602082019050818103600083015261478b816141d6565b9050919050565b600060208201905081810360008301526147ab816141f9565b9050919050565b600060208201905081810360008301526147cb8161421c565b9050919050565b600060208201905081810360008301526147eb8161423f565b9050919050565b6000602082019050818103600083015261480b81614262565b9050919050565b6000602082019050818103600083015261482b81614285565b9050919050565b6000602082019050818103600083015261484b816142a8565b9050919050565b6000602082019050818103600083015261486b816142cb565b9050919050565b6000602082019050818103600083015261488b816142ee565b9050919050565b600060208201905081810360008301526148ab81614311565b9050919050565b600060208201905081810360008301526148cb81614334565b9050919050565b600060208201905081810360008301526148eb81614357565b9050919050565b6000602082019050818103600083015261490b8161437a565b9050919050565b6000602082019050818103600083015261492b8161439d565b9050919050565b6000602082019050818103600083015261494b816143c0565b9050919050565b6000602082019050818103600083015261496b816143e3565b9050919050565b6000602082019050818103600083015261498b81614406565b9050919050565b600060208201905081810360008301526149ab81614429565b9050919050565b60006020820190506149c7600083018461445b565b92915050565b60006149d76149e8565b90506149e38282614cf9565b919050565b6000604051905090565b600067ffffffffffffffff821115614a0d57614a0c614e8f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a3957614a38614e8f565b5b614a4282614ed7565b9050602081019050919050565b600067ffffffffffffffff821115614a6a57614a69614e8f565b5b614a7382614ed7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b0782614c7b565b9150614b1283614c7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b4757614b46614da4565b5b828201905092915050565b6000614b5d82614c7b565b9150614b6883614c7b565b925082614b7857614b77614dd3565b5b828204905092915050565b6000614b8e82614c7b565b9150614b9983614c7b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bd257614bd1614da4565b5b828202905092915050565b6000614be882614c7b565b9150614bf383614c7b565b925082821015614c0657614c05614da4565b5b828203905092915050565b6000614c1c82614c5b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cb2578082015181840152602081019050614c97565b83811115614cc1576000848401525b50505050565b60006002820490506001821680614cdf57607f821691505b60208210811415614cf357614cf2614e02565b5b50919050565b614d0282614ed7565b810181811067ffffffffffffffff82111715614d2157614d20614e8f565b5b80604052505050565b6000614d3582614c7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d6857614d67614da4565b5b600182019050919050565b6000614d7e82614c7b565b9150614d8983614c7b565b925082614d9957614d98614dd3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f6e206578697374206172744e616d65000000000000000000000000000000600082015250565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f41646472657373206e6f7420466f756e6420696e2077686974656c6973740000600082015250565b7f4164647265737320616c72656164792045786973740000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5175616e746974792069732067726561746572207468616e2072656d61696e6960008201527f6e6720537570706c790000000000000000000000000000000000000000000000602082015250565b7f7175616e74697479206c657373207468616e206f6e6500000000000000000000600082015250565b7f54686520416d6f756e742053656c65637465642069732047726561746572207460008201527f68616e207468652052656d61696e696e6720416d6f756e74206f66207468652060208201527f546f6b656e206174207468697320416464726573730000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6156e081614c11565b81146156eb57600080fd5b50565b6156f781614c23565b811461570257600080fd5b50565b61570e81614c2f565b811461571957600080fd5b50565b61572581614c7b565b811461573057600080fd5b5056fea26469706673582212208e71c9dc2a191d0c35d2567e9b95935d6a6f0e0263a8bfb0727d6dad07c7478c64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6170692e63726561746976656172742e71756573742f6170692f6d657461646174612f000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://api.creativeart.quest/api/metadata/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [2] : 68747470733a2f2f6170692e63726561746976656172742e71756573742f6170
Arg [3] : 692f6d657461646174612f000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49090:6023:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42915:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49998:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30897:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32451:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31974:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43555:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50874:101;;;;;;;;;;;;;:::i;:::-;;49617:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33341:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49470:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49540:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43223:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51579:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54970:140;;;;;;;;;;;;;:::i;:::-;;53438:955;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33751:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43745:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50253:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30591:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50764:104;;;;;;;;;;;;;:::i;:::-;;49391:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30321:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29619:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51888:892;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54611:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27487:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49937:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;50358:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31066:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50456:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49430:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52788:644;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32744:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49506:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34007:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50060:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31241:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49579:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49312:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49357:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50981:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33110:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28287:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51115:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50675:83;;;;;;;;;;;;;:::i;:::-;;42915:224;43017:4;43056:35;43041:50;;;:11;:50;;;;:90;;;;43095:36;43119:11;43095:23;:36::i;:::-;43041:90;43034:97;;42915:224;;;:::o;49998:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30897:100::-;30951:13;30984:5;30977:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30897:100;:::o;32451:221::-;32527:7;32555:16;32563:7;32555;:16::i;:::-;32547:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32640:15;:24;32656:7;32640:24;;;;;;;;;;;;;;;;;;;;;32633:31;;32451:221;;;:::o;31974:411::-;32055:13;32071:23;32086:7;32071:14;:23::i;:::-;32055:39;;32119:5;32113:11;;:2;:11;;;;32105:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32213:5;32197:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32222:37;32239:5;32246:12;:10;:12::i;:::-;32222:16;:37::i;:::-;32197:62;32175:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32356:21;32365:2;32369:7;32356:8;:21::i;:::-;32044:341;31974:411;;:::o;43555:113::-;43616:7;43643:10;:17;;;;43636:24;;43555:113;:::o;50874:101::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50953:14:::1;;;;;;;;;;;50952:15;50935:14;;:32;;;;;;;;;;;;;;;;;;50874:101::o:0;49617:30::-;;;;:::o;33341:339::-;33536:41;33555:12;:10;:12::i;:::-;33569:7;33536:18;:41::i;:::-;33528:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33644:28;33654:4;33660:2;33664:7;33644:9;:28::i;:::-;33341:339;;;:::o;49470:29::-;;;;:::o;49540:32::-;;;;;;;;;;;;;:::o;43223:256::-;43320:7;43356:23;43373:5;43356:16;:23::i;:::-;43348:5;:31;43340:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43445:12;:19;43458:5;43445:19;;;;;;;;;;;;;;;:26;43465:5;43445:26;;;;;;;;;;;;43438:33;;43223:256;;;;:::o;51579:298::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51709:4:::1;51688:8;51697;51688:18;;;;;;:::i;:::-;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;51751:118;;;;;;;;51786:8;51751:118;;;;51818:9;51751:118;;;;51848:6;51751:118;;::::0;51726:14:::1;51741:8;51726:24;;;;;;:::i;:::-;;;;;;;;;;;;;:143;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;51579:298:::0;;;:::o;54970:140::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55018:12:::1;55033:21;55018:36;;55073:10;55065:28;;:37;55094:7;55065:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55007:103;54970:140::o:0;53438:955::-;53543:8;53552;53543:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;53535:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53626:5;53608:23;;:14;;;;;;;;;;;:23;;;53600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53703:1;53687:13;:17;53679:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;53796:17;;53779:13;:34;;53771:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;53861:28;53892:14;53907:8;53892:24;;;;;;:::i;:::-;;;;;;;;;;;;;53861:55;;53951:1;53935:6;:15;;;:17;53927:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;54000:13;53983:6;:15;;;:30;;53975:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;54112:9;54077:31;54094:13;54077:6;:12;;;:16;;:31;;;;:::i;:::-;:44;54069:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;54183:13;54166:6;:15;;;:30;;;;;;;:::i;:::-;;;;;;;;54214:6;54209:157;54230:13;54226:1;:17;54209:157;;;54265:42;54275:10;54287:19;:17;:19::i;:::-;54265:9;:42::i;:::-;54322:12;;:14;;;;;;;;;:::i;:::-;;;;;;54245:3;;;;;:::i;:::-;;;;54209:157;;;;53524:869;53438:955;;:::o;33751:185::-;33889:39;33906:4;33912:2;33916:7;33889:39;;;;;;;;;;;;:16;:39::i;:::-;33751:185;;;:::o;43745:233::-;43820:7;43856:30;:28;:30::i;:::-;43848:5;:38;43840:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43953:10;43964:5;43953:17;;;;;;;;:::i;:::-;;;;;;;;;;43946:24;;43745:233;;;:::o;50253:97::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50335:7:::1;50324:8;:18;;;;;;;;;;;;:::i;:::-;;50253:97:::0;:::o;30591:239::-;30663:7;30683:13;30699:7;:16;30707:7;30699:16;;;;;;;;;;;;;;;;;;;;;30683:32;;30751:1;30734:19;;:5;:19;;;;30726:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30817:5;30810:12;;;30591:239;;;:::o;50764:104::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50845:15:::1;;;;;;;;;;;50844:16;50826:15;;:34;;;;;;;;;;;;;;;;;;50764:104::o:0;49391:32::-;;;;:::o;30321:208::-;30393:7;30438:1;30421:19;;:5;:19;;;;30413:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30505:9;:16;30515:5;30505:16;;;;;;;;;;;;;;;;30498:23;;30321:208;;;:::o;29619:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51888:892::-;51986:5;51967:24;;:15;;;;;;;;;;;:24;;;51959:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52056:1;52047:8;:10;52039:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;52117:8;52102:13;;:23;;52094:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;52212:9;52189:19;52199:8;52189:5;;:9;;:19;;;;:::i;:::-;:32;52181:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;52301:4;52274:31;;:13;:25;52288:10;52274:25;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;52266:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52350:35;52388:10;:22;52399:10;52388:22;;;;;;;;;;;;;;;52350:60;;52439:9;:17;;;52429:8;:27;;52421:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;52571:8;52556:13;;:23;;;;;;;:::i;:::-;;;;;;;;52609:8;52590:9;:17;;;:27;;;;;;;:::i;:::-;;;;;;;;52644:9;52639:122;52659:8;52655:1;:12;52639:122;;;52689:36;52699:10;52711:13;:11;:13::i;:::-;52689:9;:36::i;:::-;52740:7;;:9;;;;;;;;;:::i;:::-;;;;;;52669:3;;;;;:::i;:::-;;;;52639:122;;;;51938:842;51888:892;:::o;54611:351::-;54671:16;54705:13;54721:17;54731:6;54721:9;:17::i;:::-;54705:33;;54749:23;54789:5;54775:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54749:46;;54811:13;54806:125;54838:5;54830;:13;54806:125;;;54885:34;54905:6;54913:5;54885:19;:34::i;:::-;54869:6;54876:5;54869:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;54845:7;;;;;:::i;:::-;;;;54806:125;;;;54948:6;54941:13;;;;54611:351;;;:::o;27487:87::-;27533:7;27560:6;;;;;;;;;;;27553:13;;27487:87;:::o;49937:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50358:92::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50433:9:::1;50425:5;:17;;;;50358:92:::0;:::o;31066:104::-;31122:13;31155:7;31148:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31066:104;:::o;50456:100::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50539:9:::1;50527:11;:21;;;;50456:100:::0;:::o;49430:33::-;;;;:::o;52788:644::-;49347:3;50608:13;:11;:13::i;:::-;:28;50600:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;52877:5:::1;52865:17;;:8;;;;;;;;;;;:17;;;52857:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49347:3;52952:12;52938:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;52930:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;53054:1;53039:12;:16;53031:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;53146:11;;53130:12;:27;;53122:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;53240:9;53213:23;53223:12;53213:5;;:9;;:23;;;;:::i;:::-;:36;53205:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;53299:6;53294:131;53315:12;53311:1;:16;53294:131;;;53349:36;53359:10;53371:13;:11;:13::i;:::-;53349:9;:36::i;:::-;53400:7;;:9;;;;;;;;;:::i;:::-;;;;;;53329:3;;;;;:::i;:::-;;;;53294:131;;;;52788:644:::0;:::o;32744:295::-;32859:12;:10;:12::i;:::-;32847:24;;:8;:24;;;;32839:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32959:8;32914:18;:32;32933:12;:10;:12::i;:::-;32914:32;;;;;;;;;;;;;;;:42;32947:8;32914:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33012:8;32983:48;;32998:12;:10;:12::i;:::-;32983:48;;;33022:8;32983:48;;;;;;:::i;:::-;;;;;;;;32744:295;;:::o;49506:27::-;;;;;;;;;;;;;:::o;34007:328::-;34182:41;34201:12;:10;:12::i;:::-;34215:7;34182:18;:41::i;:::-;34174:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34288:39;34302:4;34308:2;34312:7;34321:5;34288:13;:39::i;:::-;34007:328;;;;:::o;50060:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;31241:324::-;31314:13;31348:16;31356:7;31348;:16::i;:::-;31340:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31429:18;31450:9;:7;:9::i;:::-;31429:30;;31498:1;31483:4;31477:18;:22;:80;;;;;;;;;;;;;;;;;31526:4;31532:18;:7;:16;:18::i;:::-;31509:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31477:80;31470:87;;;31241:324;;;:::o;49579:31::-;;;;;;;;;;;;;:::o;49312:38::-;49347:3;49312:38;:::o;49357:27::-;;;;:::o;50981:122::-;51039:7;51088:5;;51078:9;:15;;;;:::i;:::-;51071:22;;50981:122;;;:::o;33110:164::-;33207:4;33231:18;:25;33250:5;33231:25;;;;;;;;;;;;;;;:35;33257:8;33231:35;;;;;;;;;;;;;;;;;;;;;;;;;33224:42;;33110:164;;;;:::o;28287:192::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28396:1:::1;28376:22;;:8;:22;;;;28368:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28452:19;28462:8;28452:9;:19::i;:::-;28287:192:::0;:::o;51115:458::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51210:6:::1;51205:357;51226:12;:19;51222:1;:23;51205:357;;;51295:13;:30;51309:12;51322:1;51309:15;;;;;;;;:::i;:::-;;;;;;;;51295:30;;;;;;;;;;;;;;;;;;;;;;;;;51294:31;51286:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51389:116;;;;;;;;51436:12;51449:1;51436:15;;;;;;;;:::i;:::-;;;;;;;;51389:116;;;;;;51474:16;;51389:116;;::::0;51361:10:::1;:27;51372:12;51385:1;51372:15;;;;;;;;:::i;:::-;;;;;;;;51361:27;;;;;;;;;;;;;;;:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51550:4;51519:13;:30;51533:12;51546:1;51533:15;;;;;;;;:::i;:::-;;;;;;;;51519:30;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;51247:3;;;;;:::i;:::-;;;;51205:357;;;;51115:458:::0;:::o;50675:83::-;27718:12;:10;:12::i;:::-;27707:23;;:7;:5;:7::i;:::-;:23;;;27699:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50742:8:::1;;;;;;;;;;;50741:9;50730:8;;:20;;;;;;;;;;;;;;;;;;50675:83::o:0;29952:305::-;30054:4;30106:25;30091:40;;;:11;:40;;;;:105;;;;30163:33;30148:48;;;:11;:48;;;;30091:105;:158;;;;30213:36;30237:11;30213:23;:36::i;:::-;30091:158;30071:178;;29952:305;;;:::o;35845:127::-;35910:4;35962:1;35934:30;;:7;:16;35942:7;35934:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35927:37;;35845:127;;;:::o;26238:98::-;26291:7;26318:10;26311:17;;26238:98;:::o;39827:174::-;39929:2;39902:15;:24;39918:7;39902:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39985:7;39981:2;39947:46;;39956:23;39971:7;39956:14;:23::i;:::-;39947:46;;;;;;;;;;;;39827:174;;:::o;36139:348::-;36232:4;36257:16;36265:7;36257;:16::i;:::-;36249:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36333:13;36349:23;36364:7;36349:14;:23::i;:::-;36333:39;;36402:5;36391:16;;:7;:16;;;:51;;;;36435:7;36411:31;;:20;36423:7;36411:11;:20::i;:::-;:31;;;36391:51;:87;;;;36446:32;36463:5;36470:7;36446:16;:32::i;:::-;36391:87;36383:96;;;36139:348;;;;:::o;39131:578::-;39290:4;39263:31;;:23;39278:7;39263:14;:23::i;:::-;:31;;;39255:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39373:1;39359:16;;:2;:16;;;;39351:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39429:39;39450:4;39456:2;39460:7;39429:20;:39::i;:::-;39533:29;39550:1;39554:7;39533:8;:29::i;:::-;39594:1;39575:9;:15;39585:4;39575:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39623:1;39606:9;:13;39616:2;39606:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39654:2;39635:7;:16;39643:7;39635:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39693:7;39689:2;39674:27;;39683:4;39674:27;;;;;;;;;;;;39131:578;;;:::o;3572:98::-;3630:7;3661:1;3657;:5;;;;:::i;:::-;3650:12;;3572:98;;;;:::o;54405:100::-;54456:4;54485:12;;54478:19;;54405:100;:::o;36829:110::-;36905:26;36915:2;36919:7;36905:26;;;;;;;;;;;;:9;:26::i;:::-;36829:110;;:::o;54513:89::-;54558:4;54587:7;;54580:14;;54513:89;:::o;35217:315::-;35374:28;35384:4;35390:2;35394:7;35374:9;:28::i;:::-;35421:48;35444:4;35450:2;35454:7;35463:5;35421:22;:48::i;:::-;35413:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35217:315;;;;:::o;31813:99::-;31863:13;31896:8;31889:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31813:99;:::o;7252:723::-;7308:13;7538:1;7529:5;:10;7525:53;;;7556:10;;;;;;;;;;;;;;;;;;;;;7525:53;7588:12;7603:5;7588:20;;7619:14;7644:78;7659:1;7651:4;:9;7644:78;;7677:8;;;;;:::i;:::-;;;;7708:2;7700:10;;;;;:::i;:::-;;;7644:78;;;7732:19;7764:6;7754:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7732:39;;7782:154;7798:1;7789:5;:10;7782:154;;7826:1;7816:11;;;;;:::i;:::-;;;7893:2;7885:5;:10;;;;:::i;:::-;7872:2;:24;;;;:::i;:::-;7859:39;;7842:6;7849;7842:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7922:2;7913:11;;;;;:::i;:::-;;;7782:154;;;7960:6;7946:21;;;;;7252:723;;;;:::o;28487:173::-;28543:16;28562:6;;;;;;;;;;;28543:25;;28588:8;28579:6;;:17;;;;;;;;;;;;;;;;;;28643:8;28612:40;;28633:8;28612:40;;;;;;;;;;;;28532:128;28487:173;:::o;19224:157::-;19309:4;19348:25;19333:40;;;:11;:40;;;;19326:47;;19224:157;;;:::o;44591:589::-;44735:45;44762:4;44768:2;44772:7;44735:26;:45::i;:::-;44813:1;44797:18;;:4;:18;;;44793:187;;;44832:40;44864:7;44832:31;:40::i;:::-;44793:187;;;44902:2;44894:10;;:4;:10;;;44890:90;;44921:47;44954:4;44960:7;44921:32;:47::i;:::-;44890:90;44793:187;45008:1;44994:16;;:2;:16;;;44990:183;;;45027:45;45064:7;45027:36;:45::i;:::-;44990:183;;;45100:4;45094:10;;:2;:10;;;45090:83;;45121:40;45149:2;45153:7;45121:27;:40::i;:::-;45090:83;44990:183;44591:589;;;:::o;37166:321::-;37296:18;37302:2;37306:7;37296:5;:18::i;:::-;37347:54;37378:1;37382:2;37386:7;37395:5;37347:22;:54::i;:::-;37325:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37166:321;;;:::o;40566:803::-;40721:4;40742:15;:2;:13;;;:15::i;:::-;40738:624;;;40794:2;40778:36;;;40815:12;:10;:12::i;:::-;40829:4;40835:7;40844:5;40778:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40774:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41041:1;41024:6;:13;:18;41020:272;;;41067:60;;;;;;;;;;:::i;:::-;;;;;;;;41020:272;41242:6;41236:13;41227:6;41223:2;41219:15;41212:38;40774:533;40911:45;;;40901:55;;;:6;:55;;;;40894:62;;;;;40738:624;41346:4;41339:11;;40566:803;;;;;;;:::o;41941:126::-;;;;:::o;45903:164::-;46007:10;:17;;;;45980:15;:24;45996:7;45980:24;;;;;;;;;;;:44;;;;46035:10;46051:7;46035:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45903:164;:::o;46694:988::-;46960:22;47010:1;46985:22;47002:4;46985:16;:22::i;:::-;:26;;;;:::i;:::-;46960:51;;47022:18;47043:17;:26;47061:7;47043:26;;;;;;;;;;;;47022:47;;47190:14;47176:10;:28;47172:328;;47221:19;47243:12;:18;47256:4;47243:18;;;;;;;;;;;;;;;:34;47262:14;47243:34;;;;;;;;;;;;47221:56;;47327:11;47294:12;:18;47307:4;47294:18;;;;;;;;;;;;;;;:30;47313:10;47294:30;;;;;;;;;;;:44;;;;47444:10;47411:17;:30;47429:11;47411:30;;;;;;;;;;;:43;;;;47206:294;47172:328;47596:17;:26;47614:7;47596:26;;;;;;;;;;;47589:33;;;47640:12;:18;47653:4;47640:18;;;;;;;;;;;;;;;:34;47659:14;47640:34;;;;;;;;;;;47633:41;;;46775:907;;46694:988;;:::o;47977:1079::-;48230:22;48275:1;48255:10;:17;;;;:21;;;;:::i;:::-;48230:46;;48287:18;48308:15;:24;48324:7;48308:24;;;;;;;;;;;;48287:45;;48659:19;48681:10;48692:14;48681:26;;;;;;;;:::i;:::-;;;;;;;;;;48659:48;;48745:11;48720:10;48731;48720:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48856:10;48825:15;:28;48841:11;48825:28;;;;;;;;;;;:41;;;;48997:15;:24;49013:7;48997:24;;;;;;;;;;;48990:31;;;49032:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48048:1008;;;47977:1079;:::o;45481:221::-;45566:14;45583:20;45600:2;45583:16;:20::i;:::-;45566:37;;45641:7;45614:12;:16;45627:2;45614:16;;;;;;;;;;;;;;;:24;45631:6;45614:24;;;;;;;;;;;:34;;;;45688:6;45659:17;:26;45677:7;45659:26;;;;;;;;;;;:35;;;;45555:147;45481:221;;:::o;37823:382::-;37917:1;37903:16;;:2;:16;;;;37895:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37976:16;37984:7;37976;:16::i;:::-;37975:17;37967:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38038:45;38067:1;38071:2;38075:7;38038:20;:45::i;:::-;38113:1;38096:9;:13;38106:2;38096:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38144:2;38125:7;:16;38133:7;38125:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38189:7;38185:2;38164:33;;38181:1;38164:33;;;;;;;;;;;;37823:382;;:::o;9719:387::-;9779:4;9987:12;10054:7;10042:20;10034:28;;10097:1;10090:4;:8;10083:15;;;9719:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:654::-;8584:6;8592;8641:2;8629:9;8620:7;8616:23;8612:32;8609:119;;;8647:79;;:::i;:::-;8609:119;8795:1;8784:9;8780:17;8767:31;8825:18;8817:6;8814:30;8811:117;;;8847:79;;:::i;:::-;8811:117;8952:63;9007:7;8998:6;8987:9;8983:22;8952:63;:::i;:::-;8942:73;;8738:287;9064:2;9090:53;9135:7;9126:6;9115:9;9111:22;9090:53;:::i;:::-;9080:63;;9035:118;8506:654;;;;;:::o;9166:799::-;9253:6;9261;9269;9318:2;9306:9;9297:7;9293:23;9289:32;9286:119;;;9324:79;;:::i;:::-;9286:119;9472:1;9461:9;9457:17;9444:31;9502:18;9494:6;9491:30;9488:117;;;9524:79;;:::i;:::-;9488:117;9629:63;9684:7;9675:6;9664:9;9660:22;9629:63;:::i;:::-;9619:73;;9415:287;9741:2;9767:53;9812:7;9803:6;9792:9;9788:22;9767:53;:::i;:::-;9757:63;;9712:118;9869:2;9895:53;9940:7;9931:6;9920:9;9916:22;9895:53;:::i;:::-;9885:63;;9840:118;9166:799;;;;;:::o;9971:329::-;10030:6;10079:2;10067:9;10058:7;10054:23;10050:32;10047:119;;;10085:79;;:::i;:::-;10047:119;10205:1;10230:53;10275:7;10266:6;10255:9;10251:22;10230:53;:::i;:::-;10220:63;;10176:117;9971:329;;;;:::o;10306:179::-;10375:10;10396:46;10438:3;10430:6;10396:46;:::i;:::-;10474:4;10469:3;10465:14;10451:28;;10306:179;;;;:::o;10491:118::-;10578:24;10596:5;10578:24;:::i;:::-;10573:3;10566:37;10491:118;;:::o;10645:732::-;10764:3;10793:54;10841:5;10793:54;:::i;:::-;10863:86;10942:6;10937:3;10863:86;:::i;:::-;10856:93;;10973:56;11023:5;10973:56;:::i;:::-;11052:7;11083:1;11068:284;11093:6;11090:1;11087:13;11068:284;;;11169:6;11163:13;11196:63;11255:3;11240:13;11196:63;:::i;:::-;11189:70;;11282:60;11335:6;11282:60;:::i;:::-;11272:70;;11128:224;11115:1;11112;11108:9;11103:14;;11068:284;;;11072:14;11368:3;11361:10;;10769:608;;;10645:732;;;;:::o;11383:109::-;11464:21;11479:5;11464:21;:::i;:::-;11459:3;11452:34;11383:109;;:::o;11498:360::-;11584:3;11612:38;11644:5;11612:38;:::i;:::-;11666:70;11729:6;11724:3;11666:70;:::i;:::-;11659:77;;11745:52;11790:6;11785:3;11778:4;11771:5;11767:16;11745:52;:::i;:::-;11822:29;11844:6;11822:29;:::i;:::-;11817:3;11813:39;11806:46;;11588:270;11498:360;;;;:::o;11864:364::-;11952:3;11980:39;12013:5;11980:39;:::i;:::-;12035:71;12099:6;12094:3;12035:71;:::i;:::-;12028:78;;12115:52;12160:6;12155:3;12148:4;12141:5;12137:16;12115:52;:::i;:::-;12192:29;12214:6;12192:29;:::i;:::-;12187:3;12183:39;12176:46;;11956:272;11864:364;;;;:::o;12234:377::-;12340:3;12368:39;12401:5;12368:39;:::i;:::-;12423:89;12505:6;12500:3;12423:89;:::i;:::-;12416:96;;12521:52;12566:6;12561:3;12554:4;12547:5;12543:16;12521:52;:::i;:::-;12598:6;12593:3;12589:16;12582:23;;12344:267;12234:377;;;;:::o;12617:366::-;12759:3;12780:67;12844:2;12839:3;12780:67;:::i;:::-;12773:74;;12856:93;12945:3;12856:93;:::i;:::-;12974:2;12969:3;12965:12;12958:19;;12617:366;;;:::o;12989:::-;13131:3;13152:67;13216:2;13211:3;13152:67;:::i;:::-;13145:74;;13228:93;13317:3;13228:93;:::i;:::-;13346:2;13341:3;13337:12;13330:19;;12989:366;;;:::o;13361:::-;13503:3;13524:67;13588:2;13583:3;13524:67;:::i;:::-;13517:74;;13600:93;13689:3;13600:93;:::i;:::-;13718:2;13713:3;13709:12;13702:19;;13361:366;;;:::o;13733:::-;13875:3;13896:67;13960:2;13955:3;13896:67;:::i;:::-;13889:74;;13972:93;14061:3;13972:93;:::i;:::-;14090:2;14085:3;14081:12;14074:19;;13733:366;;;:::o;14105:365::-;14247:3;14268:66;14332:1;14327:3;14268:66;:::i;:::-;14261:73;;14343:93;14432:3;14343:93;:::i;:::-;14461:2;14456:3;14452:12;14445:19;;14105:365;;;:::o;14476:366::-;14618:3;14639:67;14703:2;14698:3;14639:67;:::i;:::-;14632:74;;14715:93;14804:3;14715:93;:::i;:::-;14833:2;14828:3;14824:12;14817:19;;14476:366;;;:::o;14848:::-;14990:3;15011:67;15075:2;15070:3;15011:67;:::i;:::-;15004:74;;15087:93;15176:3;15087:93;:::i;:::-;15205:2;15200:3;15196:12;15189:19;;14848:366;;;:::o;15220:::-;15362:3;15383:67;15447:2;15442:3;15383:67;:::i;:::-;15376:74;;15459:93;15548:3;15459:93;:::i;:::-;15577:2;15572:3;15568:12;15561:19;;15220:366;;;:::o;15592:::-;15734:3;15755:67;15819:2;15814:3;15755:67;:::i;:::-;15748:74;;15831:93;15920:3;15831:93;:::i;:::-;15949:2;15944:3;15940:12;15933:19;;15592:366;;;:::o;15964:::-;16106:3;16127:67;16191:2;16186:3;16127:67;:::i;:::-;16120:74;;16203:93;16292:3;16203:93;:::i;:::-;16321:2;16316:3;16312:12;16305:19;;15964:366;;;:::o;16336:::-;16478:3;16499:67;16563:2;16558:3;16499:67;:::i;:::-;16492:74;;16575:93;16664:3;16575:93;:::i;:::-;16693:2;16688:3;16684:12;16677:19;;16336:366;;;:::o;16708:::-;16850:3;16871:67;16935:2;16930:3;16871:67;:::i;:::-;16864:74;;16947:93;17036:3;16947:93;:::i;:::-;17065:2;17060:3;17056:12;17049:19;;16708:366;;;:::o;17080:::-;17222:3;17243:67;17307:2;17302:3;17243:67;:::i;:::-;17236:74;;17319:93;17408:3;17319:93;:::i;:::-;17437:2;17432:3;17428:12;17421:19;;17080:366;;;:::o;17452:::-;17594:3;17615:67;17679:2;17674:3;17615:67;:::i;:::-;17608:74;;17691:93;17780:3;17691:93;:::i;:::-;17809:2;17804:3;17800:12;17793:19;;17452:366;;;:::o;17824:::-;17966:3;17987:67;18051:2;18046:3;17987:67;:::i;:::-;17980:74;;18063:93;18152:3;18063:93;:::i;:::-;18181:2;18176:3;18172:12;18165:19;;17824:366;;;:::o;18196:::-;18338:3;18359:67;18423:2;18418:3;18359:67;:::i;:::-;18352:74;;18435:93;18524:3;18435:93;:::i;:::-;18553:2;18548:3;18544:12;18537:19;;18196:366;;;:::o;18568:::-;18710:3;18731:67;18795:2;18790:3;18731:67;:::i;:::-;18724:74;;18807:93;18896:3;18807:93;:::i;:::-;18925:2;18920:3;18916:12;18909:19;;18568:366;;;:::o;18940:::-;19082:3;19103:67;19167:2;19162:3;19103:67;:::i;:::-;19096:74;;19179:93;19268:3;19179:93;:::i;:::-;19297:2;19292:3;19288:12;19281:19;;18940:366;;;:::o;19312:::-;19454:3;19475:67;19539:2;19534:3;19475:67;:::i;:::-;19468:74;;19551:93;19640:3;19551:93;:::i;:::-;19669:2;19664:3;19660:12;19653:19;;19312:366;;;:::o;19684:::-;19826:3;19847:67;19911:2;19906:3;19847:67;:::i;:::-;19840:74;;19923:93;20012:3;19923:93;:::i;:::-;20041:2;20036:3;20032:12;20025:19;;19684:366;;;:::o;20056:365::-;20198:3;20219:66;20283:1;20278:3;20219:66;:::i;:::-;20212:73;;20294:93;20383:3;20294:93;:::i;:::-;20412:2;20407:3;20403:12;20396:19;;20056:365;;;:::o;20427:366::-;20569:3;20590:67;20654:2;20649:3;20590:67;:::i;:::-;20583:74;;20666:93;20755:3;20666:93;:::i;:::-;20784:2;20779:3;20775:12;20768:19;;20427:366;;;:::o;20799:::-;20941:3;20962:67;21026:2;21021:3;20962:67;:::i;:::-;20955:74;;21038:93;21127:3;21038:93;:::i;:::-;21156:2;21151:3;21147:12;21140:19;;20799:366;;;:::o;21171:::-;21313:3;21334:67;21398:2;21393:3;21334:67;:::i;:::-;21327:74;;21410:93;21499:3;21410:93;:::i;:::-;21528:2;21523:3;21519:12;21512:19;;21171:366;;;:::o;21543:::-;21685:3;21706:67;21770:2;21765:3;21706:67;:::i;:::-;21699:74;;21782:93;21871:3;21782:93;:::i;:::-;21900:2;21895:3;21891:12;21884:19;;21543:366;;;:::o;21915:::-;22057:3;22078:67;22142:2;22137:3;22078:67;:::i;:::-;22071:74;;22154:93;22243:3;22154:93;:::i;:::-;22272:2;22267:3;22263:12;22256:19;;21915:366;;;:::o;22287:::-;22429:3;22450:67;22514:2;22509:3;22450:67;:::i;:::-;22443:74;;22526:93;22615:3;22526:93;:::i;:::-;22644:2;22639:3;22635:12;22628:19;;22287:366;;;:::o;22659:::-;22801:3;22822:67;22886:2;22881:3;22822:67;:::i;:::-;22815:74;;22898:93;22987:3;22898:93;:::i;:::-;23016:2;23011:3;23007:12;23000:19;;22659:366;;;:::o;23031:::-;23173:3;23194:67;23258:2;23253:3;23194:67;:::i;:::-;23187:74;;23270:93;23359:3;23270:93;:::i;:::-;23388:2;23383:3;23379:12;23372:19;;23031:366;;;:::o;23403:::-;23545:3;23566:67;23630:2;23625:3;23566:67;:::i;:::-;23559:74;;23642:93;23731:3;23642:93;:::i;:::-;23760:2;23755:3;23751:12;23744:19;;23403:366;;;:::o;23775:::-;23917:3;23938:67;24002:2;23997:3;23938:67;:::i;:::-;23931:74;;24014:93;24103:3;24014:93;:::i;:::-;24132:2;24127:3;24123:12;24116:19;;23775:366;;;:::o;24147:108::-;24224:24;24242:5;24224:24;:::i;:::-;24219:3;24212:37;24147:108;;:::o;24261:118::-;24348:24;24366:5;24348:24;:::i;:::-;24343:3;24336:37;24261:118;;:::o;24385:275::-;24517:3;24539:95;24630:3;24621:6;24539:95;:::i;:::-;24532:102;;24651:3;24644:10;;24385:275;;;;:::o;24666:435::-;24846:3;24868:95;24959:3;24950:6;24868:95;:::i;:::-;24861:102;;24980:95;25071:3;25062:6;24980:95;:::i;:::-;24973:102;;25092:3;25085:10;;24666:435;;;;;:::o;25107:222::-;25200:4;25238:2;25227:9;25223:18;25215:26;;25251:71;25319:1;25308:9;25304:17;25295:6;25251:71;:::i;:::-;25107:222;;;;:::o;25335:640::-;25530:4;25568:3;25557:9;25553:19;25545:27;;25582:71;25650:1;25639:9;25635:17;25626:6;25582:71;:::i;:::-;25663:72;25731:2;25720:9;25716:18;25707:6;25663:72;:::i;:::-;25745;25813:2;25802:9;25798:18;25789:6;25745:72;:::i;:::-;25864:9;25858:4;25854:20;25849:2;25838:9;25834:18;25827:48;25892:76;25963:4;25954:6;25892:76;:::i;:::-;25884:84;;25335:640;;;;;;;:::o;25981:332::-;26102:4;26140:2;26129:9;26125:18;26117:26;;26153:71;26221:1;26210:9;26206:17;26197:6;26153:71;:::i;:::-;26234:72;26302:2;26291:9;26287:18;26278:6;26234:72;:::i;:::-;25981:332;;;;;:::o;26319:373::-;26462:4;26500:2;26489:9;26485:18;26477:26;;26549:9;26543:4;26539:20;26535:1;26524:9;26520:17;26513:47;26577:108;26680:4;26671:6;26577:108;:::i;:::-;26569:116;;26319:373;;;;:::o;26698:210::-;26785:4;26823:2;26812:9;26808:18;26800:26;;26836:65;26898:1;26887:9;26883:17;26874:6;26836:65;:::i;:::-;26698:210;;;;:::o;26914:313::-;27027:4;27065:2;27054:9;27050:18;27042:26;;27114:9;27108:4;27104:20;27100:1;27089:9;27085:17;27078:47;27142:78;27215:4;27206:6;27142:78;:::i;:::-;27134:86;;26914:313;;;;:::o;27233:533::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:78;27590:4;27581:6;27517:78;:::i;:::-;27509:86;;27605:72;27673:2;27662:9;27658:18;27649:6;27605:72;:::i;:::-;27687;27755:2;27744:9;27740:18;27731:6;27687:72;:::i;:::-;27233:533;;;;;;:::o;27772:419::-;27938:4;27976:2;27965:9;27961:18;27953:26;;28025:9;28019:4;28015:20;28011:1;28000:9;27996:17;27989:47;28053:131;28179:4;28053:131;:::i;:::-;28045:139;;27772:419;;;:::o;28197:::-;28363:4;28401:2;28390:9;28386:18;28378:26;;28450:9;28444:4;28440:20;28436:1;28425:9;28421:17;28414:47;28478:131;28604:4;28478:131;:::i;:::-;28470:139;;28197:419;;;:::o;28622:::-;28788:4;28826:2;28815:9;28811:18;28803:26;;28875:9;28869:4;28865:20;28861:1;28850:9;28846:17;28839:47;28903:131;29029:4;28903:131;:::i;:::-;28895:139;;28622:419;;;:::o;29047:::-;29213:4;29251:2;29240:9;29236:18;29228:26;;29300:9;29294:4;29290:20;29286:1;29275:9;29271:17;29264:47;29328:131;29454:4;29328:131;:::i;:::-;29320:139;;29047:419;;;:::o;29472:::-;29638:4;29676:2;29665:9;29661:18;29653:26;;29725:9;29719:4;29715:20;29711:1;29700:9;29696:17;29689:47;29753:131;29879:4;29753:131;:::i;:::-;29745:139;;29472:419;;;:::o;29897:::-;30063:4;30101:2;30090:9;30086:18;30078:26;;30150:9;30144:4;30140:20;30136:1;30125:9;30121:17;30114:47;30178:131;30304:4;30178:131;:::i;:::-;30170:139;;29897:419;;;:::o;30322:::-;30488:4;30526:2;30515:9;30511:18;30503:26;;30575:9;30569:4;30565:20;30561:1;30550:9;30546:17;30539:47;30603:131;30729:4;30603:131;:::i;:::-;30595:139;;30322:419;;;:::o;30747:::-;30913:4;30951:2;30940:9;30936:18;30928:26;;31000:9;30994:4;30990:20;30986:1;30975:9;30971:17;30964:47;31028:131;31154:4;31028:131;:::i;:::-;31020:139;;30747:419;;;:::o;31172:::-;31338:4;31376:2;31365:9;31361:18;31353:26;;31425:9;31419:4;31415:20;31411:1;31400:9;31396:17;31389:47;31453:131;31579:4;31453:131;:::i;:::-;31445:139;;31172:419;;;:::o;31597:::-;31763:4;31801:2;31790:9;31786:18;31778:26;;31850:9;31844:4;31840:20;31836:1;31825:9;31821:17;31814:47;31878:131;32004:4;31878:131;:::i;:::-;31870:139;;31597:419;;;:::o;32022:::-;32188:4;32226:2;32215:9;32211:18;32203:26;;32275:9;32269:4;32265:20;32261:1;32250:9;32246:17;32239:47;32303:131;32429:4;32303:131;:::i;:::-;32295:139;;32022:419;;;:::o;32447:::-;32613:4;32651:2;32640:9;32636:18;32628:26;;32700:9;32694:4;32690:20;32686:1;32675:9;32671:17;32664:47;32728:131;32854:4;32728:131;:::i;:::-;32720:139;;32447:419;;;:::o;32872:::-;33038:4;33076:2;33065:9;33061:18;33053:26;;33125:9;33119:4;33115:20;33111:1;33100:9;33096:17;33089:47;33153:131;33279:4;33153:131;:::i;:::-;33145:139;;32872:419;;;:::o;33297:::-;33463:4;33501:2;33490:9;33486:18;33478:26;;33550:9;33544:4;33540:20;33536:1;33525:9;33521:17;33514:47;33578:131;33704:4;33578:131;:::i;:::-;33570:139;;33297:419;;;:::o;33722:::-;33888:4;33926:2;33915:9;33911:18;33903:26;;33975:9;33969:4;33965:20;33961:1;33950:9;33946:17;33939:47;34003:131;34129:4;34003:131;:::i;:::-;33995:139;;33722:419;;;:::o;34147:::-;34313:4;34351:2;34340:9;34336:18;34328:26;;34400:9;34394:4;34390:20;34386:1;34375:9;34371:17;34364:47;34428:131;34554:4;34428:131;:::i;:::-;34420:139;;34147:419;;;:::o;34572:::-;34738:4;34776:2;34765:9;34761:18;34753:26;;34825:9;34819:4;34815:20;34811:1;34800:9;34796:17;34789:47;34853:131;34979:4;34853:131;:::i;:::-;34845:139;;34572:419;;;:::o;34997:::-;35163:4;35201:2;35190:9;35186:18;35178:26;;35250:9;35244:4;35240:20;35236:1;35225:9;35221:17;35214:47;35278:131;35404:4;35278:131;:::i;:::-;35270:139;;34997:419;;;:::o;35422:::-;35588:4;35626:2;35615:9;35611:18;35603:26;;35675:9;35669:4;35665:20;35661:1;35650:9;35646:17;35639:47;35703:131;35829:4;35703:131;:::i;:::-;35695:139;;35422:419;;;:::o;35847:::-;36013:4;36051:2;36040:9;36036:18;36028:26;;36100:9;36094:4;36090:20;36086:1;36075:9;36071:17;36064:47;36128:131;36254:4;36128:131;:::i;:::-;36120:139;;35847:419;;;:::o;36272:::-;36438:4;36476:2;36465:9;36461:18;36453:26;;36525:9;36519:4;36515:20;36511:1;36500:9;36496:17;36489:47;36553:131;36679:4;36553:131;:::i;:::-;36545:139;;36272:419;;;:::o;36697:::-;36863:4;36901:2;36890:9;36886:18;36878:26;;36950:9;36944:4;36940:20;36936:1;36925:9;36921:17;36914:47;36978:131;37104:4;36978:131;:::i;:::-;36970:139;;36697:419;;;:::o;37122:::-;37288:4;37326:2;37315:9;37311:18;37303:26;;37375:9;37369:4;37365:20;37361:1;37350:9;37346:17;37339:47;37403:131;37529:4;37403:131;:::i;:::-;37395:139;;37122:419;;;:::o;37547:::-;37713:4;37751:2;37740:9;37736:18;37728:26;;37800:9;37794:4;37790:20;37786:1;37775:9;37771:17;37764:47;37828:131;37954:4;37828:131;:::i;:::-;37820:139;;37547:419;;;:::o;37972:::-;38138:4;38176:2;38165:9;38161:18;38153:26;;38225:9;38219:4;38215:20;38211:1;38200:9;38196:17;38189:47;38253:131;38379:4;38253:131;:::i;:::-;38245:139;;37972:419;;;:::o;38397:::-;38563:4;38601:2;38590:9;38586:18;38578:26;;38650:9;38644:4;38640:20;38636:1;38625:9;38621:17;38614:47;38678:131;38804:4;38678:131;:::i;:::-;38670:139;;38397:419;;;:::o;38822:::-;38988:4;39026:2;39015:9;39011:18;39003:26;;39075:9;39069:4;39065:20;39061:1;39050:9;39046:17;39039:47;39103:131;39229:4;39103:131;:::i;:::-;39095:139;;38822:419;;;:::o;39247:::-;39413:4;39451:2;39440:9;39436:18;39428:26;;39500:9;39494:4;39490:20;39486:1;39475:9;39471:17;39464:47;39528:131;39654:4;39528:131;:::i;:::-;39520:139;;39247:419;;;:::o;39672:::-;39838:4;39876:2;39865:9;39861:18;39853:26;;39925:9;39919:4;39915:20;39911:1;39900:9;39896:17;39889:47;39953:131;40079:4;39953:131;:::i;:::-;39945:139;;39672:419;;;:::o;40097:::-;40263:4;40301:2;40290:9;40286:18;40278:26;;40350:9;40344:4;40340:20;40336:1;40325:9;40321:17;40314:47;40378:131;40504:4;40378:131;:::i;:::-;40370:139;;40097:419;;;:::o;40522:::-;40688:4;40726:2;40715:9;40711:18;40703:26;;40775:9;40769:4;40765:20;40761:1;40750:9;40746:17;40739:47;40803:131;40929:4;40803:131;:::i;:::-;40795:139;;40522:419;;;:::o;40947:222::-;41040:4;41078:2;41067:9;41063:18;41055:26;;41091:71;41159:1;41148:9;41144:17;41135:6;41091:71;:::i;:::-;40947:222;;;;:::o;41175:129::-;41209:6;41236:20;;:::i;:::-;41226:30;;41265:33;41293:4;41285:6;41265:33;:::i;:::-;41175:129;;;:::o;41310:75::-;41343:6;41376:2;41370:9;41360:19;;41310:75;:::o;41391:311::-;41468:4;41558:18;41550:6;41547:30;41544:56;;;41580:18;;:::i;:::-;41544:56;41630:4;41622:6;41618:17;41610:25;;41690:4;41684;41680:15;41672:23;;41391:311;;;:::o;41708:307::-;41769:4;41859:18;41851:6;41848:30;41845:56;;;41881:18;;:::i;:::-;41845:56;41919:29;41941:6;41919:29;:::i;:::-;41911:37;;42003:4;41997;41993:15;41985:23;;41708:307;;;:::o;42021:308::-;42083:4;42173:18;42165:6;42162:30;42159:56;;;42195:18;;:::i;:::-;42159:56;42233:29;42255:6;42233:29;:::i;:::-;42225:37;;42317:4;42311;42307:15;42299:23;;42021:308;;;:::o;42335:132::-;42402:4;42425:3;42417:11;;42455:4;42450:3;42446:14;42438:22;;42335:132;;;:::o;42473:114::-;42540:6;42574:5;42568:12;42558:22;;42473:114;;;:::o;42593:98::-;42644:6;42678:5;42672:12;42662:22;;42593:98;;;:::o;42697:99::-;42749:6;42783:5;42777:12;42767:22;;42697:99;;;:::o;42802:113::-;42872:4;42904;42899:3;42895:14;42887:22;;42802:113;;;:::o;42921:184::-;43020:11;43054:6;43049:3;43042:19;43094:4;43089:3;43085:14;43070:29;;42921:184;;;;:::o;43111:168::-;43194:11;43228:6;43223:3;43216:19;43268:4;43263:3;43259:14;43244:29;;43111:168;;;;:::o;43285:169::-;43369:11;43403:6;43398:3;43391:19;43443:4;43438:3;43434:14;43419:29;;43285:169;;;;:::o;43460:148::-;43562:11;43599:3;43584:18;;43460:148;;;;:::o;43614:305::-;43654:3;43673:20;43691:1;43673:20;:::i;:::-;43668:25;;43707:20;43725:1;43707:20;:::i;:::-;43702:25;;43861:1;43793:66;43789:74;43786:1;43783:81;43780:107;;;43867:18;;:::i;:::-;43780:107;43911:1;43908;43904:9;43897:16;;43614:305;;;;:::o;43925:185::-;43965:1;43982:20;44000:1;43982:20;:::i;:::-;43977:25;;44016:20;44034:1;44016:20;:::i;:::-;44011:25;;44055:1;44045:35;;44060:18;;:::i;:::-;44045:35;44102:1;44099;44095:9;44090:14;;43925:185;;;;:::o;44116:348::-;44156:7;44179:20;44197:1;44179:20;:::i;:::-;44174:25;;44213:20;44231:1;44213:20;:::i;:::-;44208:25;;44401:1;44333:66;44329:74;44326:1;44323:81;44318:1;44311:9;44304:17;44300:105;44297:131;;;44408:18;;:::i;:::-;44297:131;44456:1;44453;44449:9;44438:20;;44116:348;;;;:::o;44470:191::-;44510:4;44530:20;44548:1;44530:20;:::i;:::-;44525:25;;44564:20;44582:1;44564:20;:::i;:::-;44559:25;;44603:1;44600;44597:8;44594:34;;;44608:18;;:::i;:::-;44594:34;44653:1;44650;44646:9;44638:17;;44470:191;;;;:::o;44667:96::-;44704:7;44733:24;44751:5;44733:24;:::i;:::-;44722:35;;44667:96;;;:::o;44769:90::-;44803:7;44846:5;44839:13;44832:21;44821:32;;44769:90;;;:::o;44865:149::-;44901:7;44941:66;44934:5;44930:78;44919:89;;44865:149;;;:::o;45020:126::-;45057:7;45097:42;45090:5;45086:54;45075:65;;45020:126;;;:::o;45152:77::-;45189:7;45218:5;45207:16;;45152:77;;;:::o;45235:154::-;45319:6;45314:3;45309;45296:30;45381:1;45372:6;45367:3;45363:16;45356:27;45235:154;;;:::o;45395:307::-;45463:1;45473:113;45487:6;45484:1;45481:13;45473:113;;;45572:1;45567:3;45563:11;45557:18;45553:1;45548:3;45544:11;45537:39;45509:2;45506:1;45502:10;45497:15;;45473:113;;;45604:6;45601:1;45598:13;45595:101;;;45684:1;45675:6;45670:3;45666:16;45659:27;45595:101;45444:258;45395:307;;;:::o;45708:320::-;45752:6;45789:1;45783:4;45779:12;45769:22;;45836:1;45830:4;45826:12;45857:18;45847:81;;45913:4;45905:6;45901:17;45891:27;;45847:81;45975:2;45967:6;45964:14;45944:18;45941:38;45938:84;;;45994:18;;:::i;:::-;45938:84;45759:269;45708:320;;;:::o;46034:281::-;46117:27;46139:4;46117:27;:::i;:::-;46109:6;46105:40;46247:6;46235:10;46232:22;46211:18;46199:10;46196:34;46193:62;46190:88;;;46258:18;;:::i;:::-;46190:88;46298:10;46294:2;46287:22;46077:238;46034:281;;:::o;46321:233::-;46360:3;46383:24;46401:5;46383:24;:::i;:::-;46374:33;;46429:66;46422:5;46419:77;46416:103;;;46499:18;;:::i;:::-;46416:103;46546:1;46539:5;46535:13;46528:20;;46321:233;;;:::o;46560:176::-;46592:1;46609:20;46627:1;46609:20;:::i;:::-;46604:25;;46643:20;46661:1;46643:20;:::i;:::-;46638:25;;46682:1;46672:35;;46687:18;;:::i;:::-;46672:35;46728:1;46725;46721:9;46716:14;;46560:176;;;;:::o;46742:180::-;46790:77;46787:1;46780:88;46887:4;46884:1;46877:15;46911:4;46908:1;46901:15;46928:180;46976:77;46973:1;46966:88;47073:4;47070:1;47063:15;47097:4;47094:1;47087:15;47114:180;47162:77;47159:1;47152:88;47259:4;47256:1;47249:15;47283:4;47280:1;47273:15;47300:180;47348:77;47345:1;47338:88;47445:4;47442:1;47435:15;47469:4;47466:1;47459:15;47486:180;47534:77;47531:1;47524:88;47631:4;47628:1;47621:15;47655:4;47652:1;47645:15;47672:180;47720:77;47717:1;47710:88;47817:4;47814:1;47807:15;47841:4;47838:1;47831:15;47858:117;47967:1;47964;47957:12;47981:117;48090:1;48087;48080:12;48104:117;48213:1;48210;48203:12;48227:117;48336:1;48333;48326:12;48350:117;48459:1;48456;48449:12;48473:102;48514:6;48565:2;48561:7;48556:2;48549:5;48545:14;48541:28;48531:38;;48473:102;;;:::o;48581:167::-;48721:19;48717:1;48709:6;48705:14;48698:43;48581:167;:::o;48754:238::-;48894:34;48890:1;48882:6;48878:14;48871:58;48963:21;48958:2;48950:6;48946:15;48939:46;48754:238;:::o;48998:230::-;49138:34;49134:1;49126:6;49122:14;49115:58;49207:13;49202:2;49194:6;49190:15;49183:38;48998:230;:::o;49234:237::-;49374:34;49370:1;49362:6;49358:14;49351:58;49443:20;49438:2;49430:6;49426:15;49419:45;49234:237;:::o;49477:158::-;49617:10;49613:1;49605:6;49601:14;49594:34;49477:158;:::o;49641:225::-;49781:34;49777:1;49769:6;49765:14;49758:58;49850:8;49845:2;49837:6;49833:15;49826:33;49641:225;:::o;49872:178::-;50012:30;50008:1;50000:6;49996:14;49989:54;49872:178;:::o;50056:180::-;50196:32;50192:1;50184:6;50180:14;50173:56;50056:180;:::o;50242:171::-;50382:23;50378:1;50370:6;50366:14;50359:47;50242:171;:::o;50419:223::-;50559:34;50555:1;50547:6;50543:14;50536:58;50628:6;50623:2;50615:6;50611:15;50604:31;50419:223;:::o;50648:175::-;50788:27;50784:1;50776:6;50772:14;50765:51;50648:175;:::o;50829:231::-;50969:34;50965:1;50957:6;50953:14;50946:58;51038:14;51033:2;51025:6;51021:15;51014:39;50829:231;:::o;51066:228::-;51206:34;51202:1;51194:6;51190:14;51183:58;51275:11;51270:2;51262:6;51258:15;51251:36;51066:228;:::o;51300:172::-;51440:24;51436:1;51428:6;51424:14;51417:48;51300:172;:::o;51478:309::-;51618:34;51614:1;51606:6;51602:14;51595:58;51687:34;51682:2;51674:6;51670:15;51663:59;51756:23;51751:2;51743:6;51739:15;51732:48;51478:309;:::o;51793:243::-;51933:34;51929:1;51921:6;51917:14;51910:58;52002:26;51997:2;51989:6;51985:15;51978:51;51793:243;:::o;52042:229::-;52182:34;52178:1;52170:6;52166:14;52159:58;52251:12;52246:2;52238:6;52234:15;52227:37;52042:229;:::o;52277:228::-;52417:34;52413:1;52405:6;52401:14;52394:58;52486:11;52481:2;52473:6;52469:15;52462:36;52277:228;:::o;52511:179::-;52651:31;52647:1;52639:6;52635:14;52628:55;52511:179;:::o;52696:182::-;52836:34;52832:1;52824:6;52820:14;52813:58;52696:182;:::o;52884:158::-;53024:10;53020:1;53012:6;53008:14;53001:34;52884:158;:::o;53048:220::-;53188:34;53184:1;53176:6;53172:14;53165:58;53257:3;53252:2;53244:6;53240:15;53233:28;53048:220;:::o;53274:231::-;53414:34;53410:1;53402:6;53398:14;53391:58;53483:14;53478:2;53470:6;53466:15;53459:39;53274:231;:::o;53511:182::-;53651:34;53647:1;53639:6;53635:14;53628:58;53511:182;:::o;53699:225::-;53839:34;53835:1;53827:6;53823:14;53816:58;53908:8;53903:2;53895:6;53891:15;53884:33;53699:225;:::o;53930:228::-;54070:34;54066:1;54058:6;54054:14;54047:58;54139:11;54134:2;54126:6;54122:15;54115:36;53930:228;:::o;54164:234::-;54304:34;54300:1;54292:6;54288:14;54281:58;54373:17;54368:2;54360:6;54356:15;54349:42;54164:234;:::o;54404:220::-;54544:34;54540:1;54532:6;54528:14;54521:58;54613:3;54608:2;54600:6;54596:15;54589:28;54404:220;:::o;54630:236::-;54770:34;54766:1;54758:6;54754:14;54747:58;54839:19;54834:2;54826:6;54822:15;54815:44;54630:236;:::o;54872:231::-;55012:34;55008:1;55000:6;54996:14;54989:58;55081:14;55076:2;55068:6;55064:15;55057:39;54872:231;:::o;55109:182::-;55249:34;55245:1;55237:6;55233:14;55226:58;55109:182;:::o;55297:122::-;55370:24;55388:5;55370:24;:::i;:::-;55363:5;55360:35;55350:63;;55409:1;55406;55399:12;55350:63;55297:122;:::o;55425:116::-;55495:21;55510:5;55495:21;:::i;:::-;55488:5;55485:32;55475:60;;55531:1;55528;55521:12;55475:60;55425:116;:::o;55547:120::-;55619:23;55636:5;55619:23;:::i;:::-;55612:5;55609:34;55599:62;;55657:1;55654;55647:12;55599:62;55547:120;:::o;55673:122::-;55746:24;55764:5;55746:24;:::i;:::-;55739:5;55736:35;55726:63;;55785:1;55782;55775:12;55726:63;55673:122;:::o

Swarm Source

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