ETH Price: $3,334.15 (-1.48%)
Gas: 16 Gwei

Token

DevilGirl (DG)
 

Overview

Max Total Supply

1,000 DG

Holders

351

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 DG
0xc61F778a4B36D1cd9aee1A3Ca8c22D407cd7AE68
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:
DevilGirl

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-14
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

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 generally not needed starting with Solidity 0.8, since 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 subtraction 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;
        }
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: contracts/tea/ERC721A.sol



pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

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

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

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

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

  /**
   * @dev
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_
  ) {
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
  }

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

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

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @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 ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

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

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

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

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

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

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

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

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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: 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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

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

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

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

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * Requirements:
   *
   * - `to` cannot be the zero address.
   * - `tokenId` token must be owned by `from`.
   *
   * Emits a {Transfer} event.
   */
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

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

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

  uint256 public nextOwnerToExplicitlySet = 0;



  /**
   * @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("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
   * transferred to `to`.
   * - When `from` is zero, `tokenId` will be minted for `to`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
// File: contracts/tea/DevilGirl.sol


pragma solidity 0.8.4;






contract DevilGirl is ERC721A, Ownable, ReentrancyGuard{

    using SafeMath for uint256;
    using Strings for uint256;

    uint256 public maxSupply = 1000;

    bool public open = false;

    uint256 public maxPerWallet = 2;

    uint256 public price = 0.003 ether;
    
    string private _baseTokenURI;

    mapping(address=>bool) approved;

    constructor()ERC721A("DevilGirl", "DG", 100)
    {
    } 

    modifier eoaOnly() {
        require(tx.origin == msg.sender, "EOA Only");
        _;
    }


    function toggleOpen() external eoaOnly onlyOwner
    {
        open = !open;
    }


    function setMaxPerWallet(uint256 _maxPerWallet) external eoaOnly onlyOwner
    {
        maxPerWallet = _maxPerWallet;
    }

    function setPrice(uint256 _price) external eoaOnly onlyOwner
    {
        price = _price;
    }


    function airdrop(address _to,uint256 _amount) external eoaOnly onlyOwner {

       require(totalSupply().add(_amount) <= maxSupply,"Exceed max supply.");
        approved[_to] = true;
        _safeMint(_to,_amount);
    }


    function mint(uint256 amount) public eoaOnly payable{

        require(open,"Not open.");

        require(numberMinted(msg.sender).add(amount) <= maxPerWallet, "Exceed max per wallet.");

        require(totalSupply().add(amount) <= maxSupply,"Exceed max supply."); 

        require(msg.value >= price.mul(amount),"Insufficient funds.");

        _safeMint(msg.sender, amount);
    }


    function numberMinted(address _owner) public view returns (uint256) {
        return _numberMinted(_owner);
    }


    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory){

        string memory baseURI = _baseTokenURI;
        
        if(bytes(baseURI).length > 0){
            return string(abi.encodePacked(baseURI, tokenId.toString()));
        }
        return "";
    }


    function withdrawETH() public onlyOwner{
        payable(owner()).transfer(address(this).balance);
    }


    function isApprovedForAll(address owner, address operator)
        public
        view
        override
        returns (bool)
    {
        //OpenSea: Conduit
        if(operator == address(0x1E0049783F008A0085193E00003D00cd54003c71) && approved[owner]){
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","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":[],"name":"toggleOpen","outputs":[],"stateMutability":"nonpayable","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":[],"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":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000805560006008556103e8600b556000600c60006101000a81548160ff0219169083151502179055506002600d55660aa87bee538000600e553480156200004b57600080fd5b506040518060400160405280600981526020017f446576696c4769726c00000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f444700000000000000000000000000000000000000000000000000000000000081525060646000811162000100576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f7906200030f565b60405180910390fd5b82600290805190602001906200011892919062000238565b5081600390805190602001906200013192919062000238565b50806001819055505050506200015c620001506200016a60201b60201c565b6200017260201b60201c565b6001600a81905550620003f6565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002469062000342565b90600052602060002090601f0160209004810192826200026a5760008555620002b6565b82601f106200028557805160ff1916838001178555620002b6565b82800160010185558215620002b6579182015b82811115620002b557825182559160200191906001019062000298565b5b509050620002c59190620002c9565b5090565b5b80821115620002e4576000816000905550600101620002ca565b5090565b6000620002f760278362000331565b91506200030482620003a7565b604082019050919050565b600060208201905081810360008301526200032a81620002e8565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200035b57607f821691505b6020821081141562000372576200037162000378565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b61454080620004066000396000f3fe6080604052600436106101e35760003560e01c806391b7f5ed11610102578063d5abeb0111610095578063e268e4d311610064578063e268e4d3146106d1578063e985e9c5146106fa578063f2fde38b14610737578063fcfff16f14610760576101e3565b8063d5abeb0114610627578063d7224ba014610652578063dc33e6811461067d578063e086e5ec146106ba576101e3565b8063a22cb465116100d1578063a22cb46514610581578063a7b72294146105aa578063b88d4fde146105c1578063c87b56dd146105ea576101e3565b806391b7f5ed146104e657806395d89b411461050f578063a035b1fe1461053a578063a0712d6814610565576101e3565b8063453c23101161017a57806370a082311161014957806370a082311461043e578063715018a61461047b5780638ba4cc3c146104925780638da5cb5b146104bb576101e3565b8063453c2310146103705780634f6ccce71461039b57806355f804b3146103d85780636352211e14610401576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632f745c591461030a57806342842e0e14610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a919061305b565b61078b565b60405161021c91906135e1565b60405180910390f35b34801561023157600080fd5b5061023a6108d5565b60405161024791906135fc565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906130f2565b610967565b604051610284919061357a565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061301f565b6109ec565b005b3480156102c257600080fd5b506102cb610b05565b6040516102d8919061393e565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612f19565b610b0e565b005b34801561031657600080fd5b50610331600480360381019061032c919061301f565b610b1e565b60405161033e919061393e565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190612f19565b610d1c565b005b34801561037c57600080fd5b50610385610d3c565b604051610392919061393e565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906130f2565b610d42565b6040516103cf919061393e565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906130ad565b610d95565b005b34801561040d57600080fd5b50610428600480360381019061042391906130f2565b610db3565b604051610435919061357a565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612eb4565b610dc9565b604051610472919061393e565b60405180910390f35b34801561048757600080fd5b50610490610eb2565b005b34801561049e57600080fd5b506104b960048036038101906104b4919061301f565b610ec6565b005b3480156104c757600080fd5b506104d0611000565b6040516104dd919061357a565b60405180910390f35b3480156104f257600080fd5b5061050d600480360381019061050891906130f2565b61102a565b005b34801561051b57600080fd5b506105246110aa565b60405161053191906135fc565b60405180910390f35b34801561054657600080fd5b5061054f61113c565b60405161055c919061393e565b60405180910390f35b61057f600480360381019061057a91906130f2565b611142565b005b34801561058d57600080fd5b506105a860048036038101906105a39190612fe3565b611320565b005b3480156105b657600080fd5b506105bf6114a1565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190612f68565b611543565b005b3480156105f657600080fd5b50610611600480360381019061060c91906130f2565b61159f565b60405161061e91906135fc565b60405180910390f35b34801561063357600080fd5b5061063c611685565b604051610649919061393e565b60405180910390f35b34801561065e57600080fd5b5061066761168b565b604051610674919061393e565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612eb4565b611691565b6040516106b1919061393e565b60405180910390f35b3480156106c657600080fd5b506106cf6116a3565b005b3480156106dd57600080fd5b506106f860048036038101906106f391906130f2565b6116fb565b005b34801561070657600080fd5b50610721600480360381019061071c9190612edd565b61177b565b60405161072e91906135e1565b60405180910390f35b34801561074357600080fd5b5061075e60048036038101906107599190612eb4565b611836565b005b34801561076c57600080fd5b506107756118ba565b60405161078291906135e1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108be57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ce57506108cd826118cd565b5b9050919050565b6060600280546108e490613c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461091090613c7d565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b600061097282611937565b6109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a8906138be565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f782610db3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f906137fe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a87611944565b73ffffffffffffffffffffffffffffffffffffffff161480610ab65750610ab581610ab0611944565b61177b565b5b610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec9061371e565b60405180910390fd5b610b0083838361194c565b505050565b60008054905090565b610b198383836119fe565b505050565b6000610b2983610dc9565b8210610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b619061361e565b60405180910390fd5b6000610b74610b05565b905060008060005b83811015610cda576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c6e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc65786841415610cb7578195505050505050610d16565b8380610cc290613ce0565b9450505b508080610cd290613ce0565b915050610b7c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d9061387e565b60405180910390fd5b92915050565b610d3783838360405180602001604052806000815250611543565b505050565b600d5481565b6000610d4c610b05565b8210610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d849061369e565b60405180910390fd5b819050919050565b610d9d611fb7565b8181600f9190610dae929190612cbc565b505050565b6000610dbe82612035565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e319061373e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610eba611fb7565b610ec460006121fb565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b906136fe565b60405180910390fd5b610f3c611fb7565b600b54610f5982610f4b610b05565b6122c190919063ffffffff16565b1115610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f919061375e565b60405180910390fd5b6001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610ffc82826122d7565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906136fe565b60405180910390fd5b6110a0611fb7565b80600e8190555050565b6060600380546110b990613c7d565b80601f01602080910402602001604051908101604052809291908181526020018280546110e590613c7d565b80156111325780601f1061110757610100808354040283529160200191611132565b820191906000526020600020905b81548152906001019060200180831161111557829003601f168201915b5050505050905090565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906136fe565b60405180910390fd5b600c60009054906101000a900460ff166111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f6906138de565b60405180910390fd5b600d5461121d8261120f33611691565b6122c190919063ffffffff16565b111561125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112559061363e565b60405180910390fd5b600b5461127b8261126d610b05565b6122c190919063ffffffff16565b11156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061375e565b60405180910390fd5b6112d181600e546122f590919063ffffffff16565b341015611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a9061391e565b60405180910390fd5b61131d33826122d7565b50565b611328611944565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d906137be565b60405180910390fd5b80600760006113a3611944565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611450611944565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161149591906135e1565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611506906136fe565b60405180910390fd5b611517611fb7565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b61154e8484846119fe565b61155a8484848461230b565b611599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115909061381e565b60405180910390fd5b50505050565b60606000600f80546115b090613c7d565b80601f01602080910402602001604051908101604052809291908181526020018280546115dc90613c7d565b80156116295780601f106115fe57610100808354040283529160200191611629565b820191906000526020600020905b81548152906001019060200180831161160c57829003601f168201915b5050505050905060008151111561166c5780611644846124a2565b604051602001611655929190613556565b604051602081830303815290604052915050611680565b604051806020016040528060008152509150505b919050565b600b5481565b60085481565b600061169c8261264f565b9050919050565b6116ab611fb7565b6116b3611000565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116f8573d6000803e3d6000fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611760906136fe565b60405180910390fd5b611771611fb7565b80600d8190555050565b6000731e0049783f008a0085193e00003d00cd54003c7173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156118155750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156118235760019050611830565b61182d8383612738565b90505b92915050565b61183e611fb7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a59061365e565b60405180910390fd5b6118b7816121fb565b50565b600c60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a0982612035565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611a30611944565b73ffffffffffffffffffffffffffffffffffffffff161480611a8c5750611a55611944565b73ffffffffffffffffffffffffffffffffffffffff16611a7484610967565b73ffffffffffffffffffffffffffffffffffffffff16145b80611aa85750611aa78260000151611aa2611944565b61177b565b5b905080611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906137de565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b539061377e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906136be565b60405180910390fd5b611bd985858560016127cc565b611be9600084846000015161194c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611c579190613b19565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611cfb91906139f2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611e019190613a38565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f4757611e7781611937565b15611f46576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611faf86868660016127d2565b505050505050565b611fbf611944565b73ffffffffffffffffffffffffffffffffffffffff16611fdd611000565b73ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a9061379e565b60405180910390fd5b565b61203d612d42565b61204682611937565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c9061367e565b60405180910390fd5b600060015483106120ac57600180548461209f9190613b4d565b6120a99190613a38565b90505b60008390505b8181106121ba576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121a6578093505050506121f6565b5080806121b290613c53565b9150506120b2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed9061389e565b60405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122cf9190613a38565b905092915050565b6122f18282604051806020016040528060008152506127d8565b5050565b600081836123039190613abf565b905092915050565b600061232c8473ffffffffffffffffffffffffffffffffffffffff16612c99565b15612495578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612355611944565b8786866040518563ffffffff1660e01b81526004016123779493929190613595565b602060405180830381600087803b15801561239157600080fd5b505af19250505080156123c257506040513d601f19601f820116820180604052508101906123bf9190613084565b60015b612445573d80600081146123f2576040519150601f19603f3d011682016040523d82523d6000602084013e6123f7565b606091505b5060008151141561243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124349061381e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061249a565b600190505b949350505050565b606060008214156124ea576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061264a565b600082905060005b6000821461251c57808061250590613ce0565b915050600a826125159190613a8e565b91506124f2565b60008167ffffffffffffffff81111561255e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125905781602001600182028036833780820191505090505b5090505b60008514612643576001826125a99190613b4d565b9150600a856125b89190613d29565b60306125c49190613a38565b60f81b818381518110612600577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561263c9190613a8e565b9450612594565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b7906136de565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561284e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128459061385e565b60405180910390fd5b61285781611937565b15612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e9061383e565b60405180910390fd5b6001548311156128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d3906138fe565b60405180910390fd5b6128e960008583866127cc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516129e691906139f2565b6fffffffffffffffffffffffffffffffff168152602001858360200151612a0d91906139f2565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612c7c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c1c600088848861230b565b612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c529061381e565b60405180910390fd5b8180612c6690613ce0565b9250508080612c7490613ce0565b915050612bab565b5080600081905550612c9160008785886127d2565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612cc890613c7d565b90600052602060002090601f016020900481019282612cea5760008555612d31565b82601f10612d0357803560ff1916838001178555612d31565b82800160010185558215612d31579182015b82811115612d30578235825591602001919060010190612d15565b5b509050612d3e9190612d7c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612d95576000816000905550600101612d7d565b5090565b6000612dac612da78461397e565b613959565b905082815260208101848484011115612dc457600080fd5b612dcf848285613c11565b509392505050565b600081359050612de6816144ae565b92915050565b600081359050612dfb816144c5565b92915050565b600081359050612e10816144dc565b92915050565b600081519050612e25816144dc565b92915050565b600082601f830112612e3c57600080fd5b8135612e4c848260208601612d99565b91505092915050565b60008083601f840112612e6757600080fd5b8235905067ffffffffffffffff811115612e8057600080fd5b602083019150836001820283011115612e9857600080fd5b9250929050565b600081359050612eae816144f3565b92915050565b600060208284031215612ec657600080fd5b6000612ed484828501612dd7565b91505092915050565b60008060408385031215612ef057600080fd5b6000612efe85828601612dd7565b9250506020612f0f85828601612dd7565b9150509250929050565b600080600060608486031215612f2e57600080fd5b6000612f3c86828701612dd7565b9350506020612f4d86828701612dd7565b9250506040612f5e86828701612e9f565b9150509250925092565b60008060008060808587031215612f7e57600080fd5b6000612f8c87828801612dd7565b9450506020612f9d87828801612dd7565b9350506040612fae87828801612e9f565b925050606085013567ffffffffffffffff811115612fcb57600080fd5b612fd787828801612e2b565b91505092959194509250565b60008060408385031215612ff657600080fd5b600061300485828601612dd7565b925050602061301585828601612dec565b9150509250929050565b6000806040838503121561303257600080fd5b600061304085828601612dd7565b925050602061305185828601612e9f565b9150509250929050565b60006020828403121561306d57600080fd5b600061307b84828501612e01565b91505092915050565b60006020828403121561309657600080fd5b60006130a484828501612e16565b91505092915050565b600080602083850312156130c057600080fd5b600083013567ffffffffffffffff8111156130da57600080fd5b6130e685828601612e55565b92509250509250929050565b60006020828403121561310457600080fd5b600061311284828501612e9f565b91505092915050565b61312481613b81565b82525050565b61313381613b93565b82525050565b6000613144826139af565b61314e81856139c5565b935061315e818560208601613c20565b61316781613e16565b840191505092915050565b600061317d826139ba565b61318781856139d6565b9350613197818560208601613c20565b6131a081613e16565b840191505092915050565b60006131b6826139ba565b6131c081856139e7565b93506131d0818560208601613c20565b80840191505092915050565b60006131e96022836139d6565b91506131f482613e27565b604082019050919050565b600061320c6016836139d6565b915061321782613e76565b602082019050919050565b600061322f6026836139d6565b915061323a82613e9f565b604082019050919050565b6000613252602a836139d6565b915061325d82613eee565b604082019050919050565b60006132756023836139d6565b915061328082613f3d565b604082019050919050565b60006132986025836139d6565b91506132a382613f8c565b604082019050919050565b60006132bb6031836139d6565b91506132c682613fdb565b604082019050919050565b60006132de6008836139d6565b91506132e98261402a565b602082019050919050565b60006133016039836139d6565b915061330c82614053565b604082019050919050565b6000613324602b836139d6565b915061332f826140a2565b604082019050919050565b60006133476012836139d6565b9150613352826140f1565b602082019050919050565b600061336a6026836139d6565b91506133758261411a565b604082019050919050565b600061338d6020836139d6565b915061339882614169565b602082019050919050565b60006133b0601a836139d6565b91506133bb82614192565b602082019050919050565b60006133d36032836139d6565b91506133de826141bb565b604082019050919050565b60006133f66022836139d6565b91506134018261420a565b604082019050919050565b60006134196033836139d6565b915061342482614259565b604082019050919050565b600061343c601d836139d6565b9150613447826142a8565b602082019050919050565b600061345f6021836139d6565b915061346a826142d1565b604082019050919050565b6000613482602e836139d6565b915061348d82614320565b604082019050919050565b60006134a5602f836139d6565b91506134b08261436f565b604082019050919050565b60006134c8602d836139d6565b91506134d3826143be565b604082019050919050565b60006134eb6009836139d6565b91506134f68261440d565b602082019050919050565b600061350e6022836139d6565b915061351982614436565b604082019050919050565b60006135316013836139d6565b915061353c82614485565b602082019050919050565b61355081613c07565b82525050565b600061356282856131ab565b915061356e82846131ab565b91508190509392505050565b600060208201905061358f600083018461311b565b92915050565b60006080820190506135aa600083018761311b565b6135b7602083018661311b565b6135c46040830185613547565b81810360608301526135d68184613139565b905095945050505050565b60006020820190506135f6600083018461312a565b92915050565b600060208201905081810360008301526136168184613172565b905092915050565b60006020820190508181036000830152613637816131dc565b9050919050565b60006020820190508181036000830152613657816131ff565b9050919050565b6000602082019050818103600083015261367781613222565b9050919050565b6000602082019050818103600083015261369781613245565b9050919050565b600060208201905081810360008301526136b781613268565b9050919050565b600060208201905081810360008301526136d78161328b565b9050919050565b600060208201905081810360008301526136f7816132ae565b9050919050565b60006020820190508181036000830152613717816132d1565b9050919050565b60006020820190508181036000830152613737816132f4565b9050919050565b6000602082019050818103600083015261375781613317565b9050919050565b600060208201905081810360008301526137778161333a565b9050919050565b600060208201905081810360008301526137978161335d565b9050919050565b600060208201905081810360008301526137b781613380565b9050919050565b600060208201905081810360008301526137d7816133a3565b9050919050565b600060208201905081810360008301526137f7816133c6565b9050919050565b60006020820190508181036000830152613817816133e9565b9050919050565b600060208201905081810360008301526138378161340c565b9050919050565b600060208201905081810360008301526138578161342f565b9050919050565b6000602082019050818103600083015261387781613452565b9050919050565b6000602082019050818103600083015261389781613475565b9050919050565b600060208201905081810360008301526138b781613498565b9050919050565b600060208201905081810360008301526138d7816134bb565b9050919050565b600060208201905081810360008301526138f7816134de565b9050919050565b6000602082019050818103600083015261391781613501565b9050919050565b6000602082019050818103600083015261393781613524565b9050919050565b60006020820190506139536000830184613547565b92915050565b6000613963613974565b905061396f8282613caf565b919050565b6000604051905090565b600067ffffffffffffffff82111561399957613998613de7565b5b6139a282613e16565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139fd82613bcb565b9150613a0883613bcb565b9250826fffffffffffffffffffffffffffffffff03821115613a2d57613a2c613d5a565b5b828201905092915050565b6000613a4382613c07565b9150613a4e83613c07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a8357613a82613d5a565b5b828201905092915050565b6000613a9982613c07565b9150613aa483613c07565b925082613ab457613ab3613d89565b5b828204905092915050565b6000613aca82613c07565b9150613ad583613c07565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b0e57613b0d613d5a565b5b828202905092915050565b6000613b2482613bcb565b9150613b2f83613bcb565b925082821015613b4257613b41613d5a565b5b828203905092915050565b6000613b5882613c07565b9150613b6383613c07565b925082821015613b7657613b75613d5a565b5b828203905092915050565b6000613b8c82613be7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c3e578082015181840152602081019050613c23565b83811115613c4d576000848401525b50505050565b6000613c5e82613c07565b91506000821415613c7257613c71613d5a565b5b600182039050919050565b60006002820490506001821680613c9557607f821691505b60208210811415613ca957613ca8613db8565b5b50919050565b613cb882613e16565b810181811067ffffffffffffffff82111715613cd757613cd6613de7565b5b80604052505050565b6000613ceb82613c07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d1e57613d1d613d5a565b5b600182019050919050565b6000613d3482613c07565b9150613d3f83613c07565b925082613d4f57613d4e613d89565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206d6178207065722077616c6c65742e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f454f41204f6e6c79000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f457863656564206d617820737570706c792e0000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f4e6f74206f70656e2e0000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b6144b781613b81565b81146144c257600080fd5b50565b6144ce81613b93565b81146144d957600080fd5b50565b6144e581613b9f565b81146144f057600080fd5b50565b6144fc81613c07565b811461450757600080fd5b5056fea26469706673582212208878b6e9958a6bd053f1ac932ac28343658a3042ee1ebf64d67f7372ccedcbfd64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101e35760003560e01c806391b7f5ed11610102578063d5abeb0111610095578063e268e4d311610064578063e268e4d3146106d1578063e985e9c5146106fa578063f2fde38b14610737578063fcfff16f14610760576101e3565b8063d5abeb0114610627578063d7224ba014610652578063dc33e6811461067d578063e086e5ec146106ba576101e3565b8063a22cb465116100d1578063a22cb46514610581578063a7b72294146105aa578063b88d4fde146105c1578063c87b56dd146105ea576101e3565b806391b7f5ed146104e657806395d89b411461050f578063a035b1fe1461053a578063a0712d6814610565576101e3565b8063453c23101161017a57806370a082311161014957806370a082311461043e578063715018a61461047b5780638ba4cc3c146104925780638da5cb5b146104bb576101e3565b8063453c2310146103705780634f6ccce71461039b57806355f804b3146103d85780636352211e14610401576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632f745c591461030a57806342842e0e14610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a919061305b565b61078b565b60405161021c91906135e1565b60405180910390f35b34801561023157600080fd5b5061023a6108d5565b60405161024791906135fc565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906130f2565b610967565b604051610284919061357a565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061301f565b6109ec565b005b3480156102c257600080fd5b506102cb610b05565b6040516102d8919061393e565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612f19565b610b0e565b005b34801561031657600080fd5b50610331600480360381019061032c919061301f565b610b1e565b60405161033e919061393e565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190612f19565b610d1c565b005b34801561037c57600080fd5b50610385610d3c565b604051610392919061393e565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906130f2565b610d42565b6040516103cf919061393e565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906130ad565b610d95565b005b34801561040d57600080fd5b50610428600480360381019061042391906130f2565b610db3565b604051610435919061357a565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612eb4565b610dc9565b604051610472919061393e565b60405180910390f35b34801561048757600080fd5b50610490610eb2565b005b34801561049e57600080fd5b506104b960048036038101906104b4919061301f565b610ec6565b005b3480156104c757600080fd5b506104d0611000565b6040516104dd919061357a565b60405180910390f35b3480156104f257600080fd5b5061050d600480360381019061050891906130f2565b61102a565b005b34801561051b57600080fd5b506105246110aa565b60405161053191906135fc565b60405180910390f35b34801561054657600080fd5b5061054f61113c565b60405161055c919061393e565b60405180910390f35b61057f600480360381019061057a91906130f2565b611142565b005b34801561058d57600080fd5b506105a860048036038101906105a39190612fe3565b611320565b005b3480156105b657600080fd5b506105bf6114a1565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190612f68565b611543565b005b3480156105f657600080fd5b50610611600480360381019061060c91906130f2565b61159f565b60405161061e91906135fc565b60405180910390f35b34801561063357600080fd5b5061063c611685565b604051610649919061393e565b60405180910390f35b34801561065e57600080fd5b5061066761168b565b604051610674919061393e565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612eb4565b611691565b6040516106b1919061393e565b60405180910390f35b3480156106c657600080fd5b506106cf6116a3565b005b3480156106dd57600080fd5b506106f860048036038101906106f391906130f2565b6116fb565b005b34801561070657600080fd5b50610721600480360381019061071c9190612edd565b61177b565b60405161072e91906135e1565b60405180910390f35b34801561074357600080fd5b5061075e60048036038101906107599190612eb4565b611836565b005b34801561076c57600080fd5b506107756118ba565b60405161078291906135e1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108be57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ce57506108cd826118cd565b5b9050919050565b6060600280546108e490613c7d565b80601f016020809104026020016040519081016040528092919081815260200182805461091090613c7d565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b600061097282611937565b6109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a8906138be565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f782610db3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f906137fe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a87611944565b73ffffffffffffffffffffffffffffffffffffffff161480610ab65750610ab581610ab0611944565b61177b565b5b610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec9061371e565b60405180910390fd5b610b0083838361194c565b505050565b60008054905090565b610b198383836119fe565b505050565b6000610b2983610dc9565b8210610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b619061361e565b60405180910390fd5b6000610b74610b05565b905060008060005b83811015610cda576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c6e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc65786841415610cb7578195505050505050610d16565b8380610cc290613ce0565b9450505b508080610cd290613ce0565b915050610b7c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d9061387e565b60405180910390fd5b92915050565b610d3783838360405180602001604052806000815250611543565b505050565b600d5481565b6000610d4c610b05565b8210610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d849061369e565b60405180910390fd5b819050919050565b610d9d611fb7565b8181600f9190610dae929190612cbc565b505050565b6000610dbe82612035565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e319061373e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610eba611fb7565b610ec460006121fb565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b906136fe565b60405180910390fd5b610f3c611fb7565b600b54610f5982610f4b610b05565b6122c190919063ffffffff16565b1115610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f919061375e565b60405180910390fd5b6001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610ffc82826122d7565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906136fe565b60405180910390fd5b6110a0611fb7565b80600e8190555050565b6060600380546110b990613c7d565b80601f01602080910402602001604051908101604052809291908181526020018280546110e590613c7d565b80156111325780601f1061110757610100808354040283529160200191611132565b820191906000526020600020905b81548152906001019060200180831161111557829003601f168201915b5050505050905090565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906136fe565b60405180910390fd5b600c60009054906101000a900460ff166111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f6906138de565b60405180910390fd5b600d5461121d8261120f33611691565b6122c190919063ffffffff16565b111561125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112559061363e565b60405180910390fd5b600b5461127b8261126d610b05565b6122c190919063ffffffff16565b11156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061375e565b60405180910390fd5b6112d181600e546122f590919063ffffffff16565b341015611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a9061391e565b60405180910390fd5b61131d33826122d7565b50565b611328611944565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d906137be565b60405180910390fd5b80600760006113a3611944565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611450611944565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161149591906135e1565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611506906136fe565b60405180910390fd5b611517611fb7565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b61154e8484846119fe565b61155a8484848461230b565b611599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115909061381e565b60405180910390fd5b50505050565b60606000600f80546115b090613c7d565b80601f01602080910402602001604051908101604052809291908181526020018280546115dc90613c7d565b80156116295780601f106115fe57610100808354040283529160200191611629565b820191906000526020600020905b81548152906001019060200180831161160c57829003601f168201915b5050505050905060008151111561166c5780611644846124a2565b604051602001611655929190613556565b604051602081830303815290604052915050611680565b604051806020016040528060008152509150505b919050565b600b5481565b60085481565b600061169c8261264f565b9050919050565b6116ab611fb7565b6116b3611000565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116f8573d6000803e3d6000fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611760906136fe565b60405180910390fd5b611771611fb7565b80600d8190555050565b6000731e0049783f008a0085193e00003d00cd54003c7173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156118155750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156118235760019050611830565b61182d8383612738565b90505b92915050565b61183e611fb7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a59061365e565b60405180910390fd5b6118b7816121fb565b50565b600c60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a0982612035565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611a30611944565b73ffffffffffffffffffffffffffffffffffffffff161480611a8c5750611a55611944565b73ffffffffffffffffffffffffffffffffffffffff16611a7484610967565b73ffffffffffffffffffffffffffffffffffffffff16145b80611aa85750611aa78260000151611aa2611944565b61177b565b5b905080611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906137de565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b539061377e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906136be565b60405180910390fd5b611bd985858560016127cc565b611be9600084846000015161194c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611c579190613b19565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611cfb91906139f2565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611e019190613a38565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f4757611e7781611937565b15611f46576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611faf86868660016127d2565b505050505050565b611fbf611944565b73ffffffffffffffffffffffffffffffffffffffff16611fdd611000565b73ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a9061379e565b60405180910390fd5b565b61203d612d42565b61204682611937565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c9061367e565b60405180910390fd5b600060015483106120ac57600180548461209f9190613b4d565b6120a99190613a38565b90505b60008390505b8181106121ba576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121a6578093505050506121f6565b5080806121b290613c53565b9150506120b2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed9061389e565b60405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122cf9190613a38565b905092915050565b6122f18282604051806020016040528060008152506127d8565b5050565b600081836123039190613abf565b905092915050565b600061232c8473ffffffffffffffffffffffffffffffffffffffff16612c99565b15612495578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612355611944565b8786866040518563ffffffff1660e01b81526004016123779493929190613595565b602060405180830381600087803b15801561239157600080fd5b505af19250505080156123c257506040513d601f19601f820116820180604052508101906123bf9190613084565b60015b612445573d80600081146123f2576040519150601f19603f3d011682016040523d82523d6000602084013e6123f7565b606091505b5060008151141561243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124349061381e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061249a565b600190505b949350505050565b606060008214156124ea576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061264a565b600082905060005b6000821461251c57808061250590613ce0565b915050600a826125159190613a8e565b91506124f2565b60008167ffffffffffffffff81111561255e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125905781602001600182028036833780820191505090505b5090505b60008514612643576001826125a99190613b4d565b9150600a856125b89190613d29565b60306125c49190613a38565b60f81b818381518110612600577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561263c9190613a8e565b9450612594565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b7906136de565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561284e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128459061385e565b60405180910390fd5b61285781611937565b15612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e9061383e565b60405180910390fd5b6001548311156128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d3906138fe565b60405180910390fd5b6128e960008583866127cc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516129e691906139f2565b6fffffffffffffffffffffffffffffffff168152602001858360200151612a0d91906139f2565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612c7c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c1c600088848861230b565b612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c529061381e565b60405180910390fd5b8180612c6690613ce0565b9250508080612c7490613ce0565b915050612bab565b5080600081905550612c9160008785886127d2565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612cc890613c7d565b90600052602060002090601f016020900481019282612cea5760008555612d31565b82601f10612d0357803560ff1916838001178555612d31565b82800160010185558215612d31579182015b82811115612d30578235825591602001919060010190612d15565b5b509050612d3e9190612d7c565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612d95576000816000905550600101612d7d565b5090565b6000612dac612da78461397e565b613959565b905082815260208101848484011115612dc457600080fd5b612dcf848285613c11565b509392505050565b600081359050612de6816144ae565b92915050565b600081359050612dfb816144c5565b92915050565b600081359050612e10816144dc565b92915050565b600081519050612e25816144dc565b92915050565b600082601f830112612e3c57600080fd5b8135612e4c848260208601612d99565b91505092915050565b60008083601f840112612e6757600080fd5b8235905067ffffffffffffffff811115612e8057600080fd5b602083019150836001820283011115612e9857600080fd5b9250929050565b600081359050612eae816144f3565b92915050565b600060208284031215612ec657600080fd5b6000612ed484828501612dd7565b91505092915050565b60008060408385031215612ef057600080fd5b6000612efe85828601612dd7565b9250506020612f0f85828601612dd7565b9150509250929050565b600080600060608486031215612f2e57600080fd5b6000612f3c86828701612dd7565b9350506020612f4d86828701612dd7565b9250506040612f5e86828701612e9f565b9150509250925092565b60008060008060808587031215612f7e57600080fd5b6000612f8c87828801612dd7565b9450506020612f9d87828801612dd7565b9350506040612fae87828801612e9f565b925050606085013567ffffffffffffffff811115612fcb57600080fd5b612fd787828801612e2b565b91505092959194509250565b60008060408385031215612ff657600080fd5b600061300485828601612dd7565b925050602061301585828601612dec565b9150509250929050565b6000806040838503121561303257600080fd5b600061304085828601612dd7565b925050602061305185828601612e9f565b9150509250929050565b60006020828403121561306d57600080fd5b600061307b84828501612e01565b91505092915050565b60006020828403121561309657600080fd5b60006130a484828501612e16565b91505092915050565b600080602083850312156130c057600080fd5b600083013567ffffffffffffffff8111156130da57600080fd5b6130e685828601612e55565b92509250509250929050565b60006020828403121561310457600080fd5b600061311284828501612e9f565b91505092915050565b61312481613b81565b82525050565b61313381613b93565b82525050565b6000613144826139af565b61314e81856139c5565b935061315e818560208601613c20565b61316781613e16565b840191505092915050565b600061317d826139ba565b61318781856139d6565b9350613197818560208601613c20565b6131a081613e16565b840191505092915050565b60006131b6826139ba565b6131c081856139e7565b93506131d0818560208601613c20565b80840191505092915050565b60006131e96022836139d6565b91506131f482613e27565b604082019050919050565b600061320c6016836139d6565b915061321782613e76565b602082019050919050565b600061322f6026836139d6565b915061323a82613e9f565b604082019050919050565b6000613252602a836139d6565b915061325d82613eee565b604082019050919050565b60006132756023836139d6565b915061328082613f3d565b604082019050919050565b60006132986025836139d6565b91506132a382613f8c565b604082019050919050565b60006132bb6031836139d6565b91506132c682613fdb565b604082019050919050565b60006132de6008836139d6565b91506132e98261402a565b602082019050919050565b60006133016039836139d6565b915061330c82614053565b604082019050919050565b6000613324602b836139d6565b915061332f826140a2565b604082019050919050565b60006133476012836139d6565b9150613352826140f1565b602082019050919050565b600061336a6026836139d6565b91506133758261411a565b604082019050919050565b600061338d6020836139d6565b915061339882614169565b602082019050919050565b60006133b0601a836139d6565b91506133bb82614192565b602082019050919050565b60006133d36032836139d6565b91506133de826141bb565b604082019050919050565b60006133f66022836139d6565b91506134018261420a565b604082019050919050565b60006134196033836139d6565b915061342482614259565b604082019050919050565b600061343c601d836139d6565b9150613447826142a8565b602082019050919050565b600061345f6021836139d6565b915061346a826142d1565b604082019050919050565b6000613482602e836139d6565b915061348d82614320565b604082019050919050565b60006134a5602f836139d6565b91506134b08261436f565b604082019050919050565b60006134c8602d836139d6565b91506134d3826143be565b604082019050919050565b60006134eb6009836139d6565b91506134f68261440d565b602082019050919050565b600061350e6022836139d6565b915061351982614436565b604082019050919050565b60006135316013836139d6565b915061353c82614485565b602082019050919050565b61355081613c07565b82525050565b600061356282856131ab565b915061356e82846131ab565b91508190509392505050565b600060208201905061358f600083018461311b565b92915050565b60006080820190506135aa600083018761311b565b6135b7602083018661311b565b6135c46040830185613547565b81810360608301526135d68184613139565b905095945050505050565b60006020820190506135f6600083018461312a565b92915050565b600060208201905081810360008301526136168184613172565b905092915050565b60006020820190508181036000830152613637816131dc565b9050919050565b60006020820190508181036000830152613657816131ff565b9050919050565b6000602082019050818103600083015261367781613222565b9050919050565b6000602082019050818103600083015261369781613245565b9050919050565b600060208201905081810360008301526136b781613268565b9050919050565b600060208201905081810360008301526136d78161328b565b9050919050565b600060208201905081810360008301526136f7816132ae565b9050919050565b60006020820190508181036000830152613717816132d1565b9050919050565b60006020820190508181036000830152613737816132f4565b9050919050565b6000602082019050818103600083015261375781613317565b9050919050565b600060208201905081810360008301526137778161333a565b9050919050565b600060208201905081810360008301526137978161335d565b9050919050565b600060208201905081810360008301526137b781613380565b9050919050565b600060208201905081810360008301526137d7816133a3565b9050919050565b600060208201905081810360008301526137f7816133c6565b9050919050565b60006020820190508181036000830152613817816133e9565b9050919050565b600060208201905081810360008301526138378161340c565b9050919050565b600060208201905081810360008301526138578161342f565b9050919050565b6000602082019050818103600083015261387781613452565b9050919050565b6000602082019050818103600083015261389781613475565b9050919050565b600060208201905081810360008301526138b781613498565b9050919050565b600060208201905081810360008301526138d7816134bb565b9050919050565b600060208201905081810360008301526138f7816134de565b9050919050565b6000602082019050818103600083015261391781613501565b9050919050565b6000602082019050818103600083015261393781613524565b9050919050565b60006020820190506139536000830184613547565b92915050565b6000613963613974565b905061396f8282613caf565b919050565b6000604051905090565b600067ffffffffffffffff82111561399957613998613de7565b5b6139a282613e16565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139fd82613bcb565b9150613a0883613bcb565b9250826fffffffffffffffffffffffffffffffff03821115613a2d57613a2c613d5a565b5b828201905092915050565b6000613a4382613c07565b9150613a4e83613c07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a8357613a82613d5a565b5b828201905092915050565b6000613a9982613c07565b9150613aa483613c07565b925082613ab457613ab3613d89565b5b828204905092915050565b6000613aca82613c07565b9150613ad583613c07565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b0e57613b0d613d5a565b5b828202905092915050565b6000613b2482613bcb565b9150613b2f83613bcb565b925082821015613b4257613b41613d5a565b5b828203905092915050565b6000613b5882613c07565b9150613b6383613c07565b925082821015613b7657613b75613d5a565b5b828203905092915050565b6000613b8c82613be7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c3e578082015181840152602081019050613c23565b83811115613c4d576000848401525b50505050565b6000613c5e82613c07565b91506000821415613c7257613c71613d5a565b5b600182039050919050565b60006002820490506001821680613c9557607f821691505b60208210811415613ca957613ca8613db8565b5b50919050565b613cb882613e16565b810181811067ffffffffffffffff82111715613cd757613cd6613de7565b5b80604052505050565b6000613ceb82613c07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d1e57613d1d613d5a565b5b600182019050919050565b6000613d3482613c07565b9150613d3f83613c07565b925082613d4f57613d4e613d89565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206d6178207065722077616c6c65742e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f454f41204f6e6c79000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f457863656564206d617820737570706c792e0000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f4e6f74206f70656e2e0000000000000000000000000000000000000000000000600082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b6144b781613b81565b81146144c257600080fd5b50565b6144ce81613b93565b81146144d957600080fd5b50565b6144e581613b9f565b81146144f057600080fd5b50565b6144fc81613c07565b811461450757600080fd5b5056fea26469706673582212208878b6e9958a6bd053f1ac932ac28343658a3042ee1ebf64d67f7372ccedcbfd64736f6c63430008040033

Deployed Bytecode Sourcemap

49181:2556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37738:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39464:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40998:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40561:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36299:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41848:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36930:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42053:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49385:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36462:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50826:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39287:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38164:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15073:103;;;;;;;;;;;;;:::i;:::-;;50059:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14425:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49950:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39619:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49425:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50295:396;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41266:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49720:85;;;;;;;;;;;;;:::i;:::-;;42273:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50940:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49312:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46688:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50701:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51251:106;;;;;;;;;;;;;:::i;:::-;;49815:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51367:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15331:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49352:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37738:370;37865:4;37910:25;37895:40;;;:11;:40;;;;:99;;;;37961:33;37946:48;;;:11;:48;;;;37895:99;:160;;;;38020:35;38005:50;;;:11;:50;;;;37895:160;:207;;;;38066:36;38090:11;38066:23;:36::i;:::-;37895:207;37881:221;;37738:370;;;:::o;39464:94::-;39518:13;39547:5;39540:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39464:94;:::o;40998:204::-;41066:7;41090:16;41098:7;41090;:16::i;:::-;41082:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;41172:15;:24;41188:7;41172:24;;;;;;;;;;;;;;;;;;;;;41165:31;;40998:204;;;:::o;40561:379::-;40630:13;40646:24;40662:7;40646:15;:24::i;:::-;40630:40;;40691:5;40685:11;;:2;:11;;;;40677:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40776:5;40760:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;40785:37;40802:5;40809:12;:10;:12::i;:::-;40785:16;:37::i;:::-;40760:62;40744:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;40906:28;40915:2;40919:7;40928:5;40906:8;:28::i;:::-;40561:379;;;:::o;36299:94::-;36352:7;36375:12;;36368:19;;36299:94;:::o;41848:142::-;41956:28;41966:4;41972:2;41976:7;41956:9;:28::i;:::-;41848:142;;;:::o;36930:744::-;37039:7;37074:16;37084:5;37074:9;:16::i;:::-;37066:5;:24;37058:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37136:22;37161:13;:11;:13::i;:::-;37136:38;;37181:19;37211:25;37261:9;37256:350;37280:14;37276:1;:18;37256:350;;;37310:31;37344:11;:14;37356:1;37344:14;;;;;;;;;;;37310:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37397:1;37371:28;;:9;:14;;;:28;;;37367:89;;37432:9;:14;;;37412:34;;37367:89;37489:5;37468:26;;:17;:26;;;37464:135;;;37526:5;37511:11;:20;37507:59;;;37553:1;37546:8;;;;;;;;;37507:59;37576:13;;;;;:::i;:::-;;;;37464:135;37256:350;37296:3;;;;;:::i;:::-;;;;37256:350;;;;37612:56;;;;;;;;;;:::i;:::-;;;;;;;;36930:744;;;;;:::o;42053:157::-;42165:39;42182:4;42188:2;42192:7;42165:39;;;;;;;;;;;;:16;:39::i;:::-;42053:157;;;:::o;49385:31::-;;;;:::o;36462:177::-;36529:7;36561:13;:11;:13::i;:::-;36553:5;:21;36545:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36628:5;36621:12;;36462:177;;;:::o;50826:106::-;14311:13;:11;:13::i;:::-;50917:7:::1;;50901:13;:23;;;;;;;:::i;:::-;;50826:106:::0;;:::o;39287:118::-;39351:7;39374:20;39386:7;39374:11;:20::i;:::-;:25;;;39367:32;;39287:118;;;:::o;38164:211::-;38228:7;38269:1;38252:19;;:5;:19;;;;38244:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38341:12;:19;38354:5;38341:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;38333:36;;38326:43;;38164:211;;;:::o;15073:103::-;14311:13;:11;:13::i;:::-;15138:30:::1;15165:1;15138:18;:30::i;:::-;15073:103::o:0;50059:226::-;49667:10;49654:23;;:9;:23;;;49646:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;14311:13:::1;:11;:13::i;:::-;50182:9:::2;;50152:26;50170:7;50152:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:39;;50144:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50240:4;50224:8;:13;50233:3;50224:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;50255:22;50265:3;50269:7;50255:9;:22::i;:::-;50059:226:::0;;:::o;14425:87::-;14471:7;14498:6;;;;;;;;;;;14491:13;;14425:87;:::o;49950:99::-;49667:10;49654:23;;:9;:23;;;49646:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;14311:13:::1;:11;:13::i;:::-;50035:6:::2;50027:5;:14;;;;49950:99:::0;:::o;39619:98::-;39675:13;39704:7;39697:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39619:98;:::o;49425:34::-;;;;:::o;50295:396::-;49667:10;49654:23;;:9;:23;;;49646:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;50368:4:::1;;;;;;;;;;;50360:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;50446:12;;50406:36;50435:6;50406:24;50419:10;50406:12;:24::i;:::-;:28;;:36;;;;:::i;:::-;:52;;50398:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;50535:9;;50506:25;50524:6;50506:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:38;;50498:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50601:17;50611:6;50601:5;;:9;;:17;;;;:::i;:::-;50588:9;:30;;50580:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;50654:29;50664:10;50676:6;50654:9;:29::i;:::-;50295:396:::0;:::o;41266:274::-;41369:12;:10;:12::i;:::-;41357:24;;:8;:24;;;;41349:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41466:8;41421:18;:32;41440:12;:10;:12::i;:::-;41421:32;;;;;;;;;;;;;;;:42;41454:8;41421:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;41515:8;41486:48;;41501:12;:10;:12::i;:::-;41486:48;;;41525:8;41486:48;;;;;;:::i;:::-;;;;;;;;41266:274;;:::o;49720:85::-;49667:10;49654:23;;:9;:23;;;49646:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;14311:13:::1;:11;:13::i;:::-;49793:4:::2;;;;;;;;;;;49792:5;49785:4;;:12;;;;;;;;;;;;;;;;;;49720:85::o:0;42273:311::-;42410:28;42420:4;42426:2;42430:7;42410:9;:28::i;:::-;42461:48;42484:4;42490:2;42494:7;42503:5;42461:22;:48::i;:::-;42445:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;42273:311;;;;:::o;50940:301::-;51013:13;51040:21;51064:13;51040:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51125:1;51107:7;51101:21;:25;51098:116;;;51173:7;51182:18;:7;:16;:18::i;:::-;51156:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51142:60;;;;;51098:116;51224:9;;;;;;;;;;;;;;;50940:301;;;;:::o;49312:31::-;;;;:::o;46688:43::-;;;;:::o;50701:115::-;50760:7;50787:21;50801:6;50787:13;:21::i;:::-;50780:28;;50701:115;;;:::o;51251:106::-;14311:13;:11;:13::i;:::-;51309:7:::1;:5;:7::i;:::-;51301:25;;:48;51327:21;51301:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51251:106::o:0;49815:127::-;49667:10;49654:23;;:9;:23;;;49646:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;14311:13:::1;:11;:13::i;:::-;49921::::2;49906:12;:28;;;;49815:127:::0;:::o;51367:365::-;51492:4;51565:42;51545:63;;:8;:63;;;:82;;;;;51612:8;:15;51621:5;51612:15;;;;;;;;;;;;;;;;;;;;;;;;;51545:82;51542:124;;;51650:4;51643:11;;;;51542:124;51685:39;51708:5;51715:8;51685:22;:39::i;:::-;51678:46;;51367:365;;;;;:::o;15331:201::-;14311:13;:11;:13::i;:::-;15440:1:::1;15420:22;;:8;:22;;;;15412:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15496:28;15515:8;15496:18;:28::i;:::-;15331:201:::0;:::o;49352:24::-;;;;;;;;;;;;;:::o;27279:157::-;27364:4;27403:25;27388:40;;;:11;:40;;;;27381:47;;27279:157;;;:::o;42823:105::-;42880:4;42910:12;;42900:7;:22;42893:29;;42823:105;;;:::o;12976:98::-;13029:7;13056:10;13049:17;;12976:98;:::o;46510:172::-;46634:2;46607:15;:24;46623:7;46607:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46668:7;46664:2;46648:28;;46657:5;46648:28;;;;;;;;;;;;46510:172;;;:::o;44875:1529::-;44972:35;45010:20;45022:7;45010:11;:20::i;:::-;44972:58;;45039:22;45081:13;:18;;;45065:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;45134:12;:10;:12::i;:::-;45110:36;;:20;45122:7;45110:11;:20::i;:::-;:36;;;45065:81;:142;;;;45157:50;45174:13;:18;;;45194:12;:10;:12::i;:::-;45157:16;:50::i;:::-;45065:142;45039:169;;45233:17;45217:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;45365:4;45343:26;;:13;:18;;;:26;;;45327:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;45454:1;45440:16;;:2;:16;;;;45432:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45507:43;45529:4;45535:2;45539:7;45548:1;45507:21;:43::i;:::-;45607:49;45624:1;45628:7;45637:13;:18;;;45607:8;:49::i;:::-;45695:1;45665:12;:18;45678:4;45665:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45731:1;45703:12;:16;45716:2;45703:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45762:43;;;;;;;;45777:2;45762:43;;;;;;45788:15;45762:43;;;;;45739:11;:20;45751:7;45739:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46033:19;46065:1;46055:7;:11;;;;:::i;:::-;46033:33;;46118:1;46077:43;;:11;:24;46089:11;46077:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;46073:236;;;46135:20;46143:11;46135:7;:20::i;:::-;46131:171;;;46195:97;;;;;;;;46222:13;:18;;;46195:97;;;;;;46253:13;:28;;;46195:97;;;;;46168:11;:24;46180:11;46168:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46131:171;46073:236;46341:7;46337:2;46322:27;;46331:4;46322:27;;;;;;;;;;;;46356:42;46377:4;46383:2;46387:7;46396:1;46356:20;:42::i;:::-;44875:1529;;;;;;:::o;14590:132::-;14665:12;:10;:12::i;:::-;14654:23;;:7;:5;:7::i;:::-;:23;;;14646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14590:132::o;38627:606::-;38703:21;;:::i;:::-;38744:16;38752:7;38744;:16::i;:::-;38736:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38816:26;38864:12;;38853:7;:23;38849:93;;38933:1;38918:12;;38908:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;38887:47;;38849:93;38955:12;38970:7;38955:22;;38950:212;38987:18;38979:4;:26;38950:212;;39024:31;39058:11;:17;39070:4;39058:17;;;;;;;;;;;39024:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39114:1;39088:28;;:9;:14;;;:28;;;39084:71;;39136:9;39129:16;;;;;;;39084:71;38950:212;39007:6;;;;;:::i;:::-;;;;38950:212;;;;39170:57;;;;;;;;;;:::i;:::-;;;;;;;;38627:606;;;;:::o;15692:191::-;15766:16;15785:6;;;;;;;;;;;15766:25;;15811:8;15802:6;;:17;;;;;;;;;;;;;;;;;;15866:8;15835:40;;15856:8;15835:40;;;;;;;;;;;;15692:191;;:::o;2876:98::-;2934:7;2965:1;2961;:5;;;;:::i;:::-;2954:12;;2876:98;;;;:::o;42934:::-;42999:27;43009:2;43013:8;42999:27;;;;;;;;;;;;:9;:27::i;:::-;42934:98;;:::o;3614:::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;47279:690::-;47416:4;47433:15;:2;:13;;;:15::i;:::-;47429:535;;;47488:2;47472:36;;;47509:12;:10;:12::i;:::-;47523:4;47529:7;47538:5;47472:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47459:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47720:1;47703:6;:13;:18;47699:215;;;47736:61;;;;;;;;;;:::i;:::-;;;;;;;;47699:215;47882:6;47876:13;47867:6;47863:2;47859:15;47852:38;47459:464;47604:45;;;47594:55;;;:6;:55;;;;47587:62;;;;;47429:535;47952:4;47945:11;;47279:690;;;;;;;:::o;10230:723::-;10286:13;10516:1;10507:5;:10;10503:53;;;10534:10;;;;;;;;;;;;;;;;;;;;;10503:53;10566:12;10581:5;10566:20;;10597:14;10622:78;10637:1;10629:4;:9;10622:78;;10655:8;;;;;:::i;:::-;;;;10686:2;10678:10;;;;;:::i;:::-;;;10622:78;;;10710:19;10742:6;10732:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10710:39;;10760:154;10776:1;10767:5;:10;10760:154;;10804:1;10794:11;;;;;:::i;:::-;;;10871:2;10863:5;:10;;;;:::i;:::-;10850:2;:24;;;;:::i;:::-;10837:39;;10820:6;10827;10820:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;10900:2;10891:11;;;;;:::i;:::-;;;10760:154;;;10938:6;10924:21;;;;;10230:723;;;;:::o;38381:240::-;38442:7;38491:1;38474:19;;:5;:19;;;;38458:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38582:12;:19;38595:5;38582:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;38574:41;;38567:48;;38381:240;;;:::o;41603:186::-;41725:4;41748:18;:25;41767:5;41748:25;;;;;;;;;;;;;;;:35;41774:8;41748:35;;;;;;;;;;;;;;;;;;;;;;;;;41741:42;;41603:186;;;;:::o;48431:141::-;;;;;:::o;48958:140::-;;;;;:::o;43371:1272::-;43476:20;43499:12;;43476:35;;43540:1;43526:16;;:2;:16;;;;43518:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43717:21;43725:12;43717:7;:21::i;:::-;43716:22;43708:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43799:12;;43787:8;:24;;43779:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43859:61;43889:1;43893:2;43897:12;43911:8;43859:21;:61::i;:::-;43929:30;43962:12;:16;43975:2;43962:16;;;;;;;;;;;;;;;43929:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44004:119;;;;;;;;44054:8;44024:11;:19;;;:39;;;;:::i;:::-;44004:119;;;;;;44107:8;44072:11;:24;;;:44;;;;:::i;:::-;44004:119;;;;;43985:12;:16;43998:2;43985:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44158:43;;;;;;;;44173:2;44158:43;;;;;;44184:15;44158:43;;;;;44130:11;:25;44142:12;44130:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44210:20;44233:12;44210:35;;44259:9;44254:281;44278:8;44274:1;:12;44254:281;;;44332:12;44328:2;44307:38;;44324:1;44307:38;;;;;;;;;;;;44372:59;44403:1;44407:2;44411:12;44425:5;44372:22;:59::i;:::-;44354:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;44513:14;;;;;:::i;:::-;;;;44288:3;;;;;:::i;:::-;;;;44254:281;;;;44558:12;44543;:27;;;;44577:60;44606:1;44610:2;44614:12;44628:8;44577:20;:60::i;:::-;43371:1272;;;;;;:::o;17123:326::-;17183:4;17440:1;17418:7;:19;;;:23;17411:30;;17123:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1234:352::-;1292:8;1302:6;1352:3;1345:4;1337:6;1333:17;1329:27;1319:2;;1370:1;1367;1360:12;1319:2;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:2;;;1468:1;1465;1458:12;1422:2;1505:4;1497:6;1493:17;1481:29;;1559:3;1551:4;1543:6;1539:17;1529:8;1525:32;1522:41;1519:2;;;1576:1;1573;1566:12;1519:2;1309:277;;;;;:::o;1592:139::-;1638:5;1676:6;1663:20;1654:29;;1692:33;1719:5;1692:33;:::i;:::-;1644:87;;;;:::o;1737:262::-;1796:6;1845:2;1833:9;1824:7;1820:23;1816:32;1813:2;;;1861:1;1858;1851:12;1813:2;1904:1;1929:53;1974:7;1965:6;1954:9;1950:22;1929:53;:::i;:::-;1919:63;;1875:117;1803:196;;;;:::o;2005:407::-;2073:6;2081;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2146:1;2143;2136:12;2098:2;2189:1;2214:53;2259:7;2250:6;2239:9;2235:22;2214:53;:::i;:::-;2204:63;;2160:117;2316:2;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2287:118;2088:324;;;;;:::o;2418:552::-;2495:6;2503;2511;2560:2;2548:9;2539:7;2535:23;2531:32;2528:2;;;2576:1;2573;2566:12;2528:2;2619:1;2644:53;2689:7;2680:6;2669:9;2665:22;2644:53;:::i;:::-;2634:63;;2590:117;2746:2;2772:53;2817:7;2808:6;2797:9;2793:22;2772:53;:::i;:::-;2762:63;;2717:118;2874:2;2900:53;2945:7;2936:6;2925:9;2921:22;2900:53;:::i;:::-;2890:63;;2845:118;2518:452;;;;;:::o;2976:809::-;3071:6;3079;3087;3095;3144:3;3132:9;3123:7;3119:23;3115:33;3112:2;;;3161:1;3158;3151:12;3112:2;3204:1;3229:53;3274:7;3265:6;3254:9;3250:22;3229:53;:::i;:::-;3219:63;;3175:117;3331:2;3357:53;3402:7;3393:6;3382:9;3378:22;3357:53;:::i;:::-;3347:63;;3302:118;3459:2;3485:53;3530:7;3521:6;3510:9;3506:22;3485:53;:::i;:::-;3475:63;;3430:118;3615:2;3604:9;3600:18;3587:32;3646:18;3638:6;3635:30;3632:2;;;3678:1;3675;3668:12;3632:2;3706:62;3760:7;3751:6;3740:9;3736:22;3706:62;:::i;:::-;3696:72;;3558:220;3102:683;;;;;;;:::o;3791:401::-;3856:6;3864;3913:2;3901:9;3892:7;3888:23;3884:32;3881:2;;;3929:1;3926;3919:12;3881:2;3972:1;3997:53;4042:7;4033:6;4022:9;4018:22;3997:53;:::i;:::-;3987:63;;3943:117;4099:2;4125:50;4167:7;4158:6;4147:9;4143:22;4125:50;:::i;:::-;4115:60;;4070:115;3871:321;;;;;:::o;4198:407::-;4266:6;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:2;;;4339:1;4336;4329:12;4291:2;4382:1;4407:53;4452:7;4443:6;4432:9;4428:22;4407:53;:::i;:::-;4397:63;;4353:117;4509:2;4535:53;4580:7;4571:6;4560:9;4556:22;4535:53;:::i;:::-;4525:63;;4480:118;4281:324;;;;;:::o;4611:260::-;4669:6;4718:2;4706:9;4697:7;4693:23;4689:32;4686:2;;;4734:1;4731;4724:12;4686:2;4777:1;4802:52;4846:7;4837:6;4826:9;4822:22;4802:52;:::i;:::-;4792:62;;4748:116;4676:195;;;;:::o;4877:282::-;4946:6;4995:2;4983:9;4974:7;4970:23;4966:32;4963:2;;;5011:1;5008;5001:12;4963:2;5054:1;5079:63;5134:7;5125:6;5114:9;5110:22;5079:63;:::i;:::-;5069:73;;5025:127;4953:206;;;;:::o;5165:395::-;5236:6;5244;5293:2;5281:9;5272:7;5268:23;5264:32;5261:2;;;5309:1;5306;5299:12;5261:2;5380:1;5369:9;5365:17;5352:31;5410:18;5402:6;5399:30;5396:2;;;5442:1;5439;5432:12;5396:2;5478:65;5535:7;5526:6;5515:9;5511:22;5478:65;:::i;:::-;5460:83;;;;5323:230;5251:309;;;;;:::o;5566:262::-;5625:6;5674:2;5662:9;5653:7;5649:23;5645:32;5642:2;;;5690:1;5687;5680:12;5642:2;5733:1;5758:53;5803:7;5794:6;5783:9;5779:22;5758:53;:::i;:::-;5748:63;;5704:117;5632:196;;;;:::o;5834:118::-;5921:24;5939:5;5921:24;:::i;:::-;5916:3;5909:37;5899:53;;:::o;5958:109::-;6039:21;6054:5;6039:21;:::i;:::-;6034:3;6027:34;6017:50;;:::o;6073:360::-;6159:3;6187:38;6219:5;6187:38;:::i;:::-;6241:70;6304:6;6299:3;6241:70;:::i;:::-;6234:77;;6320:52;6365:6;6360:3;6353:4;6346:5;6342:16;6320:52;:::i;:::-;6397:29;6419:6;6397:29;:::i;:::-;6392:3;6388:39;6381:46;;6163:270;;;;;:::o;6439:364::-;6527:3;6555:39;6588:5;6555:39;:::i;:::-;6610:71;6674:6;6669:3;6610:71;:::i;:::-;6603:78;;6690:52;6735:6;6730:3;6723:4;6716:5;6712:16;6690:52;:::i;:::-;6767:29;6789:6;6767:29;:::i;:::-;6762:3;6758:39;6751:46;;6531:272;;;;;:::o;6809:377::-;6915:3;6943:39;6976:5;6943:39;:::i;:::-;6998:89;7080:6;7075:3;6998:89;:::i;:::-;6991:96;;7096:52;7141:6;7136:3;7129:4;7122:5;7118:16;7096:52;:::i;:::-;7173:6;7168:3;7164:16;7157:23;;6919:267;;;;;:::o;7192:366::-;7334:3;7355:67;7419:2;7414:3;7355:67;:::i;:::-;7348:74;;7431:93;7520:3;7431:93;:::i;:::-;7549:2;7544:3;7540:12;7533:19;;7338:220;;;:::o;7564:366::-;7706:3;7727:67;7791:2;7786:3;7727:67;:::i;:::-;7720:74;;7803:93;7892:3;7803:93;:::i;:::-;7921:2;7916:3;7912:12;7905:19;;7710:220;;;:::o;7936:366::-;8078:3;8099:67;8163:2;8158:3;8099:67;:::i;:::-;8092:74;;8175:93;8264:3;8175:93;:::i;:::-;8293:2;8288:3;8284:12;8277:19;;8082:220;;;:::o;8308:366::-;8450:3;8471:67;8535:2;8530:3;8471:67;:::i;:::-;8464:74;;8547:93;8636:3;8547:93;:::i;:::-;8665:2;8660:3;8656:12;8649:19;;8454:220;;;:::o;8680:366::-;8822:3;8843:67;8907:2;8902:3;8843:67;:::i;:::-;8836:74;;8919:93;9008:3;8919:93;:::i;:::-;9037:2;9032:3;9028:12;9021:19;;8826:220;;;:::o;9052:366::-;9194:3;9215:67;9279:2;9274:3;9215:67;:::i;:::-;9208:74;;9291:93;9380:3;9291:93;:::i;:::-;9409:2;9404:3;9400:12;9393:19;;9198:220;;;:::o;9424:366::-;9566:3;9587:67;9651:2;9646:3;9587:67;:::i;:::-;9580:74;;9663:93;9752:3;9663:93;:::i;:::-;9781:2;9776:3;9772:12;9765:19;;9570:220;;;:::o;9796:365::-;9938:3;9959:66;10023:1;10018:3;9959:66;:::i;:::-;9952:73;;10034:93;10123:3;10034:93;:::i;:::-;10152:2;10147:3;10143:12;10136:19;;9942:219;;;:::o;10167:366::-;10309:3;10330:67;10394:2;10389:3;10330:67;:::i;:::-;10323:74;;10406:93;10495:3;10406:93;:::i;:::-;10524:2;10519:3;10515:12;10508:19;;10313:220;;;:::o;10539:366::-;10681:3;10702:67;10766:2;10761:3;10702:67;:::i;:::-;10695:74;;10778:93;10867:3;10778:93;:::i;:::-;10896:2;10891:3;10887:12;10880:19;;10685:220;;;:::o;10911:366::-;11053:3;11074:67;11138:2;11133:3;11074:67;:::i;:::-;11067:74;;11150:93;11239:3;11150:93;:::i;:::-;11268:2;11263:3;11259:12;11252:19;;11057:220;;;:::o;11283:366::-;11425:3;11446:67;11510:2;11505:3;11446:67;:::i;:::-;11439:74;;11522:93;11611:3;11522:93;:::i;:::-;11640:2;11635:3;11631:12;11624:19;;11429:220;;;:::o;11655:366::-;11797:3;11818:67;11882:2;11877:3;11818:67;:::i;:::-;11811:74;;11894:93;11983:3;11894:93;:::i;:::-;12012:2;12007:3;12003:12;11996:19;;11801:220;;;:::o;12027:366::-;12169:3;12190:67;12254:2;12249:3;12190:67;:::i;:::-;12183:74;;12266:93;12355:3;12266:93;:::i;:::-;12384:2;12379:3;12375:12;12368:19;;12173:220;;;:::o;12399:366::-;12541:3;12562:67;12626:2;12621:3;12562:67;:::i;:::-;12555:74;;12638:93;12727:3;12638:93;:::i;:::-;12756:2;12751:3;12747:12;12740:19;;12545:220;;;:::o;12771:366::-;12913:3;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13010:93;13099:3;13010:93;:::i;:::-;13128:2;13123:3;13119:12;13112:19;;12917:220;;;:::o;13143:366::-;13285:3;13306:67;13370:2;13365:3;13306:67;:::i;:::-;13299:74;;13382:93;13471:3;13382:93;:::i;:::-;13500:2;13495:3;13491:12;13484:19;;13289:220;;;:::o;13515:366::-;13657:3;13678:67;13742:2;13737:3;13678:67;:::i;:::-;13671:74;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13661:220;;;:::o;13887:366::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;14033:220;;;:::o;14259:366::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14405:220;;;:::o;14631:366::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14777:220;;;:::o;15003:366::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15149:220;;;:::o;15375:365::-;15517:3;15538:66;15602:1;15597:3;15538:66;:::i;:::-;15531:73;;15613:93;15702:3;15613:93;:::i;:::-;15731:2;15726:3;15722:12;15715:19;;15521:219;;;:::o;15746:366::-;15888:3;15909:67;15973:2;15968:3;15909:67;:::i;:::-;15902:74;;15985:93;16074:3;15985:93;:::i;:::-;16103:2;16098:3;16094:12;16087:19;;15892:220;;;:::o;16118:366::-;16260:3;16281:67;16345:2;16340:3;16281:67;:::i;:::-;16274:74;;16357:93;16446:3;16357:93;:::i;:::-;16475:2;16470:3;16466:12;16459:19;;16264:220;;;:::o;16490:118::-;16577:24;16595:5;16577:24;:::i;:::-;16572:3;16565:37;16555:53;;:::o;16614:435::-;16794:3;16816:95;16907:3;16898:6;16816:95;:::i;:::-;16809:102;;16928:95;17019:3;17010:6;16928:95;:::i;:::-;16921:102;;17040:3;17033:10;;16798:251;;;;;:::o;17055:222::-;17148:4;17186:2;17175:9;17171:18;17163:26;;17199:71;17267:1;17256:9;17252:17;17243:6;17199:71;:::i;:::-;17153:124;;;;:::o;17283:640::-;17478:4;17516:3;17505:9;17501:19;17493:27;;17530:71;17598:1;17587:9;17583:17;17574:6;17530:71;:::i;:::-;17611:72;17679:2;17668:9;17664:18;17655:6;17611:72;:::i;:::-;17693;17761:2;17750:9;17746:18;17737:6;17693:72;:::i;:::-;17812:9;17806:4;17802:20;17797:2;17786:9;17782:18;17775:48;17840:76;17911:4;17902:6;17840:76;:::i;:::-;17832:84;;17483:440;;;;;;;:::o;17929:210::-;18016:4;18054:2;18043:9;18039:18;18031:26;;18067:65;18129:1;18118:9;18114:17;18105:6;18067:65;:::i;:::-;18021:118;;;;:::o;18145:313::-;18258:4;18296:2;18285:9;18281:18;18273:26;;18345:9;18339:4;18335:20;18331:1;18320:9;18316:17;18309:47;18373:78;18446:4;18437:6;18373:78;:::i;:::-;18365:86;;18263:195;;;;:::o;18464:419::-;18630:4;18668:2;18657:9;18653:18;18645:26;;18717:9;18711:4;18707:20;18703:1;18692:9;18688:17;18681:47;18745:131;18871:4;18745:131;:::i;:::-;18737:139;;18635:248;;;:::o;18889:419::-;19055:4;19093:2;19082:9;19078:18;19070:26;;19142:9;19136:4;19132:20;19128:1;19117:9;19113:17;19106:47;19170:131;19296:4;19170:131;:::i;:::-;19162:139;;19060:248;;;:::o;19314:419::-;19480:4;19518:2;19507:9;19503:18;19495:26;;19567:9;19561:4;19557:20;19553:1;19542:9;19538:17;19531:47;19595:131;19721:4;19595:131;:::i;:::-;19587:139;;19485:248;;;:::o;19739:419::-;19905:4;19943:2;19932:9;19928:18;19920:26;;19992:9;19986:4;19982:20;19978:1;19967:9;19963:17;19956:47;20020:131;20146:4;20020:131;:::i;:::-;20012:139;;19910:248;;;:::o;20164:419::-;20330:4;20368:2;20357:9;20353:18;20345:26;;20417:9;20411:4;20407:20;20403:1;20392:9;20388:17;20381:47;20445:131;20571:4;20445:131;:::i;:::-;20437:139;;20335:248;;;:::o;20589:419::-;20755:4;20793:2;20782:9;20778:18;20770:26;;20842:9;20836:4;20832:20;20828:1;20817:9;20813:17;20806:47;20870:131;20996:4;20870:131;:::i;:::-;20862:139;;20760:248;;;:::o;21014:419::-;21180:4;21218:2;21207:9;21203:18;21195:26;;21267:9;21261:4;21257:20;21253:1;21242:9;21238:17;21231:47;21295:131;21421:4;21295:131;:::i;:::-;21287:139;;21185:248;;;:::o;21439:419::-;21605:4;21643:2;21632:9;21628:18;21620:26;;21692:9;21686:4;21682:20;21678:1;21667:9;21663:17;21656:47;21720:131;21846:4;21720:131;:::i;:::-;21712:139;;21610:248;;;:::o;21864:419::-;22030:4;22068:2;22057:9;22053:18;22045:26;;22117:9;22111:4;22107:20;22103:1;22092:9;22088:17;22081:47;22145:131;22271:4;22145:131;:::i;:::-;22137:139;;22035:248;;;:::o;22289:419::-;22455:4;22493:2;22482:9;22478:18;22470:26;;22542:9;22536:4;22532:20;22528:1;22517:9;22513:17;22506:47;22570:131;22696:4;22570:131;:::i;:::-;22562:139;;22460:248;;;:::o;22714:419::-;22880:4;22918:2;22907:9;22903:18;22895:26;;22967:9;22961:4;22957:20;22953:1;22942:9;22938:17;22931:47;22995:131;23121:4;22995:131;:::i;:::-;22987:139;;22885:248;;;:::o;23139:419::-;23305:4;23343:2;23332:9;23328:18;23320:26;;23392:9;23386:4;23382:20;23378:1;23367:9;23363:17;23356:47;23420:131;23546:4;23420:131;:::i;:::-;23412:139;;23310:248;;;:::o;23564:419::-;23730:4;23768:2;23757:9;23753:18;23745:26;;23817:9;23811:4;23807:20;23803:1;23792:9;23788:17;23781:47;23845:131;23971:4;23845:131;:::i;:::-;23837:139;;23735:248;;;:::o;23989:419::-;24155:4;24193:2;24182:9;24178:18;24170:26;;24242:9;24236:4;24232:20;24228:1;24217:9;24213:17;24206:47;24270:131;24396:4;24270:131;:::i;:::-;24262:139;;24160:248;;;:::o;24414:419::-;24580:4;24618:2;24607:9;24603:18;24595:26;;24667:9;24661:4;24657:20;24653:1;24642:9;24638:17;24631:47;24695:131;24821:4;24695:131;:::i;:::-;24687:139;;24585:248;;;:::o;24839:419::-;25005:4;25043:2;25032:9;25028:18;25020:26;;25092:9;25086:4;25082:20;25078:1;25067:9;25063:17;25056:47;25120:131;25246:4;25120:131;:::i;:::-;25112:139;;25010:248;;;:::o;25264:419::-;25430:4;25468:2;25457:9;25453:18;25445:26;;25517:9;25511:4;25507:20;25503:1;25492:9;25488:17;25481:47;25545:131;25671:4;25545:131;:::i;:::-;25537:139;;25435:248;;;:::o;25689:419::-;25855:4;25893:2;25882:9;25878:18;25870:26;;25942:9;25936:4;25932:20;25928:1;25917:9;25913:17;25906:47;25970:131;26096:4;25970:131;:::i;:::-;25962:139;;25860:248;;;:::o;26114:419::-;26280:4;26318:2;26307:9;26303:18;26295:26;;26367:9;26361:4;26357:20;26353:1;26342:9;26338:17;26331:47;26395:131;26521:4;26395:131;:::i;:::-;26387:139;;26285:248;;;:::o;26539:419::-;26705:4;26743:2;26732:9;26728:18;26720:26;;26792:9;26786:4;26782:20;26778:1;26767:9;26763:17;26756:47;26820:131;26946:4;26820:131;:::i;:::-;26812:139;;26710:248;;;:::o;26964:419::-;27130:4;27168:2;27157:9;27153:18;27145:26;;27217:9;27211:4;27207:20;27203:1;27192:9;27188:17;27181:47;27245:131;27371:4;27245:131;:::i;:::-;27237:139;;27135:248;;;:::o;27389:419::-;27555:4;27593:2;27582:9;27578:18;27570:26;;27642:9;27636:4;27632:20;27628:1;27617:9;27613:17;27606:47;27670:131;27796:4;27670:131;:::i;:::-;27662:139;;27560:248;;;:::o;27814:419::-;27980:4;28018:2;28007:9;28003:18;27995:26;;28067:9;28061:4;28057:20;28053:1;28042:9;28038:17;28031:47;28095:131;28221:4;28095:131;:::i;:::-;28087:139;;27985:248;;;:::o;28239:419::-;28405:4;28443:2;28432:9;28428:18;28420:26;;28492:9;28486:4;28482:20;28478:1;28467:9;28463:17;28456:47;28520:131;28646:4;28520:131;:::i;:::-;28512:139;;28410:248;;;:::o;28664:419::-;28830:4;28868:2;28857:9;28853:18;28845:26;;28917:9;28911:4;28907:20;28903:1;28892:9;28888:17;28881:47;28945:131;29071:4;28945:131;:::i;:::-;28937:139;;28835:248;;;:::o;29089:222::-;29182:4;29220:2;29209:9;29205:18;29197:26;;29233:71;29301:1;29290:9;29286:17;29277:6;29233:71;:::i;:::-;29187:124;;;;:::o;29317:129::-;29351:6;29378:20;;:::i;:::-;29368:30;;29407:33;29435:4;29427:6;29407:33;:::i;:::-;29358:88;;;:::o;29452:75::-;29485:6;29518:2;29512:9;29502:19;;29492:35;:::o;29533:307::-;29594:4;29684:18;29676:6;29673:30;29670:2;;;29706:18;;:::i;:::-;29670:2;29744:29;29766:6;29744:29;:::i;:::-;29736:37;;29828:4;29822;29818:15;29810:23;;29599:241;;;:::o;29846:98::-;29897:6;29931:5;29925:12;29915:22;;29904:40;;;:::o;29950:99::-;30002:6;30036:5;30030:12;30020:22;;30009:40;;;:::o;30055:168::-;30138:11;30172:6;30167:3;30160:19;30212:4;30207:3;30203:14;30188:29;;30150:73;;;;:::o;30229:169::-;30313:11;30347:6;30342:3;30335:19;30387:4;30382:3;30378:14;30363:29;;30325:73;;;;:::o;30404:148::-;30506:11;30543:3;30528:18;;30518:34;;;;:::o;30558:273::-;30598:3;30617:20;30635:1;30617:20;:::i;:::-;30612:25;;30651:20;30669:1;30651:20;:::i;:::-;30646:25;;30773:1;30737:34;30733:42;30730:1;30727:49;30724:2;;;30779:18;;:::i;:::-;30724:2;30823:1;30820;30816:9;30809:16;;30602:229;;;;:::o;30837:305::-;30877:3;30896:20;30914:1;30896:20;:::i;:::-;30891:25;;30930:20;30948:1;30930:20;:::i;:::-;30925:25;;31084:1;31016:66;31012:74;31009:1;31006:81;31003:2;;;31090:18;;:::i;:::-;31003:2;31134:1;31131;31127:9;31120:16;;30881:261;;;;:::o;31148:185::-;31188:1;31205:20;31223:1;31205:20;:::i;:::-;31200:25;;31239:20;31257:1;31239:20;:::i;:::-;31234:25;;31278:1;31268:2;;31283:18;;:::i;:::-;31268:2;31325:1;31322;31318:9;31313:14;;31190:143;;;;:::o;31339:348::-;31379:7;31402:20;31420:1;31402:20;:::i;:::-;31397:25;;31436:20;31454:1;31436:20;:::i;:::-;31431:25;;31624:1;31556:66;31552:74;31549:1;31546:81;31541:1;31534:9;31527:17;31523:105;31520:2;;;31631:18;;:::i;:::-;31520:2;31679:1;31676;31672:9;31661:20;;31387:300;;;;:::o;31693:191::-;31733:4;31753:20;31771:1;31753:20;:::i;:::-;31748:25;;31787:20;31805:1;31787:20;:::i;:::-;31782:25;;31826:1;31823;31820:8;31817:2;;;31831:18;;:::i;:::-;31817:2;31876:1;31873;31869:9;31861:17;;31738:146;;;;:::o;31890:191::-;31930:4;31950:20;31968:1;31950:20;:::i;:::-;31945:25;;31984:20;32002:1;31984:20;:::i;:::-;31979:25;;32023:1;32020;32017:8;32014:2;;;32028:18;;:::i;:::-;32014:2;32073:1;32070;32066:9;32058:17;;31935:146;;;;:::o;32087:96::-;32124:7;32153:24;32171:5;32153:24;:::i;:::-;32142:35;;32132:51;;;:::o;32189:90::-;32223:7;32266:5;32259:13;32252:21;32241:32;;32231:48;;;:::o;32285:149::-;32321:7;32361:66;32354:5;32350:78;32339:89;;32329:105;;;:::o;32440:118::-;32477:7;32517:34;32510:5;32506:46;32495:57;;32485:73;;;:::o;32564:126::-;32601:7;32641:42;32634:5;32630:54;32619:65;;32609:81;;;:::o;32696:77::-;32733:7;32762:5;32751:16;;32741:32;;;:::o;32779:154::-;32863:6;32858:3;32853;32840:30;32925:1;32916:6;32911:3;32907:16;32900:27;32830:103;;;:::o;32939:307::-;33007:1;33017:113;33031:6;33028:1;33025:13;33017:113;;;33116:1;33111:3;33107:11;33101:18;33097:1;33092:3;33088:11;33081:39;33053:2;33050:1;33046:10;33041:15;;33017:113;;;33148:6;33145:1;33142:13;33139:2;;;33228:1;33219:6;33214:3;33210:16;33203:27;33139:2;32988:258;;;;:::o;33252:171::-;33291:3;33314:24;33332:5;33314:24;:::i;:::-;33305:33;;33360:4;33353:5;33350:15;33347:2;;;33368:18;;:::i;:::-;33347:2;33415:1;33408:5;33404:13;33397:20;;33295:128;;;:::o;33429:320::-;33473:6;33510:1;33504:4;33500:12;33490:22;;33557:1;33551:4;33547:12;33578:18;33568:2;;33634:4;33626:6;33622:17;33612:27;;33568:2;33696;33688:6;33685:14;33665:18;33662:38;33659:2;;;33715:18;;:::i;:::-;33659:2;33480:269;;;;:::o;33755:281::-;33838:27;33860:4;33838:27;:::i;:::-;33830:6;33826:40;33968:6;33956:10;33953:22;33932:18;33920:10;33917:34;33914:62;33911:2;;;33979:18;;:::i;:::-;33911:2;34019:10;34015:2;34008:22;33798:238;;;:::o;34042:233::-;34081:3;34104:24;34122:5;34104:24;:::i;:::-;34095:33;;34150:66;34143:5;34140:77;34137:2;;;34220:18;;:::i;:::-;34137:2;34267:1;34260:5;34256:13;34249:20;;34085:190;;;:::o;34281:176::-;34313:1;34330:20;34348:1;34330:20;:::i;:::-;34325:25;;34364:20;34382:1;34364:20;:::i;:::-;34359:25;;34403:1;34393:2;;34408:18;;:::i;:::-;34393:2;34449:1;34446;34442:9;34437:14;;34315:142;;;;:::o;34463:180::-;34511:77;34508:1;34501:88;34608:4;34605:1;34598:15;34632:4;34629:1;34622:15;34649:180;34697:77;34694:1;34687:88;34794:4;34791:1;34784:15;34818:4;34815:1;34808:15;34835:180;34883:77;34880:1;34873:88;34980:4;34977:1;34970:15;35004:4;35001:1;34994:15;35021:180;35069:77;35066:1;35059:88;35166:4;35163:1;35156:15;35190:4;35187:1;35180:15;35207:102;35248:6;35299:2;35295:7;35290:2;35283:5;35279:14;35275:28;35265:38;;35255:54;;;:::o;35315:221::-;35455:34;35451:1;35443:6;35439:14;35432:58;35524:4;35519:2;35511:6;35507:15;35500:29;35421:115;:::o;35542:172::-;35682:24;35678:1;35670:6;35666:14;35659:48;35648:66;:::o;35720:225::-;35860:34;35856:1;35848:6;35844:14;35837:58;35929:8;35924:2;35916:6;35912:15;35905:33;35826:119;:::o;35951:229::-;36091:34;36087:1;36079:6;36075:14;36068:58;36160:12;36155:2;36147:6;36143:15;36136:37;36057:123;:::o;36186:222::-;36326:34;36322:1;36314:6;36310:14;36303:58;36395:5;36390:2;36382:6;36378:15;36371:30;36292:116;:::o;36414:224::-;36554:34;36550:1;36542:6;36538:14;36531:58;36623:7;36618:2;36610:6;36606:15;36599:32;36520:118;:::o;36644:236::-;36784:34;36780:1;36772:6;36768:14;36761:58;36853:19;36848:2;36840:6;36836:15;36829:44;36750:130;:::o;36886:158::-;37026:10;37022:1;37014:6;37010:14;37003:34;36992:52;:::o;37050:244::-;37190:34;37186:1;37178:6;37174:14;37167:58;37259:27;37254:2;37246:6;37242:15;37235:52;37156:138;:::o;37300:230::-;37440:34;37436:1;37428:6;37424:14;37417:58;37509:13;37504:2;37496:6;37492:15;37485:38;37406:124;:::o;37536:168::-;37676:20;37672:1;37664:6;37660:14;37653:44;37642:62;:::o;37710:225::-;37850:34;37846:1;37838:6;37834:14;37827:58;37919:8;37914:2;37906:6;37902:15;37895:33;37816:119;:::o;37941:182::-;38081:34;38077:1;38069:6;38065:14;38058:58;38047:76;:::o;38129:176::-;38269:28;38265:1;38257:6;38253:14;38246:52;38235:70;:::o;38311:237::-;38451:34;38447:1;38439:6;38435:14;38428:58;38520:20;38515:2;38507:6;38503:15;38496:45;38417:131;:::o;38554:221::-;38694:34;38690:1;38682:6;38678:14;38671:58;38763:4;38758:2;38750:6;38746:15;38739:29;38660:115;:::o;38781:238::-;38921:34;38917:1;38909:6;38905:14;38898:58;38990:21;38985:2;38977:6;38973:15;38966:46;38887:132;:::o;39025:179::-;39165:31;39161:1;39153:6;39149:14;39142:55;39131:73;:::o;39210:220::-;39350:34;39346:1;39338:6;39334:14;39327:58;39419:3;39414:2;39406:6;39402:15;39395:28;39316:114;:::o;39436:233::-;39576:34;39572:1;39564:6;39560:14;39553:58;39645:16;39640:2;39632:6;39628:15;39621:41;39542:127;:::o;39675:234::-;39815:34;39811:1;39803:6;39799:14;39792:58;39884:17;39879:2;39871:6;39867:15;39860:42;39781:128;:::o;39915:232::-;40055:34;40051:1;40043:6;40039:14;40032:58;40124:15;40119:2;40111:6;40107:15;40100:40;40021:126;:::o;40153:159::-;40293:11;40289:1;40281:6;40277:14;40270:35;40259:53;:::o;40318:221::-;40458:34;40454:1;40446:6;40442:14;40435:58;40527:4;40522:2;40514:6;40510:15;40503:29;40424:115;:::o;40545:169::-;40685:21;40681:1;40673:6;40669:14;40662:45;40651:63;:::o;40720:122::-;40793:24;40811:5;40793:24;:::i;:::-;40786:5;40783:35;40773:2;;40832:1;40829;40822:12;40773:2;40763:79;:::o;40848:116::-;40918:21;40933:5;40918:21;:::i;:::-;40911:5;40908:32;40898:2;;40954:1;40951;40944:12;40898:2;40888:76;:::o;40970:120::-;41042:23;41059:5;41042:23;:::i;:::-;41035:5;41032:34;41022:2;;41080:1;41077;41070:12;41022:2;41012:78;:::o;41096:122::-;41169:24;41187:5;41169:24;:::i;:::-;41162:5;41159:35;41149:2;;41208:1;41205;41198:12;41149:2;41139:79;:::o

Swarm Source

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