ETH Price: $3,139.56 (-4.72%)
 

Overview

Max Total Supply

469 SENSTH

Holders

239

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 SENSTH
0xCF55CB793189b46aDBE95A5831081d51fB739324
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:
ERC721

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.13;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
     * with further edits by Uniswap Labs also under MIT license.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
    unchecked {
        // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
        // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
        // variables such that product = prod1 * 2^256 + prod0.
        uint256 prod0; // Least significant 256 bits of the product
        uint256 prod1; // Most significant 256 bits of the product
        assembly {
            let mm := mulmod(x, y, not(0))
            prod0 := mul(x, y)
            prod1 := sub(sub(mm, prod0), lt(mm, prod0))
        }

        // Handle non-overflow cases, 256 by 256 division.
        if (prod1 == 0) {
            return prod0 / denominator;
        }

        // Make sure the result is less than 2^256. Also prevents denominator == 0.
        require(denominator > prod1);

        ///////////////////////////////////////////////
        // 512 by 256 division.
        ///////////////////////////////////////////////

        // Make division exact by subtracting the remainder from [prod1 prod0].
        uint256 remainder;
        assembly {
        // Compute remainder using mulmod.
            remainder := mulmod(x, y, denominator)

        // Subtract 256 bit number from 512 bit number.
            prod1 := sub(prod1, gt(remainder, prod0))
            prod0 := sub(prod0, remainder)
        }

        // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
        // See https://cs.stackexchange.com/q/138556/92363.

        // Does not overflow because the denominator cannot be zero at this stage in the function.
        uint256 twos = denominator & (~denominator + 1);
        assembly {
        // Divide denominator by twos.
            denominator := div(denominator, twos)

        // Divide [prod1 prod0] by twos.
            prod0 := div(prod0, twos)

        // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
            twos := add(div(sub(0, twos), twos), 1)
        }

        // Shift in bits from prod1 into prod0.
        prod0 |= prod1 * twos;

        // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
        // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
        // four bits. That is, denominator * inv = 1 mod 2^4.
        uint256 inverse = (3 * denominator) ^ 2;

        // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
        // in modular arithmetic, doubling the correct bits in each step.
        inverse *= 2 - denominator * inverse; // inverse mod 2^8
        inverse *= 2 - denominator * inverse; // inverse mod 2^16
        inverse *= 2 - denominator * inverse; // inverse mod 2^32
        inverse *= 2 - denominator * inverse; // inverse mod 2^64
        inverse *= 2 - denominator * inverse; // inverse mod 2^128
        inverse *= 2 - denominator * inverse; // inverse mod 2^256

        // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
        // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
        // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
        // is no longer required.
        result = prod0 * inverse;
        return result;
    }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator,
        Rounding rounding
    ) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
    unchecked {
        result = (result + a / result) >> 1;
        result = (result + a / result) >> 1;
        result = (result + a / result) >> 1;
        result = (result + a / result) >> 1;
        result = (result + a / result) >> 1;
        result = (result + a / result) >> 1;
        result = (result + a / result) >> 1;
        return min(result, a / result);
    }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
    unchecked {
        uint256 result = sqrt(a);
        return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
    }
    }

    /**
     * @dev Return the log in base 2, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
    unchecked {
        if (value >> 128 > 0) {
            value >>= 128;
            result += 128;
        }
        if (value >> 64 > 0) {
            value >>= 64;
            result += 64;
        }
        if (value >> 32 > 0) {
            value >>= 32;
            result += 32;
        }
        if (value >> 16 > 0) {
            value >>= 16;
            result += 16;
        }
        if (value >> 8 > 0) {
            value >>= 8;
            result += 8;
        }
        if (value >> 4 > 0) {
            value >>= 4;
            result += 4;
        }
        if (value >> 2 > 0) {
            value >>= 2;
            result += 2;
        }
        if (value >> 1 > 0) {
            result += 1;
        }
    }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
    unchecked {
        uint256 result = log2(value);
        return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
    }
    }

    /**
     * @dev Return the log in base 10, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
    unchecked {
        if (value >= 10**64) {
            value /= 10**64;
            result += 64;
        }
        if (value >= 10**32) {
            value /= 10**32;
            result += 32;
        }
        if (value >= 10**16) {
            value /= 10**16;
            result += 16;
        }
        if (value >= 10**8) {
            value /= 10**8;
            result += 8;
        }
        if (value >= 10**4) {
            value /= 10**4;
            result += 4;
        }
        if (value >= 10**2) {
            value /= 10**2;
            result += 2;
        }
        if (value >= 10**1) {
            result += 1;
        }
    }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
    unchecked {
        uint256 result = log10(value);
        return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);
    }
    }

    /**
     * @dev Return the log in base 256, rounded down, of a positive value.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
    unchecked {
        if (value >> 128 > 0) {
            value >>= 128;
            result += 16;
        }
        if (value >> 64 > 0) {
            value >>= 64;
            result += 8;
        }
        if (value >> 32 > 0) {
            value >>= 32;
            result += 4;
        }
        if (value >> 16 > 0) {
            value >>= 16;
            result += 2;
        }
        if (value >> 8 > 0) {
            result += 1;
        }
    }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
    unchecked {
        uint256 result = log256(value);
        return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
    }
    }
}

library Strings {
    bytes16 private constant _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) {
    unchecked {
        uint256 length = Math.log10(value) + 1;
        string memory buffer = new string(length);
        uint256 ptr;
        /// @solidity memory-safe-assembly
        assembly {
            ptr := add(buffer, add(32, length))
        }
        while (true) {
            ptr--;
            /// @solidity memory-safe-assembly
            assembly {
                mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
            }
            value /= 10;
            if (value == 0) break;
        }
        return buffer;
    }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
    unchecked {
        return toHexString(value, Math.log256(value) + 1);
    }
    }

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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://consensys.net/diligence/blog/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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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);
        }
    }
}

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

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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * 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);
}



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


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

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

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);
    }
}
interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

/**
 * @title  OperatorFilterer
 * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
 *         registrant's entries in the OperatorFilterRegistry.
 * @dev    This smart contract is meant to be inherited by token contracts so they can use the following:
 *         - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
 *         - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
 */
abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
    IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        // Allow spending tokens from addresses with balance
        // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
        // from an EOA.
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }

    function _checkFilterOperator(address operator) internal view virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}

/**
 * @title  DefaultOperatorFilterer
 * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.
 */
abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    // Price per mint
    uint256 private _pricePerMint = 1.42 ether;

    // Max tokens
    uint256 constant _maxTokens = 469;

    // FP allocation
    uint256 constant _fpMaxTokens = 157;

    // Current tokens
    uint256 private _currTokens = 0;

    // minted from FP
    uint256 private _fpCurrTokens = 0;

    // Is sale
    bool private _isSale = false;

    //funds address
    address constant _fundsAddress = 0x202b8934e2E14cAF19B9a0aA70D4c5047599aDb1;

    //FP minters
    mapping(address => uint256) private _fpWallets;

    //Mint event
    event Mint(address indexed minter, uint256 indexed tokenId, uint256 indexed pricePerToken);

    //script
    string constant _script = "let seed=parseInt(hash.slice(0,16)),e=document.createElement('canvas'),t=document.createElement('style');function f(){return seed^=seed<<13,seed^=seed>>17,seed^=seed<<5,(seed<0?1+~seed:seed)%1e3/1e3}t.innerText='body {background: black;height:100vh;width:100vw;margin:0;padding:0;overflow:hidden;display:flex;justify-content:center;align-items:center;}',document.head.appendChild(t);let n,d,a,l,c,i=new Uint8Array(1024),r=f();c=r<.25?parseInt(57*f())+148:r<.7?parseInt(59*f())+89:parseInt(59*f())+30;let s,o,b=f()<.4?1:0;function h(){let t=new URLSearchParams(location.search).has('fullscreen');if(n=t?window.innerWidth:parseInt(window.innerWidth/c)*c,d=n/(16/9),d>window.innerHeight)if(d=window.innerHeight,t)n=d*(16/9);else{n=parseInt(d*(16/9)/c)*c,d=n/(16/9)}n=parseInt(n),d=parseInt(d),d-=d%2==1?1:0,a=d/(b+1),l=n/c,e.height=d,e.width=n}r=f(),s=r<.7?.05:r<.9?.1:.15,r=f(),o=r<.05?.1:r<.85?.3:.5,h(),window.addEventListener('resize',(()=>{h(),w(),B()}));let F;r=f(),F=r<.03?0:r<.07?1:r<.11?2:r<.16?3:r<.22?4:r<.28?5:r<.34?6:r<.41?7:r<.48?8:r<.55?9:r<.64?10:r<.73?11:r<.82?12:r<.91?13:14;let p=[[['#6baed6','#5fa4ce'],['#4292c6','#3586ba'],['#08519c','#034488'],['#08306b','#04285e'],['#c6dbef','#b1cae2'],['#deebf7','#cbddee'],['#fee0d2','#f1cab7'],['#fb6a4a','#e85838'],['#ef3b2c','#df2e1f'],['#a50f15','#8c080d'],['#67000d','#4b000a']],[['#10002b','#10002b'],['#FF005C','#FF005C'],['#bc00dd','#bc00dd'],['#c0fdff','#c0fdff'],['#d51fa5','#d51fa5'],['#13F4EF','#13F4EF'],['#FFFFFF','#FFFFFF']],[['#0d0d0d','#0d0d0d'],['#1f1f1f','#1f1f1f'],['#313131','#313131'],['#434444','#434444'],['#212121','#212121'],['#737373','#737373'],['#f9f9f7','#f9f9f7'],['#f4f3ef','#f4f3ef'],['#efeee8','#efeee8'],['#eae8e0','#eae8e0'],['#e5e3d9','#e5e3d9'],['#d6d4c9','#d6d4c9']],[['#282A36','#282A36'],['#6ECCDD','#6ECCDD'],['#EC1D24','#EC1D24'],['#F76B8B','#F76B8B']],[['#f9b294','#f9b294'],['#f2727f','#f2727f'],['#c06c86','#c06c86'],['#6d5c7e','#6d5c7e'],['#325d7f','#325d7f']],[['#99b998','#99b998'],['#fdceaa','#fdceaa'],['#f4837d','#f4837d'],['#eb4960','#eb4960'],['#27363b','#27363b']],[['#162039','#162039'],['#143b5a','#143b5a'],['#234a75','#234a75'],['#25538e','#25538e'],['#7f6b53','#7f6b53'],['#b39e8d','#b39e8d']],[['#251B37','#251B37'],['#372948','#372948'],['#FFCACA','#FFCACA'],['#FFECEF','#FFECEF'],['#675083','#675083'],['#e19c9c','#e19c9c']],[['#8f00ff','#8f00ff'],['#adff02','#adff02'],['#ff006d','#ff006d'],['#ff7d00','#ff7d00'],['#ffdd00','#ffdd00'],['#01befe','#01befe']],[['#ff6663','#ff6663'],['#e0ff4f','#e0ff4f'],['#22162b','#22162b'],['#e8e2fa','#e8e2fa'],['#723dcb','#723dcb'],['#45159c','#45159c']],[['#062105','#062105'],['#0c8900','#0c8900'],['#2bc20e','#2bc20e'],['#9cff00','#9cff00'],['#39ff13','#39ff13'],['#262729','#262729']],[['#780116','#780116'],['#981e1d','#981e1d'],['#c32f27','#c32f27'],['#d8572a','#d8572a'],['#db7c26','#db7c26'],['#f7b538','#f7b538']],[['#F9546B','#F9546B'],['#FC7651','#FC7651'],['#FFDB60','#FFDB60'],['#42CFCA','#42CFCA'],['#009F93','#009F93']],[['#A8A7A7','#A8A7A7'],['#CC527A','#CC527A'],['#E8175D','#E8175D'],['#474747','#474747'],['#363636','#363636']],[['#7dd6f6','#7dd6f6'],['#797ef6','#797ef6'],['#4adede','#4adede'],['#1aa7ec','#1aa7ec'],['#1e2f97','#1e2f97']]][F];f()<.4&&function(){let e=[],t=[];for(let t=0;t<p.length;t++)e.push(...p[t]);for(let n=0;n<p.length;n++){let n=[];for(let t=0;t<2;t++){let t=parseInt(f()*e.length);n.push(e[t]),e.splice(t,1)}t.push(n)}p=t}();let u=p[parseInt(f()*p.length)][parseInt(2*f())];const C=e.getContext('2d');let g=f(),A=0;function w(){g<.2?A=l/1.3:g<.7&&(A=l/13)}w();let I,m=[],E=[];0==b?E.push(!(f()<.65)):f()<.65?E.push(!1,!0):E.push(!0,!1),r=f(),I=r<.1?2:r<.35?3:r<.65?4:r<.85?5:6;for(let e=0;e<=b;e++){let t=[];for(let n=0;n<c;n++){let n=parseInt(f()*(I-1))+1,d=1,a=1,l=[[],[]];for(let t=0;t<I;t++){let c=p[parseInt(f()*p.length)];if(c[0]!==c[1]){let e=parseInt(c[0].slice(1,3),16),t=parseInt(c[0].slice(3,5),16),f=parseInt(c[0].slice(5,7),16),n=parseInt(c[1].slice(1,3),16),d=parseInt(c[1].slice(3,5),16),a=parseInt(c[1].slice(5,7),16);c=[`rgba(${e},${t},${f},`,`rgba(${n},${d},${a},`]}else{let e=parseInt(c[0].slice(1,3),16),t=parseInt(c[0].slice(3,5),16),f=parseInt(c[0].slice(5,7),16);c=[`rgba(${e},${t},${f},`]}if(t<n){let a;a=t==n-1?d:d*f(),d-=a;for(let t=0;t<c.length;t++)c[t]+=`${E[e]?1:o})`;l[0].push([c,a])}else{let n;n=t==I-1?a:a*f(),a-=n;for(let t=0;t<c.length;t++)c[t]+=`${E[e]?o:1})`;l[1].push([c,n])}}t.push(l)}m.push(t)}B(),document.body.appendChild(e);let y=window.AudioContext||window.webkitAudioContext;function D(e,t,f,n){if(e.length>1){let d=C.createLinearGradient(t,f,t,f+n);return d.addColorStop(0,e[0]),d.addColorStop(1,e[1]),d}return e[0]}function B(){C.fillStyle=u,C.fillRect(0,0,n,d),C.lineWidth=A;for(let e=0;e<=b;e++){let t=e*a;for(let f=0;f<c;f++){let n=m[e][f],d=i[f]/255,c=Math.ceil(s*a),r=d*a-c,o=a-r-c,b=c;E[e]&&(o=r,r=a-o-c,b=d/s>1?c:c*d/s);let h=0,F=0,p=f*l;if(o>0)for(let f=0;f<n[1].length;f++){let d=Math.ceil(o*n[1][f][1]),c=h+t;c+d>(e+1)*a&&(d=(e+1)*a-c,d<0&&(d=0)),C.fillStyle=D(n[1][f][0],p,c,d),C.fillRect(p,c,l,d),A&&C.strokeRect(p,c,l,d),h+=d}if(r>0)for(let f=0;f<n[0].length;f++){let d=Math.ceil(r*n[0][f][1]),c=F+h+t+b;c+d>(e+1)*a&&(d=(e+1)*a-c,d<0&&(d=0)),C.fillStyle=D(n[0][f][0],p,c,d),C.fillRect(p,c,l,d),A&&C.strokeRect(p,c,l,d),F+=d}}}}navigator.mediaDevices.getUserMedia({audio:!0}).then((e=>{let t=new y,f=t.createAnalyser();f.fftSize=2048,f.maxDecibels=-10,t.createMediaStreamSource(e).connect(f),requestAnimationFrame((function e(){f.getByteFrequencyData(i),B(),requestAnimationFrame(e)}))})).catch((e=>{console.log(e),alert('Microphone not found!\\nAudio capturing is recommended to fully enjoy Sensthesia')}));";

    //Hashes
    mapping(uint256 => bytes32) private _hashes;

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

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _ownerOf(tokenId);
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

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

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

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

    /**
     * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist
     */
    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
        return _owners[tokenId];
    }

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

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

    function mint() external payable {
        require(_isSale,"Sale is not active!");

        uint256 realPricePerMint = _pricePerMint;
        if(hasFreeMint(_msgSender())){
            realPricePerMint = 0;
            _fpWallets[_msgSender()]--;
            _fpCurrTokens++;
        }

        require((realPricePerMint == 0 && _currTokens < _maxTokens) || ((_currTokens - _fpCurrTokens) < (_maxTokens - _fpMaxTokens)),"Minted out!");

        require(msg.value >= realPricePerMint, "Minting below price!");

        uint256 refund = msg.value - realPricePerMint;
        if (refund > 0) {
            (bool success, ) = payable(_msgSender()).call{value:refund}("");
            require(success, "Refund tx failed.");
            }
        uint256 remaining = msg.value - refund;
        if(remaining > 0) {
            (bool success, ) = payable(_fundsAddress).call{value:remaining}("");
            require(success, "Tx to funds wallet failed.");
        }

        uint256 tokenId = _safeMint(_msgSender());
        emit Mint(_msgSender(), tokenId, realPricePerMint);
    }


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

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to) internal virtual returns (uint256 _tokenId) {

    unchecked {
        // Will not overflow unless all 2**256 token ids are minted to the same owner.
        // Given that tokens are minted one by one, it is impossible in practice that
        // this ever happens. Might change if we allow batch minting.
        // The ERC fails to describe this case.
        _balances[to] += 1;
    }
        uint256 tokenId = _currTokens;
        _owners[tokenId] = to;
        _currTokens++;
        bytes32 hash = keccak256(abi.encodePacked(_currTokens, block.number, blockhash(block.number - 3), _msgSender(), block.timestamp, block.coinbase));
        _hashes[tokenId] = hash;

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

        return tokenId;
    }

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


        // Check that tokenId was not transferred by `_beforeTokenTransfer` hook
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");

        // Clear approvals from the previous owner
        delete _tokenApprovals[tokenId];

    unchecked {
        // `_balances[from]` cannot overflow for the same reason as described in `_burn`:
        // `from`'s balance is the number of token held, which is at least one before the current
        // transfer.
        // `_balances[to]` could overflow in the conditions described in `_mint`. That would require
        // all 2**256 token ids to be minted, which in practice is impossible.
        _balances[from] -= 1;
        _balances[to] += 1;
    }
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

    }

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

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

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

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

    function setIsSale(bool isSale) external onlyOwner {
        _isSale = isSale;
    }

    function getIsSale() public view returns (bool) {
        return _isSale;
    }

    function setPricePerMint(uint256 pricePerMint) external onlyOwner {
        _pricePerMint = pricePerMint;
    }

    function getPricePerMint() public view returns (uint256){
        return _pricePerMint;
    }

    function setFpWallets(address[] memory wallets, uint256[] memory allocations) external onlyOwner {
        require(wallets.length==allocations.length, "Array mismatch!");
        for(uint i=0;i<wallets.length;i++){
            _fpWallets[wallets[i]] = allocations[i];
        }
    }

    function getScript(uint256 tokenId) public view returns (string memory){
        _requireMinted(tokenId);
        return string(abi.encodePacked("let hash='",Strings.toHexString(uint256(_hashes[tokenId]), 32),"';", _script));
    }

    function getHash(uint256 tokenId) public view returns (bytes32){
        _requireMinted(tokenId);
        return _hashes[tokenId];
    }

    function totalSupply() public view returns (uint256){
        return _currTokens;
    }

    function getMaxSupply() public pure returns (uint256){
        return _maxTokens;
    }

    function fpTotalSupply() public view returns (uint256){
        return _fpCurrTokens;
    }

    function getFpMaxSupply() public pure returns (uint256){
        return _fpMaxTokens;
    }

    function hasFreeMint(address wallet) public view returns (bool){
        return (_fpCurrTokens < _fpMaxTokens && _fpWallets[wallet] > 0);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"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":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pricePerToken","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fpTotalSupply","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":[],"name":"getFpMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIsSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPricePerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getScript","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"hasFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"allocations","type":"uint256[]"}],"name":"setFpWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSale","type":"bool"}],"name":"setIsSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pricePerMint","type":"uint256"}],"name":"setPricePerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526713b4da79fd0e0000600755600060085560006009556000600a60006101000a81548160ff0219169083151502179055503480156200004257600080fd5b506040516200675f3803806200675f833981810160405281019062000068919062000930565b733cc6cdda760b79bafa08df41ecfa224f810dceb660016200009f62000093620002e860201b60201c565b620002f060201b60201c565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002945780156200015a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b815260040162000120929190620009fa565b600060405180830381600087803b1580156200013b57600080fd5b505af115801562000150573d6000803e3d6000fd5b5050505062000293565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000214576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620001da929190620009fa565b600060405180830381600087803b158015620001f557600080fd5b505af11580156200020a573d6000803e3d6000fd5b5050505062000292565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200025d919062000a27565b600060405180830381600087803b1580156200027857600080fd5b505af11580156200028d573d6000803e3d6000fd5b505050505b5b5b50508160019081620002a7919062000c8f565b508060029081620002b9919062000c8f565b50620002df73202b8934e2e14caf19b9a0aa70d4c5047599adb1620003b460201b60201c565b5050506200118a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080620003c8836200043960201b60201c565b9050620003ee6000848360405180602001604052806000815250620005d160201b60201c565b62000430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004279062000dfd565b60405180910390fd5b80915050919050565b60006001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060006008549050826003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060086000815480929190620004f79062000e4e565b919050555060006008544360034362000511919062000e9b565b4062000522620002e860201b60201c565b42416040516020016200053b9695949392919062000fbd565b60405160208183030381529060405280519060200120905080600c600084815260200190815260200160002081905550818473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48192505050919050565b6000620005ff8473ffffffffffffffffffffffffffffffffffffffff166200077a60201b620015751760201c565b156200076d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000631620002e860201b60201c565b8786866040518563ffffffff1660e01b8152600401620006559493929190620010a7565b6020604051808303816000875af19250505080156200069457506040513d601f19601f8201168201806040525081019062000691919062001158565b60015b6200071c573d8060008114620006c7576040519150601f19603f3d011682016040523d82523d6000602084013e620006cc565b606091505b50600081510362000714576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070b9062000dfd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000772565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200080682620007bb565b810181811067ffffffffffffffff82111715620008285762000827620007cc565b5b80604052505050565b60006200083d6200079d565b90506200084b8282620007fb565b919050565b600067ffffffffffffffff8211156200086e576200086d620007cc565b5b6200087982620007bb565b9050602081019050919050565b60005b83811015620008a657808201518184015260208101905062000889565b60008484015250505050565b6000620008c9620008c38462000850565b62000831565b905082815260208101848484011115620008e857620008e7620007b6565b5b620008f584828562000886565b509392505050565b600082601f830112620009155762000914620007b1565b5b815162000927848260208601620008b2565b91505092915050565b600080604083850312156200094a5762000949620007a7565b5b600083015167ffffffffffffffff8111156200096b576200096a620007ac565b5b6200097985828601620008fd565b925050602083015167ffffffffffffffff8111156200099d576200099c620007ac565b5b620009ab85828601620008fd565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009e282620009b5565b9050919050565b620009f481620009d5565b82525050565b600060408201905062000a116000830185620009e9565b62000a206020830184620009e9565b9392505050565b600060208201905062000a3e6000830184620009e9565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a9757607f821691505b60208210810362000aad5762000aac62000a4f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ad8565b62000b23868362000ad8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b7062000b6a62000b648462000b3b565b62000b45565b62000b3b565b9050919050565b6000819050919050565b62000b8c8362000b4f565b62000ba462000b9b8262000b77565b84845462000ae5565b825550505050565b600090565b62000bbb62000bac565b62000bc881848462000b81565b505050565b5b8181101562000bf05762000be460008262000bb1565b60018101905062000bce565b5050565b601f82111562000c3f5762000c098162000ab3565b62000c148462000ac8565b8101602085101562000c24578190505b62000c3c62000c338562000ac8565b83018262000bcd565b50505b505050565b600082821c905092915050565b600062000c646000198460080262000c44565b1980831691505092915050565b600062000c7f838362000c51565b9150826002028217905092915050565b62000c9a8262000a44565b67ffffffffffffffff81111562000cb65762000cb5620007cc565b5b62000cc2825462000a7e565b62000ccf82828562000bf4565b600060209050601f83116001811462000d07576000841562000cf2578287015190505b62000cfe858262000c71565b86555062000d6e565b601f19841662000d178662000ab3565b60005b8281101562000d415784890151825560018201915060208501945060208101905062000d1a565b8683101562000d61578489015162000d5d601f89168262000c51565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062000de560328362000d76565b915062000df28262000d87565b604082019050919050565b6000602082019050818103600083015262000e188162000dd6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e5b8262000b3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000e905762000e8f62000e1f565b5b600182019050919050565b600062000ea88262000b3b565b915062000eb58362000b3b565b925082820390508181111562000ed05762000ecf62000e1f565b5b92915050565b6000819050919050565b62000ef562000eef8262000b3b565b62000ed6565b82525050565b6000819050919050565b6000819050919050565b62000f2462000f1e8262000efb565b62000f05565b82525050565b60008160601b9050919050565b600062000f448262000f2a565b9050919050565b600062000f588262000f37565b9050919050565b62000f7462000f6e82620009d5565b62000f4b565b82525050565b600062000f8782620009b5565b9050919050565b600062000f9b8262000f37565b9050919050565b62000fb762000fb18262000f7a565b62000f8e565b82525050565b600062000fcb828962000ee0565b60208201915062000fdd828862000ee0565b60208201915062000fef828762000f0f565b60208201915062001001828662000f5f565b60148201915062001013828562000ee0565b60208201915062001025828462000fa2565b601482019150819050979650505050505050565b620010448162000b3b565b82525050565b600081519050919050565b600082825260208201905092915050565b600062001073826200104a565b6200107f818562001055565b93506200109181856020860162000886565b6200109c81620007bb565b840191505092915050565b6000608082019050620010be6000830187620009e9565b620010cd6020830186620009e9565b620010dc604083018562001039565b8181036060830152620010f0818462001066565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200113281620010fb565b81146200113e57600080fd5b50565b600081519050620011528162001127565b92915050565b600060208284031215620011715762001170620007a7565b5b6000620011818482850162001141565b91505092915050565b6155c5806200119a6000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063b88d4fde11610095578063ea146e5111610064578063ea146e511461067d578063f2fde38b146106ba578063f64c8655146106e3578063f92cb15d1461070e576101cd565b8063b88d4fde1461059d578063c87b56dd146105c6578063d5cde1f214610603578063e985e9c514610640576101cd565b806384bce7d8116100d157806384bce7d8146104f35780638da5cb5b1461051e57806395d89b4114610549578063a22cb46514610574576101cd565b806370a082311461047457806370ee8aaf146104b1578063715018a6146104dc576101cd565b806318160ddd1161016f57806342842e0e1161013e57806342842e0e146103a65780634c0f38c2146103cf5780636352211e146103fa5780636b2fafa914610437576101cd565b806318160ddd146102fc57806323b872dd14610327578063348412041461035057806341f434341461037b576101cd565b806306fdde03116101ab57806306fdde0314610261578063081812fc1461028c578063095ea7b3146102c95780631249c58b146102f2576101cd565b806301466bc0146101d257806301ffc9a7146101fb578063039b2ed714610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061278d565b610737565b005b34801561020757600080fd5b50610222600480360381019061021d9190612812565b610749565b60405161022f919061285a565b60405180910390f35b34801561024457600080fd5b5061025f600480360381019061025a91906128a1565b61082b565b005b34801561026d57600080fd5b50610276610850565b604051610283919061295e565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061278d565b6108e2565b6040516102c091906129c1565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190612a08565b610928565b005b6102fa610a4a565b005b34801561030857600080fd5b50610311610df9565b60405161031e9190612a57565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612a72565b610e03565b005b34801561035c57600080fd5b50610365610ea2565b6040516103729190612a57565b60405180910390f35b34801561038757600080fd5b50610390610eac565b60405161039d9190612b24565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190612a72565b610ebe565b005b3480156103db57600080fd5b506103e4610f1d565b6040516103f19190612a57565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061278d565b610f27565b60405161042e91906129c1565b60405180910390f35b34801561044357600080fd5b5061045e6004803603810190610459919061278d565b610fad565b60405161046b9190612b58565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190612b73565b610fd3565b6040516104a89190612a57565b60405180910390f35b3480156104bd57600080fd5b506104c661108a565b6040516104d39190612a57565b60405180910390f35b3480156104e857600080fd5b506104f1611094565b005b3480156104ff57600080fd5b506105086110a8565b604051610515919061285a565b60405180910390f35b34801561052a57600080fd5b506105336110bf565b60405161054091906129c1565b60405180910390f35b34801561055557600080fd5b5061055e6110e8565b60405161056b919061295e565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190612ba0565b61117a565b005b3480156105a957600080fd5b506105c460048036038101906105bf9190612d15565b61119b565b005b3480156105d257600080fd5b506105ed60048036038101906105e8919061278d565b61123c565b6040516105fa919061295e565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190612b73565b6112a4565b604051610637919061285a565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190612d98565b6112fe565b604051610674919061285a565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f919061278d565b611392565b6040516106b1919061295e565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190612b73565b611401565b005b3480156106ef57600080fd5b506106f8611484565b6040516107059190612a57565b60405180910390f35b34801561071a57600080fd5b5061073560048036038101906107309190612f63565b61148d565b005b61073f611598565b8060078190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610824575061082382611616565b5b9050919050565b610833611598565b80600a60006101000a81548160ff02191690831515021790555050565b60606001805461085f9061300a565b80601f016020809104026020016040519081016040528092919081815260200182805461088b9061300a565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b60006108ed82611680565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610932816116cb565b600061093d83610f27565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a4906130ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109cc6117c8565b73ffffffffffffffffffffffffffffffffffffffff1614806109fb57506109fa816109f56117c8565b6112fe565b5b610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a319061313f565b60405180910390fd5b610a4484846117d0565b50505050565b600a60009054906101000a900460ff16610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906131ab565b60405180910390fd5b60006007549050610ab0610aab6117c8565b6112a4565b15610b2e5760009050600b6000610ac56117c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610b10906131fa565b919050555060096000815480929190610b2890613223565b91905055505b600081148015610b4157506101d5600854105b80610b685750609d6101d5610b56919061326b565b600954600854610b66919061326b565b105b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e906132eb565b60405180910390fd5b80341015610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190613357565b60405180910390fd5b60008134610bf8919061326b565b90506000811115610cb8576000610c0d6117c8565b73ffffffffffffffffffffffffffffffffffffffff1682604051610c30906133a8565b60006040518083038185875af1925050503d8060008114610c6d576040519150601f19603f3d011682016040523d82523d6000602084013e610c72565b606091505b5050905080610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90613409565b60405180910390fd5b505b60008134610cc6919061326b565b90506000811115610d9357600073202b8934e2e14caf19b9a0aa70d4c5047599adb173ffffffffffffffffffffffffffffffffffffffff1682604051610d0b906133a8565b60006040518083038185875af1925050503d8060008114610d48576040519150601f19603f3d011682016040523d82523d6000602084013e610d4d565b606091505b5050905080610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613475565b60405180910390fd5b505b6000610da5610da06117c8565b611889565b90508381610db16117c8565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f60405160405180910390a450505050565b6000600854905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e4157610e40336116cb565b5b610e52610e4c6117c8565b836118fb565b610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8890613507565b60405180910390fd5b610e9c848484611990565b50505050565b6000600954905090565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610efc57610efb336116cb565b5b610f178484846040518060200160405280600081525061119b565b50505050565b60006101d5905090565b600080610f3383611c6f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90613573565b60405180910390fd5b80915050919050565b6000610fb882611680565b600c6000838152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613605565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600754905090565b61109c611598565b6110a66000611cac565b565b6000600a60009054906101000a900460ff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110f79061300a565b80601f01602080910402602001604051908101604052809291908181526020018280546111239061300a565b80156111705780601f1061114557610100808354040283529160200191611170565b820191906000526020600020905b81548152906001019060200180831161115357829003601f168201915b5050505050905090565b81611184816116cb565b61119661118f6117c8565b8484611d70565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111d9576111d8336116cb565b5b6111ea6111e46117c8565b846118fb565b611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613507565b60405180910390fd5b61123585858585611edc565b5050505050565b606061124782611680565b6000611251611f38565b90506000815111611271576040518060200160405280600081525061129c565b8061127b84611f67565b60405160200161128c929190613661565b6040516020818303038152906040525b915050919050565b6000609d6009541080156112f757506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606061139d82611680565b6113be600c60008481526020019081526020016000205460001c6020612035565b6040518061166001604052806116248152602001613f6c61162491396040516020016113eb92919061371d565b6040516020818303038152906040529050919050565b611409611598565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f906137c9565b60405180910390fd5b61148181611cac565b50565b6000609d905090565b611495611598565b80518251146114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090613835565b60405180910390fd5b60005b8251811015611570578181815181106114f8576114f7613855565b5b6020026020010151600b600085848151811061151757611516613855565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061156890613223565b9150506114dc565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6115a06117c8565b73ffffffffffffffffffffffffffffffffffffffff166115be6110bf565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b906138d0565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61168981612271565b6116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf90613573565b60405180910390fd5b50565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156117c5576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016117429291906138f0565b602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611783919061392e565b6117c457806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016117bb91906129c1565b60405180910390fd5b5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661184383610f27565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611895836122b2565b90506118b3600084836040518060200160405280600081525061243c565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e9906139cd565b60405180910390fd5b80915050919050565b60008061190783610f27565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611949575061194881856112fe565b5b8061198757508373ffffffffffffffffffffffffffffffffffffffff1661196f846108e2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119b082610f27565b73ffffffffffffffffffffffffffffffffffffffff1614611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613a5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90613af1565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16611a9582610f27565b73ffffffffffffffffffffffffffffffffffffffff1614611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613a5f565b60405180910390fd5b6005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590613b5d565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecf919061285a565b60405180910390a3505050565b611ee7848484611990565b611ef38484848461243c565b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f29906139cd565b60405180910390fd5b50505050565b6060611f43306125c3565b604051602001611f539190613c15565b604051602081830303815290604052905090565b606060006001611f76846125f0565b01905060008167ffffffffffffffff811115611f9557611f94612bea565b5b6040519080825280601f01601f191660200182016040528015611fc75781602001600182028036833780820191505090505b509050600082602001820190505b60011561202a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161201e5761201d613c42565b5b04945060008503611fd5575b819350505050919050565b6060600060028360026120489190613c71565b6120529190613cb3565b67ffffffffffffffff81111561206b5761206a612bea565b5b6040519080825280601f01601f19166020018201604052801561209d5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106120d5576120d4613855565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061213957612138613855565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026121799190613c71565b6121839190613cb3565b90505b6001811115612223577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106121c5576121c4613855565b5b1a60f81b8282815181106121dc576121db613855565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061221c906131fa565b9050612186565b5060008414612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90613d33565b60405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1661229383611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060006008549050826003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600081548092919061236e90613223565b9190505550600060085443600343612386919061326b565b4061238f6117c8565b42416040516020016123a696959493929190613e18565b60405160208183030381529060405280519060200120905080600c600084815260200190815260200160002081905550818473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48192505050919050565b600061245d8473ffffffffffffffffffffffffffffffffffffffff16611575565b156125b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124866117c8565b8786866040518563ffffffff1660e01b81526004016124a89493929190613edd565b6020604051808303816000875af19250505080156124e457506040513d601f19601f820116820180604052508101906124e19190613f3e565b60015b612566573d8060008114612514576040519150601f19603f3d011682016040523d82523d6000602084013e612519565b606091505b50600081510361255e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612555906139cd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125bb565b600190505b949350505050565b60606125e98273ffffffffffffffffffffffffffffffffffffffff16601460ff16612035565b9050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061264e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161264457612643613c42565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061268b576d04ee2d6d415b85acef8100000000838161268157612680613c42565b5b0492506020810190505b662386f26fc1000083106126ba57662386f26fc1000083816126b0576126af613c42565b5b0492506010810190505b6305f5e10083106126e3576305f5e10083816126d9576126d8613c42565b5b0492506008810190505b61271083106127085761271083816126fe576126fd613c42565b5b0492506004810190505b6064831061272b576064838161272157612720613c42565b5b0492506002810190505b600a831061273a576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61276a81612757565b811461277557600080fd5b50565b60008135905061278781612761565b92915050565b6000602082840312156127a3576127a261274d565b5b60006127b184828501612778565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6127ef816127ba565b81146127fa57600080fd5b50565b60008135905061280c816127e6565b92915050565b6000602082840312156128285761282761274d565b5b6000612836848285016127fd565b91505092915050565b60008115159050919050565b6128548161283f565b82525050565b600060208201905061286f600083018461284b565b92915050565b61287e8161283f565b811461288957600080fd5b50565b60008135905061289b81612875565b92915050565b6000602082840312156128b7576128b661274d565b5b60006128c58482850161288c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129085780820151818401526020810190506128ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000612930826128ce565b61293a81856128d9565b935061294a8185602086016128ea565b61295381612914565b840191505092915050565b600060208201905081810360008301526129788184612925565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129ab82612980565b9050919050565b6129bb816129a0565b82525050565b60006020820190506129d660008301846129b2565b92915050565b6129e5816129a0565b81146129f057600080fd5b50565b600081359050612a02816129dc565b92915050565b60008060408385031215612a1f57612a1e61274d565b5b6000612a2d858286016129f3565b9250506020612a3e85828601612778565b9150509250929050565b612a5181612757565b82525050565b6000602082019050612a6c6000830184612a48565b92915050565b600080600060608486031215612a8b57612a8a61274d565b5b6000612a99868287016129f3565b9350506020612aaa868287016129f3565b9250506040612abb86828701612778565b9150509250925092565b6000819050919050565b6000612aea612ae5612ae084612980565b612ac5565b612980565b9050919050565b6000612afc82612acf565b9050919050565b6000612b0e82612af1565b9050919050565b612b1e81612b03565b82525050565b6000602082019050612b396000830184612b15565b92915050565b6000819050919050565b612b5281612b3f565b82525050565b6000602082019050612b6d6000830184612b49565b92915050565b600060208284031215612b8957612b8861274d565b5b6000612b97848285016129f3565b91505092915050565b60008060408385031215612bb757612bb661274d565b5b6000612bc5858286016129f3565b9250506020612bd68582860161288c565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c2282612914565b810181811067ffffffffffffffff82111715612c4157612c40612bea565b5b80604052505050565b6000612c54612743565b9050612c608282612c19565b919050565b600067ffffffffffffffff821115612c8057612c7f612bea565b5b612c8982612914565b9050602081019050919050565b82818337600083830152505050565b6000612cb8612cb384612c65565b612c4a565b905082815260208101848484011115612cd457612cd3612be5565b5b612cdf848285612c96565b509392505050565b600082601f830112612cfc57612cfb612be0565b5b8135612d0c848260208601612ca5565b91505092915050565b60008060008060808587031215612d2f57612d2e61274d565b5b6000612d3d878288016129f3565b9450506020612d4e878288016129f3565b9350506040612d5f87828801612778565b925050606085013567ffffffffffffffff811115612d8057612d7f612752565b5b612d8c87828801612ce7565b91505092959194509250565b60008060408385031215612daf57612dae61274d565b5b6000612dbd858286016129f3565b9250506020612dce858286016129f3565b9150509250929050565b600067ffffffffffffffff821115612df357612df2612bea565b5b602082029050602081019050919050565b600080fd5b6000612e1c612e1784612dd8565b612c4a565b90508083825260208201905060208402830185811115612e3f57612e3e612e04565b5b835b81811015612e685780612e5488826129f3565b845260208401935050602081019050612e41565b5050509392505050565b600082601f830112612e8757612e86612be0565b5b8135612e97848260208601612e09565b91505092915050565b600067ffffffffffffffff821115612ebb57612eba612bea565b5b602082029050602081019050919050565b6000612edf612eda84612ea0565b612c4a565b90508083825260208201905060208402830185811115612f0257612f01612e04565b5b835b81811015612f2b5780612f178882612778565b845260208401935050602081019050612f04565b5050509392505050565b600082601f830112612f4a57612f49612be0565b5b8135612f5a848260208601612ecc565b91505092915050565b60008060408385031215612f7a57612f7961274d565b5b600083013567ffffffffffffffff811115612f9857612f97612752565b5b612fa485828601612e72565b925050602083013567ffffffffffffffff811115612fc557612fc4612752565b5b612fd185828601612f35565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061302257607f821691505b60208210810361303557613034612fdb565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006130976021836128d9565b91506130a28261303b565b604082019050919050565b600060208201905081810360008301526130c68161308a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613129603d836128d9565b9150613134826130cd565b604082019050919050565b600060208201905081810360008301526131588161311c565b9050919050565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b60006131956013836128d9565b91506131a08261315f565b602082019050919050565b600060208201905081810360008301526131c481613188565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061320582612757565b915060008203613218576132176131cb565b5b600182039050919050565b600061322e82612757565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132605761325f6131cb565b5b600182019050919050565b600061327682612757565b915061328183612757565b9250828203905081811115613299576132986131cb565b5b92915050565b7f4d696e746564206f757421000000000000000000000000000000000000000000600082015250565b60006132d5600b836128d9565b91506132e08261329f565b602082019050919050565b60006020820190508181036000830152613304816132c8565b9050919050565b7f4d696e74696e672062656c6f7720707269636521000000000000000000000000600082015250565b60006133416014836128d9565b915061334c8261330b565b602082019050919050565b6000602082019050818103600083015261337081613334565b9050919050565b600081905092915050565b50565b6000613392600083613377565b915061339d82613382565b600082019050919050565b60006133b382613385565b9150819050919050565b7f526566756e64207478206661696c65642e000000000000000000000000000000600082015250565b60006133f36011836128d9565b91506133fe826133bd565b602082019050919050565b60006020820190508181036000830152613422816133e6565b9050919050565b7f547820746f2066756e64732077616c6c6574206661696c65642e000000000000600082015250565b600061345f601a836128d9565b915061346a82613429565b602082019050919050565b6000602082019050818103600083015261348e81613452565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006134f1602d836128d9565b91506134fc82613495565b604082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061355d6018836128d9565b915061356882613527565b602082019050919050565b6000602082019050818103600083015261358c81613550565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006135ef6029836128d9565b91506135fa82613593565b604082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b600081905092915050565b600061363b826128ce565b6136458185613625565b93506136558185602086016128ea565b80840191505092915050565b600061366d8285613630565b91506136798284613630565b91508190509392505050565b7f6c657420686173683d2700000000000000000000000000000000000000000000600082015250565b60006136bb600a83613625565b91506136c682613685565b600a82019050919050565b7f273b000000000000000000000000000000000000000000000000000000000000600082015250565b6000613707600283613625565b9150613712826136d1565b600282019050919050565b6000613728826136ae565b91506137348285613630565b915061373f826136fa565b915061374b8284613630565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137b36026836128d9565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f4172726179206d69736d61746368210000000000000000000000000000000000600082015250565b600061381f600f836128d9565b915061382a826137e9565b602082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ba6020836128d9565b91506138c582613884565b602082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b600060408201905061390560008301856129b2565b61391260208301846129b2565b9392505050565b60008151905061392881612875565b92915050565b6000602082840312156139445761394361274d565b5b600061395284828501613919565b91505092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006139b76032836128d9565b91506139c28261395b565b604082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613a496025836128d9565b9150613a54826139ed565b604082019050919050565b60006020820190508181036000830152613a7881613a3c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613adb6024836128d9565b9150613ae682613a7f565b604082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b476019836128d9565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f68747470733a2f2f746f6b656e2e7a65626c6f636b732e636f6d2f0000000000600082015250565b6000613bb3601b83613625565b9150613bbe82613b7d565b601b82019050919050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613bff600183613625565b9150613c0a82613bc9565b600182019050919050565b6000613c2082613ba6565b9150613c2c8284613630565b9150613c3782613bf2565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7c82612757565b9150613c8783612757565b9250828202613c9581612757565b91508282048414831517613cac57613cab6131cb565b5b5092915050565b6000613cbe82612757565b9150613cc983612757565b9250828201905080821115613ce157613ce06131cb565b5b92915050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613d1d6020836128d9565b9150613d2882613ce7565b602082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b6000819050919050565b613d6e613d6982612757565b613d53565b82525050565b6000819050919050565b613d8f613d8a82612b3f565b613d74565b82525050565b60008160601b9050919050565b6000613dad82613d95565b9050919050565b6000613dbf82613da2565b9050919050565b613dd7613dd2826129a0565b613db4565b82525050565b6000613de882612980565b9050919050565b6000613dfa82613da2565b9050919050565b613e12613e0d82613ddd565b613def565b82525050565b6000613e248289613d5d565b602082019150613e348288613d5d565b602082019150613e448287613d7e565b602082019150613e548286613dc6565b601482019150613e648285613d5d565b602082019150613e748284613e01565b601482019150819050979650505050505050565b600081519050919050565b600082825260208201905092915050565b6000613eaf82613e88565b613eb98185613e93565b9350613ec98185602086016128ea565b613ed281612914565b840191505092915050565b6000608082019050613ef260008301876129b2565b613eff60208301866129b2565b613f0c6040830185612a48565b8181036060830152613f1e8184613ea4565b905095945050505050565b600081519050613f38816127e6565b92915050565b600060208284031215613f5457613f5361274d565b5b6000613f6284828501613f29565b9150509291505056fe6c657420736565643d7061727365496e7428686173682e736c69636528302c313629292c653d646f63756d656e742e637265617465456c656d656e74282763616e76617327292c743d646f63756d656e742e637265617465456c656d656e7428277374796c6527293b66756e6374696f6e206628297b72657475726e20736565645e3d736565643c3c31332c736565645e3d736565643e3e31372c736565645e3d736565643c3c352c28736565643c303f312b7e736565643a7365656429253165332f3165337d742e696e6e6572546578743d27626f6479207b6261636b67726f756e643a20626c61636b3b6865696768743a31303076683b77696474683a31303076773b6d617267696e3a303b70616464696e673a303b6f766572666c6f773a68696464656e3b646973706c61793a666c65783b6a7573746966792d636f6e74656e743a63656e7465723b616c69676e2d6974656d733a63656e7465723b7d272c646f63756d656e742e686561642e617070656e644368696c642874293b6c6574206e2c642c612c6c2c632c693d6e65772055696e743841727261792831303234292c723d6628293b633d723c2e32353f7061727365496e742835372a662829292b3134383a723c2e373f7061727365496e742835392a662829292b38393a7061727365496e742835392a662829292b33303b6c657420732c6f2c623d6628293c2e343f313a303b66756e6374696f6e206828297b6c657420743d6e65772055524c536561726368506172616d73286c6f636174696f6e2e736561726368292e686173282766756c6c73637265656e27293b6966286e3d743f77696e646f772e696e6e657257696474683a7061727365496e742877696e646f772e696e6e657257696474682f63292a632c643d6e2f2831362f39292c643e77696e646f772e696e6e657248656967687429696628643d77696e646f772e696e6e65724865696768742c74296e3d642a2831362f39293b656c73657b6e3d7061727365496e7428642a2831362f39292f63292a632c643d6e2f2831362f39297d6e3d7061727365496e74286e292c643d7061727365496e742864292c642d3d6425323d3d313f313a302c613d642f28622b31292c6c3d6e2f632c652e6865696768743d642c652e77696474683d6e7d723d6628292c733d723c2e373f2e30353a723c2e393f2e313a2e31352c723d6628292c6f3d723c2e30353f2e313a723c2e38353f2e333a2e352c6828292c77696e646f772e6164644576656e744c697374656e65722827726573697a65272c2828293d3e7b6828292c7728292c4228297d29293b6c657420463b723d6628292c463d723c2e30333f303a723c2e30373f313a723c2e31313f323a723c2e31363f333a723c2e32323f343a723c2e32383f353a723c2e33343f363a723c2e34313f373a723c2e34383f383a723c2e35353f393a723c2e36343f31303a723c2e37333f31313a723c2e38323f31323a723c2e39313f31333a31343b6c657420703d5b5b5b2723366261656436272c2723356661346365275d2c5b2723343239326336272c2723333538366261275d2c5b2723303835313963272c2723303334343838275d2c5b2723303833303662272c2723303432383565275d2c5b2723633664626566272c2723623163616532275d2c5b2723646565626637272c2723636264646565275d2c5b2723666565306432272c2723663163616237275d2c5b2723666236613461272c2723653835383338275d2c5b2723656633623263272c2723646632653166275d2c5b2723613530663135272c2723386330383064275d2c5b2723363730303064272c2723346230303061275d5d2c5b5b2723313030303262272c2723313030303262275d2c5b2723464630303543272c2723464630303543275d2c5b2723626330306464272c2723626330306464275d2c5b2723633066646666272c2723633066646666275d2c5b2723643531666135272c2723643531666135275d2c5b2723313346344546272c2723313346344546275d2c5b2723464646464646272c2723464646464646275d5d2c5b5b2723306430643064272c2723306430643064275d2c5b2723316631663166272c2723316631663166275d2c5b2723333133313331272c2723333133313331275d2c5b2723343334343434272c2723343334343434275d2c5b2723323132313231272c2723323132313231275d2c5b2723373337333733272c2723373337333733275d2c5b2723663966396637272c2723663966396637275d2c5b2723663466336566272c2723663466336566275d2c5b2723656665656538272c2723656665656538275d2c5b2723656165386530272c2723656165386530275d2c5b2723653565336439272c2723653565336439275d2c5b2723643664346339272c2723643664346339275d5d2c5b5b2723323832413336272c2723323832413336275d2c5b2723364543434444272c2723364543434444275d2c5b2723454331443234272c2723454331443234275d2c5b2723463736423842272c2723463736423842275d5d2c5b5b2723663962323934272c2723663962323934275d2c5b2723663237323766272c2723663237323766275d2c5b2723633036633836272c2723633036633836275d2c5b2723366435633765272c2723366435633765275d2c5b2723333235643766272c2723333235643766275d5d2c5b5b2723393962393938272c2723393962393938275d2c5b2723666463656161272c2723666463656161275d2c5b2723663438333764272c2723663438333764275d2c5b2723656234393630272c2723656234393630275d2c5b2723323733363362272c2723323733363362275d5d2c5b5b2723313632303339272c2723313632303339275d2c5b2723313433623561272c2723313433623561275d2c5b2723323334613735272c2723323334613735275d2c5b2723323535333865272c2723323535333865275d2c5b2723376636623533272c2723376636623533275d2c5b2723623339653864272c2723623339653864275d5d2c5b5b2723323531423337272c2723323531423337275d2c5b2723333732393438272c2723333732393438275d2c5b2723464643414341272c2723464643414341275d2c5b2723464645434546272c2723464645434546275d2c5b2723363735303833272c2723363735303833275d2c5b2723653139633963272c2723653139633963275d5d2c5b5b2723386630306666272c2723386630306666275d2c5b2723616466663032272c2723616466663032275d2c5b2723666630303664272c2723666630303664275d2c5b2723666637643030272c2723666637643030275d2c5b2723666664643030272c2723666664643030275d2c5b2723303162656665272c2723303162656665275d5d2c5b5b2723666636363633272c2723666636363633275d2c5b2723653066663466272c2723653066663466275d2c5b2723323231363262272c2723323231363262275d2c5b2723653865326661272c2723653865326661275d2c5b2723373233646362272c2723373233646362275d2c5b2723343531353963272c2723343531353963275d5d2c5b5b2723303632313035272c2723303632313035275d2c5b2723306338393030272c2723306338393030275d2c5b2723326263323065272c2723326263323065275d2c5b2723396366663030272c2723396366663030275d2c5b2723333966663133272c2723333966663133275d2c5b2723323632373239272c2723323632373239275d5d2c5b5b2723373830313136272c2723373830313136275d2c5b2723393831653164272c2723393831653164275d2c5b2723633332663237272c2723633332663237275d2c5b2723643835373261272c2723643835373261275d2c5b2723646237633236272c2723646237633236275d2c5b2723663762353338272c2723663762353338275d5d2c5b5b2723463935343642272c2723463935343642275d2c5b2723464337363531272c2723464337363531275d2c5b2723464644423630272c2723464644423630275d2c5b2723343243464341272c2723343243464341275d2c5b2723303039463933272c2723303039463933275d5d2c5b5b2723413841374137272c2723413841374137275d2c5b2723434335323741272c2723434335323741275d2c5b2723453831373544272c2723453831373544275d2c5b2723343734373437272c2723343734373437275d2c5b2723333633363336272c2723333633363336275d5d2c5b5b2723376464366636272c2723376464366636275d2c5b2723373937656636272c2723373937656636275d2c5b2723346164656465272c2723346164656465275d2c5b2723316161376563272c2723316161376563275d2c5b2723316532663937272c2723316532663937275d5d5d5b465d3b6628293c2e34262666756e6374696f6e28297b6c657420653d5b5d2c743d5b5d3b666f72286c657420743d303b743c702e6c656e6774683b742b2b29652e70757368282e2e2e705b745d293b666f72286c6574206e3d303b6e3c702e6c656e6774683b6e2b2b297b6c6574206e3d5b5d3b666f72286c657420743d303b743c323b742b2b297b6c657420743d7061727365496e74286628292a652e6c656e677468293b6e2e7075736828655b745d292c652e73706c69636528742c31297d742e70757368286e297d703d747d28293b6c657420753d705b7061727365496e74286628292a702e6c656e677468295d5b7061727365496e7428322a662829295d3b636f6e737420433d652e676574436f6e746578742827326427293b6c657420673d6628292c413d303b66756e6374696f6e207728297b673c2e323f413d6c2f312e333a673c2e37262628413d6c2f3133297d7728293b6c657420492c6d3d5b5d2c453d5b5d3b303d3d623f452e707573682821286628293c2e363529293a6628293c2e36353f452e707573682821312c2130293a452e707573682821302c2131292c723d6628292c493d723c2e313f323a723c2e33353f333a723c2e36353f343a723c2e38353f353a363b666f72286c657420653d303b653c3d623b652b2b297b6c657420743d5b5d3b666f72286c6574206e3d303b6e3c633b6e2b2b297b6c6574206e3d7061727365496e74286628292a28492d3129292b312c643d312c613d312c6c3d5b5b5d2c5b5d5d3b666f72286c657420743d303b743c493b742b2b297b6c657420633d705b7061727365496e74286628292a702e6c656e677468295d3b696628635b305d213d3d635b315d297b6c657420653d7061727365496e7428635b305d2e736c69636528312c33292c3136292c743d7061727365496e7428635b305d2e736c69636528332c35292c3136292c663d7061727365496e7428635b305d2e736c69636528352c37292c3136292c6e3d7061727365496e7428635b315d2e736c69636528312c33292c3136292c643d7061727365496e7428635b315d2e736c69636528332c35292c3136292c613d7061727365496e7428635b315d2e736c69636528352c37292c3136293b633d5b607267626128247b657d2c247b747d2c247b667d2c602c607267626128247b6e7d2c247b647d2c247b617d2c605d7d656c73657b6c657420653d7061727365496e7428635b305d2e736c69636528312c33292c3136292c743d7061727365496e7428635b305d2e736c69636528332c35292c3136292c663d7061727365496e7428635b305d2e736c69636528352c37292c3136293b633d5b607267626128247b657d2c247b747d2c247b667d2c605d7d696628743c6e297b6c657420613b613d743d3d6e2d313f643a642a6628292c642d3d613b666f72286c657420743d303b743c632e6c656e6774683b742b2b29635b745d2b3d60247b455b655d3f313a6f7d29603b6c5b305d2e70757368285b632c615d297d656c73657b6c6574206e3b6e3d743d3d492d313f613a612a6628292c612d3d6e3b666f72286c657420743d303b743c632e6c656e6774683b742b2b29635b745d2b3d60247b455b655d3f6f3a317d29603b6c5b315d2e70757368285b632c6e5d297d7d742e70757368286c297d6d2e707573682874297d4228292c646f63756d656e742e626f64792e617070656e644368696c642865293b6c657420793d77696e646f772e417564696f436f6e746578747c7c77696e646f772e7765626b6974417564696f436f6e746578743b66756e6374696f6e204428652c742c662c6e297b696628652e6c656e6774683e31297b6c657420643d432e6372656174654c696e6561724772616469656e7428742c662c742c662b6e293b72657475726e20642e616464436f6c6f7253746f7028302c655b305d292c642e616464436f6c6f7253746f7028312c655b315d292c647d72657475726e20655b305d7d66756e6374696f6e204228297b432e66696c6c5374796c653d752c432e66696c6c5265637428302c302c6e2c64292c432e6c696e6557696474683d413b666f72286c657420653d303b653c3d623b652b2b297b6c657420743d652a613b666f72286c657420663d303b663c633b662b2b297b6c6574206e3d6d5b655d5b665d2c643d695b665d2f3235352c633d4d6174682e6365696c28732a61292c723d642a612d632c6f3d612d722d632c623d633b455b655d2626286f3d722c723d612d6f2d632c623d642f733e313f633a632a642f73293b6c657420683d302c463d302c703d662a6c3b6966286f3e3029666f72286c657420663d303b663c6e5b315d2e6c656e6774683b662b2b297b6c657420643d4d6174682e6365696c286f2a6e5b315d5b665d5b315d292c633d682b743b632b643e28652b31292a61262628643d28652b31292a612d632c643c30262628643d3029292c432e66696c6c5374796c653d44286e5b315d5b665d5b305d2c702c632c64292c432e66696c6c5265637428702c632c6c2c64292c412626432e7374726f6b655265637428702c632c6c2c64292c682b3d647d696628723e3029666f72286c657420663d303b663c6e5b305d2e6c656e6774683b662b2b297b6c657420643d4d6174682e6365696c28722a6e5b305d5b665d5b315d292c633d462b682b742b623b632b643e28652b31292a61262628643d28652b31292a612d632c643c30262628643d3029292c432e66696c6c5374796c653d44286e5b305d5b665d5b305d2c702c632c64292c432e66696c6c5265637428702c632c6c2c64292c412626432e7374726f6b655265637428702c632c6c2c64292c462b3d647d7d7d7d6e6176696761746f722e6d65646961446576696365732e676574557365724d65646961287b617564696f3a21307d292e7468656e2828653d3e7b6c657420743d6e657720792c663d742e637265617465416e616c7973657228293b662e66667453697a653d323034382c662e6d61784465636962656c733d2d31302c742e6372656174654d6564696153747265616d536f757263652865292e636f6e6e6563742866292c72657175657374416e696d6174696f6e4672616d65282866756e6374696f6e206528297b662e676574427974654672657175656e6379446174612869292c4228292c72657175657374416e696d6174696f6e4672616d652865297d29297d29292e63617463682828653d3e7b636f6e736f6c652e6c6f672865292c616c65727428274d6963726f70686f6e65206e6f7420666f756e64215c6e417564696f20636170747572696e67206973207265636f6d6d656e64656420746f2066756c6c7920656e6a6f792053656e7374686573696127297d29293ba26469706673582212207efc8303761e8f6a4ecb024b998c09e02ac6b91540f02f1088ea667ba1b427e164736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a53656e7374686573696100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000653454e5354480000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063b88d4fde11610095578063ea146e5111610064578063ea146e511461067d578063f2fde38b146106ba578063f64c8655146106e3578063f92cb15d1461070e576101cd565b8063b88d4fde1461059d578063c87b56dd146105c6578063d5cde1f214610603578063e985e9c514610640576101cd565b806384bce7d8116100d157806384bce7d8146104f35780638da5cb5b1461051e57806395d89b4114610549578063a22cb46514610574576101cd565b806370a082311461047457806370ee8aaf146104b1578063715018a6146104dc576101cd565b806318160ddd1161016f57806342842e0e1161013e57806342842e0e146103a65780634c0f38c2146103cf5780636352211e146103fa5780636b2fafa914610437576101cd565b806318160ddd146102fc57806323b872dd14610327578063348412041461035057806341f434341461037b576101cd565b806306fdde03116101ab57806306fdde0314610261578063081812fc1461028c578063095ea7b3146102c95780631249c58b146102f2576101cd565b806301466bc0146101d257806301ffc9a7146101fb578063039b2ed714610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061278d565b610737565b005b34801561020757600080fd5b50610222600480360381019061021d9190612812565b610749565b60405161022f919061285a565b60405180910390f35b34801561024457600080fd5b5061025f600480360381019061025a91906128a1565b61082b565b005b34801561026d57600080fd5b50610276610850565b604051610283919061295e565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061278d565b6108e2565b6040516102c091906129c1565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190612a08565b610928565b005b6102fa610a4a565b005b34801561030857600080fd5b50610311610df9565b60405161031e9190612a57565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612a72565b610e03565b005b34801561035c57600080fd5b50610365610ea2565b6040516103729190612a57565b60405180910390f35b34801561038757600080fd5b50610390610eac565b60405161039d9190612b24565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190612a72565b610ebe565b005b3480156103db57600080fd5b506103e4610f1d565b6040516103f19190612a57565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061278d565b610f27565b60405161042e91906129c1565b60405180910390f35b34801561044357600080fd5b5061045e6004803603810190610459919061278d565b610fad565b60405161046b9190612b58565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190612b73565b610fd3565b6040516104a89190612a57565b60405180910390f35b3480156104bd57600080fd5b506104c661108a565b6040516104d39190612a57565b60405180910390f35b3480156104e857600080fd5b506104f1611094565b005b3480156104ff57600080fd5b506105086110a8565b604051610515919061285a565b60405180910390f35b34801561052a57600080fd5b506105336110bf565b60405161054091906129c1565b60405180910390f35b34801561055557600080fd5b5061055e6110e8565b60405161056b919061295e565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190612ba0565b61117a565b005b3480156105a957600080fd5b506105c460048036038101906105bf9190612d15565b61119b565b005b3480156105d257600080fd5b506105ed60048036038101906105e8919061278d565b61123c565b6040516105fa919061295e565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190612b73565b6112a4565b604051610637919061285a565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190612d98565b6112fe565b604051610674919061285a565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f919061278d565b611392565b6040516106b1919061295e565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190612b73565b611401565b005b3480156106ef57600080fd5b506106f8611484565b6040516107059190612a57565b60405180910390f35b34801561071a57600080fd5b5061073560048036038101906107309190612f63565b61148d565b005b61073f611598565b8060078190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610824575061082382611616565b5b9050919050565b610833611598565b80600a60006101000a81548160ff02191690831515021790555050565b60606001805461085f9061300a565b80601f016020809104026020016040519081016040528092919081815260200182805461088b9061300a565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b60006108ed82611680565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610932816116cb565b600061093d83610f27565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a4906130ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109cc6117c8565b73ffffffffffffffffffffffffffffffffffffffff1614806109fb57506109fa816109f56117c8565b6112fe565b5b610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a319061313f565b60405180910390fd5b610a4484846117d0565b50505050565b600a60009054906101000a900460ff16610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906131ab565b60405180910390fd5b60006007549050610ab0610aab6117c8565b6112a4565b15610b2e5760009050600b6000610ac56117c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610b10906131fa565b919050555060096000815480929190610b2890613223565b91905055505b600081148015610b4157506101d5600854105b80610b685750609d6101d5610b56919061326b565b600954600854610b66919061326b565b105b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e906132eb565b60405180910390fd5b80341015610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190613357565b60405180910390fd5b60008134610bf8919061326b565b90506000811115610cb8576000610c0d6117c8565b73ffffffffffffffffffffffffffffffffffffffff1682604051610c30906133a8565b60006040518083038185875af1925050503d8060008114610c6d576040519150601f19603f3d011682016040523d82523d6000602084013e610c72565b606091505b5050905080610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90613409565b60405180910390fd5b505b60008134610cc6919061326b565b90506000811115610d9357600073202b8934e2e14caf19b9a0aa70d4c5047599adb173ffffffffffffffffffffffffffffffffffffffff1682604051610d0b906133a8565b60006040518083038185875af1925050503d8060008114610d48576040519150601f19603f3d011682016040523d82523d6000602084013e610d4d565b606091505b5050905080610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613475565b60405180910390fd5b505b6000610da5610da06117c8565b611889565b90508381610db16117c8565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f60405160405180910390a450505050565b6000600854905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e4157610e40336116cb565b5b610e52610e4c6117c8565b836118fb565b610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8890613507565b60405180910390fd5b610e9c848484611990565b50505050565b6000600954905090565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610efc57610efb336116cb565b5b610f178484846040518060200160405280600081525061119b565b50505050565b60006101d5905090565b600080610f3383611c6f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90613573565b60405180910390fd5b80915050919050565b6000610fb882611680565b600c6000838152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613605565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600754905090565b61109c611598565b6110a66000611cac565b565b6000600a60009054906101000a900460ff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110f79061300a565b80601f01602080910402602001604051908101604052809291908181526020018280546111239061300a565b80156111705780601f1061114557610100808354040283529160200191611170565b820191906000526020600020905b81548152906001019060200180831161115357829003601f168201915b5050505050905090565b81611184816116cb565b61119661118f6117c8565b8484611d70565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111d9576111d8336116cb565b5b6111ea6111e46117c8565b846118fb565b611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613507565b60405180910390fd5b61123585858585611edc565b5050505050565b606061124782611680565b6000611251611f38565b90506000815111611271576040518060200160405280600081525061129c565b8061127b84611f67565b60405160200161128c929190613661565b6040516020818303038152906040525b915050919050565b6000609d6009541080156112f757506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606061139d82611680565b6113be600c60008481526020019081526020016000205460001c6020612035565b6040518061166001604052806116248152602001613f6c61162491396040516020016113eb92919061371d565b6040516020818303038152906040529050919050565b611409611598565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f906137c9565b60405180910390fd5b61148181611cac565b50565b6000609d905090565b611495611598565b80518251146114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090613835565b60405180910390fd5b60005b8251811015611570578181815181106114f8576114f7613855565b5b6020026020010151600b600085848151811061151757611516613855565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061156890613223565b9150506114dc565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6115a06117c8565b73ffffffffffffffffffffffffffffffffffffffff166115be6110bf565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b906138d0565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61168981612271565b6116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf90613573565b60405180910390fd5b50565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156117c5576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016117429291906138f0565b602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611783919061392e565b6117c457806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016117bb91906129c1565b60405180910390fd5b5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661184383610f27565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611895836122b2565b90506118b3600084836040518060200160405280600081525061243c565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e9906139cd565b60405180910390fd5b80915050919050565b60008061190783610f27565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611949575061194881856112fe565b5b8061198757508373ffffffffffffffffffffffffffffffffffffffff1661196f846108e2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119b082610f27565b73ffffffffffffffffffffffffffffffffffffffff1614611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613a5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90613af1565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16611a9582610f27565b73ffffffffffffffffffffffffffffffffffffffff1614611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613a5f565b60405180910390fd5b6005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590613b5d565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecf919061285a565b60405180910390a3505050565b611ee7848484611990565b611ef38484848461243c565b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f29906139cd565b60405180910390fd5b50505050565b6060611f43306125c3565b604051602001611f539190613c15565b604051602081830303815290604052905090565b606060006001611f76846125f0565b01905060008167ffffffffffffffff811115611f9557611f94612bea565b5b6040519080825280601f01601f191660200182016040528015611fc75781602001600182028036833780820191505090505b509050600082602001820190505b60011561202a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161201e5761201d613c42565b5b04945060008503611fd5575b819350505050919050565b6060600060028360026120489190613c71565b6120529190613cb3565b67ffffffffffffffff81111561206b5761206a612bea565b5b6040519080825280601f01601f19166020018201604052801561209d5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106120d5576120d4613855565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061213957612138613855565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026121799190613c71565b6121839190613cb3565b90505b6001811115612223577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106121c5576121c4613855565b5b1a60f81b8282815181106121dc576121db613855565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061221c906131fa565b9050612186565b5060008414612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90613d33565b60405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1661229383611c6f565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060006008549050826003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600081548092919061236e90613223565b9190505550600060085443600343612386919061326b565b4061238f6117c8565b42416040516020016123a696959493929190613e18565b60405160208183030381529060405280519060200120905080600c600084815260200190815260200160002081905550818473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48192505050919050565b600061245d8473ffffffffffffffffffffffffffffffffffffffff16611575565b156125b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124866117c8565b8786866040518563ffffffff1660e01b81526004016124a89493929190613edd565b6020604051808303816000875af19250505080156124e457506040513d601f19601f820116820180604052508101906124e19190613f3e565b60015b612566573d8060008114612514576040519150601f19603f3d011682016040523d82523d6000602084013e612519565b606091505b50600081510361255e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612555906139cd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125bb565b600190505b949350505050565b60606125e98273ffffffffffffffffffffffffffffffffffffffff16601460ff16612035565b9050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061264e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161264457612643613c42565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061268b576d04ee2d6d415b85acef8100000000838161268157612680613c42565b5b0492506020810190505b662386f26fc1000083106126ba57662386f26fc1000083816126b0576126af613c42565b5b0492506010810190505b6305f5e10083106126e3576305f5e10083816126d9576126d8613c42565b5b0492506008810190505b61271083106127085761271083816126fe576126fd613c42565b5b0492506004810190505b6064831061272b576064838161272157612720613c42565b5b0492506002810190505b600a831061273a576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61276a81612757565b811461277557600080fd5b50565b60008135905061278781612761565b92915050565b6000602082840312156127a3576127a261274d565b5b60006127b184828501612778565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6127ef816127ba565b81146127fa57600080fd5b50565b60008135905061280c816127e6565b92915050565b6000602082840312156128285761282761274d565b5b6000612836848285016127fd565b91505092915050565b60008115159050919050565b6128548161283f565b82525050565b600060208201905061286f600083018461284b565b92915050565b61287e8161283f565b811461288957600080fd5b50565b60008135905061289b81612875565b92915050565b6000602082840312156128b7576128b661274d565b5b60006128c58482850161288c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129085780820151818401526020810190506128ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000612930826128ce565b61293a81856128d9565b935061294a8185602086016128ea565b61295381612914565b840191505092915050565b600060208201905081810360008301526129788184612925565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129ab82612980565b9050919050565b6129bb816129a0565b82525050565b60006020820190506129d660008301846129b2565b92915050565b6129e5816129a0565b81146129f057600080fd5b50565b600081359050612a02816129dc565b92915050565b60008060408385031215612a1f57612a1e61274d565b5b6000612a2d858286016129f3565b9250506020612a3e85828601612778565b9150509250929050565b612a5181612757565b82525050565b6000602082019050612a6c6000830184612a48565b92915050565b600080600060608486031215612a8b57612a8a61274d565b5b6000612a99868287016129f3565b9350506020612aaa868287016129f3565b9250506040612abb86828701612778565b9150509250925092565b6000819050919050565b6000612aea612ae5612ae084612980565b612ac5565b612980565b9050919050565b6000612afc82612acf565b9050919050565b6000612b0e82612af1565b9050919050565b612b1e81612b03565b82525050565b6000602082019050612b396000830184612b15565b92915050565b6000819050919050565b612b5281612b3f565b82525050565b6000602082019050612b6d6000830184612b49565b92915050565b600060208284031215612b8957612b8861274d565b5b6000612b97848285016129f3565b91505092915050565b60008060408385031215612bb757612bb661274d565b5b6000612bc5858286016129f3565b9250506020612bd68582860161288c565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c2282612914565b810181811067ffffffffffffffff82111715612c4157612c40612bea565b5b80604052505050565b6000612c54612743565b9050612c608282612c19565b919050565b600067ffffffffffffffff821115612c8057612c7f612bea565b5b612c8982612914565b9050602081019050919050565b82818337600083830152505050565b6000612cb8612cb384612c65565b612c4a565b905082815260208101848484011115612cd457612cd3612be5565b5b612cdf848285612c96565b509392505050565b600082601f830112612cfc57612cfb612be0565b5b8135612d0c848260208601612ca5565b91505092915050565b60008060008060808587031215612d2f57612d2e61274d565b5b6000612d3d878288016129f3565b9450506020612d4e878288016129f3565b9350506040612d5f87828801612778565b925050606085013567ffffffffffffffff811115612d8057612d7f612752565b5b612d8c87828801612ce7565b91505092959194509250565b60008060408385031215612daf57612dae61274d565b5b6000612dbd858286016129f3565b9250506020612dce858286016129f3565b9150509250929050565b600067ffffffffffffffff821115612df357612df2612bea565b5b602082029050602081019050919050565b600080fd5b6000612e1c612e1784612dd8565b612c4a565b90508083825260208201905060208402830185811115612e3f57612e3e612e04565b5b835b81811015612e685780612e5488826129f3565b845260208401935050602081019050612e41565b5050509392505050565b600082601f830112612e8757612e86612be0565b5b8135612e97848260208601612e09565b91505092915050565b600067ffffffffffffffff821115612ebb57612eba612bea565b5b602082029050602081019050919050565b6000612edf612eda84612ea0565b612c4a565b90508083825260208201905060208402830185811115612f0257612f01612e04565b5b835b81811015612f2b5780612f178882612778565b845260208401935050602081019050612f04565b5050509392505050565b600082601f830112612f4a57612f49612be0565b5b8135612f5a848260208601612ecc565b91505092915050565b60008060408385031215612f7a57612f7961274d565b5b600083013567ffffffffffffffff811115612f9857612f97612752565b5b612fa485828601612e72565b925050602083013567ffffffffffffffff811115612fc557612fc4612752565b5b612fd185828601612f35565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061302257607f821691505b60208210810361303557613034612fdb565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006130976021836128d9565b91506130a28261303b565b604082019050919050565b600060208201905081810360008301526130c68161308a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613129603d836128d9565b9150613134826130cd565b604082019050919050565b600060208201905081810360008301526131588161311c565b9050919050565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b60006131956013836128d9565b91506131a08261315f565b602082019050919050565b600060208201905081810360008301526131c481613188565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061320582612757565b915060008203613218576132176131cb565b5b600182039050919050565b600061322e82612757565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132605761325f6131cb565b5b600182019050919050565b600061327682612757565b915061328183612757565b9250828203905081811115613299576132986131cb565b5b92915050565b7f4d696e746564206f757421000000000000000000000000000000000000000000600082015250565b60006132d5600b836128d9565b91506132e08261329f565b602082019050919050565b60006020820190508181036000830152613304816132c8565b9050919050565b7f4d696e74696e672062656c6f7720707269636521000000000000000000000000600082015250565b60006133416014836128d9565b915061334c8261330b565b602082019050919050565b6000602082019050818103600083015261337081613334565b9050919050565b600081905092915050565b50565b6000613392600083613377565b915061339d82613382565b600082019050919050565b60006133b382613385565b9150819050919050565b7f526566756e64207478206661696c65642e000000000000000000000000000000600082015250565b60006133f36011836128d9565b91506133fe826133bd565b602082019050919050565b60006020820190508181036000830152613422816133e6565b9050919050565b7f547820746f2066756e64732077616c6c6574206661696c65642e000000000000600082015250565b600061345f601a836128d9565b915061346a82613429565b602082019050919050565b6000602082019050818103600083015261348e81613452565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006134f1602d836128d9565b91506134fc82613495565b604082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061355d6018836128d9565b915061356882613527565b602082019050919050565b6000602082019050818103600083015261358c81613550565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006135ef6029836128d9565b91506135fa82613593565b604082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b600081905092915050565b600061363b826128ce565b6136458185613625565b93506136558185602086016128ea565b80840191505092915050565b600061366d8285613630565b91506136798284613630565b91508190509392505050565b7f6c657420686173683d2700000000000000000000000000000000000000000000600082015250565b60006136bb600a83613625565b91506136c682613685565b600a82019050919050565b7f273b000000000000000000000000000000000000000000000000000000000000600082015250565b6000613707600283613625565b9150613712826136d1565b600282019050919050565b6000613728826136ae565b91506137348285613630565b915061373f826136fa565b915061374b8284613630565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137b36026836128d9565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f4172726179206d69736d61746368210000000000000000000000000000000000600082015250565b600061381f600f836128d9565b915061382a826137e9565b602082019050919050565b6000602082019050818103600083015261384e81613812565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ba6020836128d9565b91506138c582613884565b602082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b600060408201905061390560008301856129b2565b61391260208301846129b2565b9392505050565b60008151905061392881612875565b92915050565b6000602082840312156139445761394361274d565b5b600061395284828501613919565b91505092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006139b76032836128d9565b91506139c28261395b565b604082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613a496025836128d9565b9150613a54826139ed565b604082019050919050565b60006020820190508181036000830152613a7881613a3c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613adb6024836128d9565b9150613ae682613a7f565b604082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b476019836128d9565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f68747470733a2f2f746f6b656e2e7a65626c6f636b732e636f6d2f0000000000600082015250565b6000613bb3601b83613625565b9150613bbe82613b7d565b601b82019050919050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613bff600183613625565b9150613c0a82613bc9565b600182019050919050565b6000613c2082613ba6565b9150613c2c8284613630565b9150613c3782613bf2565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7c82612757565b9150613c8783612757565b9250828202613c9581612757565b91508282048414831517613cac57613cab6131cb565b5b5092915050565b6000613cbe82612757565b9150613cc983612757565b9250828201905080821115613ce157613ce06131cb565b5b92915050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613d1d6020836128d9565b9150613d2882613ce7565b602082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b6000819050919050565b613d6e613d6982612757565b613d53565b82525050565b6000819050919050565b613d8f613d8a82612b3f565b613d74565b82525050565b60008160601b9050919050565b6000613dad82613d95565b9050919050565b6000613dbf82613da2565b9050919050565b613dd7613dd2826129a0565b613db4565b82525050565b6000613de882612980565b9050919050565b6000613dfa82613da2565b9050919050565b613e12613e0d82613ddd565b613def565b82525050565b6000613e248289613d5d565b602082019150613e348288613d5d565b602082019150613e448287613d7e565b602082019150613e548286613dc6565b601482019150613e648285613d5d565b602082019150613e748284613e01565b601482019150819050979650505050505050565b600081519050919050565b600082825260208201905092915050565b6000613eaf82613e88565b613eb98185613e93565b9350613ec98185602086016128ea565b613ed281612914565b840191505092915050565b6000608082019050613ef260008301876129b2565b613eff60208301866129b2565b613f0c6040830185612a48565b8181036060830152613f1e8184613ea4565b905095945050505050565b600081519050613f38816127e6565b92915050565b600060208284031215613f5457613f5361274d565b5b6000613f6284828501613f29565b9150509291505056fe6c657420736565643d7061727365496e7428686173682e736c69636528302c313629292c653d646f63756d656e742e637265617465456c656d656e74282763616e76617327292c743d646f63756d656e742e637265617465456c656d656e7428277374796c6527293b66756e6374696f6e206628297b72657475726e20736565645e3d736565643c3c31332c736565645e3d736565643e3e31372c736565645e3d736565643c3c352c28736565643c303f312b7e736565643a7365656429253165332f3165337d742e696e6e6572546578743d27626f6479207b6261636b67726f756e643a20626c61636b3b6865696768743a31303076683b77696474683a31303076773b6d617267696e3a303b70616464696e673a303b6f766572666c6f773a68696464656e3b646973706c61793a666c65783b6a7573746966792d636f6e74656e743a63656e7465723b616c69676e2d6974656d733a63656e7465723b7d272c646f63756d656e742e686561642e617070656e644368696c642874293b6c6574206e2c642c612c6c2c632c693d6e65772055696e743841727261792831303234292c723d6628293b633d723c2e32353f7061727365496e742835372a662829292b3134383a723c2e373f7061727365496e742835392a662829292b38393a7061727365496e742835392a662829292b33303b6c657420732c6f2c623d6628293c2e343f313a303b66756e6374696f6e206828297b6c657420743d6e65772055524c536561726368506172616d73286c6f636174696f6e2e736561726368292e686173282766756c6c73637265656e27293b6966286e3d743f77696e646f772e696e6e657257696474683a7061727365496e742877696e646f772e696e6e657257696474682f63292a632c643d6e2f2831362f39292c643e77696e646f772e696e6e657248656967687429696628643d77696e646f772e696e6e65724865696768742c74296e3d642a2831362f39293b656c73657b6e3d7061727365496e7428642a2831362f39292f63292a632c643d6e2f2831362f39297d6e3d7061727365496e74286e292c643d7061727365496e742864292c642d3d6425323d3d313f313a302c613d642f28622b31292c6c3d6e2f632c652e6865696768743d642c652e77696474683d6e7d723d6628292c733d723c2e373f2e30353a723c2e393f2e313a2e31352c723d6628292c6f3d723c2e30353f2e313a723c2e38353f2e333a2e352c6828292c77696e646f772e6164644576656e744c697374656e65722827726573697a65272c2828293d3e7b6828292c7728292c4228297d29293b6c657420463b723d6628292c463d723c2e30333f303a723c2e30373f313a723c2e31313f323a723c2e31363f333a723c2e32323f343a723c2e32383f353a723c2e33343f363a723c2e34313f373a723c2e34383f383a723c2e35353f393a723c2e36343f31303a723c2e37333f31313a723c2e38323f31323a723c2e39313f31333a31343b6c657420703d5b5b5b2723366261656436272c2723356661346365275d2c5b2723343239326336272c2723333538366261275d2c5b2723303835313963272c2723303334343838275d2c5b2723303833303662272c2723303432383565275d2c5b2723633664626566272c2723623163616532275d2c5b2723646565626637272c2723636264646565275d2c5b2723666565306432272c2723663163616237275d2c5b2723666236613461272c2723653835383338275d2c5b2723656633623263272c2723646632653166275d2c5b2723613530663135272c2723386330383064275d2c5b2723363730303064272c2723346230303061275d5d2c5b5b2723313030303262272c2723313030303262275d2c5b2723464630303543272c2723464630303543275d2c5b2723626330306464272c2723626330306464275d2c5b2723633066646666272c2723633066646666275d2c5b2723643531666135272c2723643531666135275d2c5b2723313346344546272c2723313346344546275d2c5b2723464646464646272c2723464646464646275d5d2c5b5b2723306430643064272c2723306430643064275d2c5b2723316631663166272c2723316631663166275d2c5b2723333133313331272c2723333133313331275d2c5b2723343334343434272c2723343334343434275d2c5b2723323132313231272c2723323132313231275d2c5b2723373337333733272c2723373337333733275d2c5b2723663966396637272c2723663966396637275d2c5b2723663466336566272c2723663466336566275d2c5b2723656665656538272c2723656665656538275d2c5b2723656165386530272c2723656165386530275d2c5b2723653565336439272c2723653565336439275d2c5b2723643664346339272c2723643664346339275d5d2c5b5b2723323832413336272c2723323832413336275d2c5b2723364543434444272c2723364543434444275d2c5b2723454331443234272c2723454331443234275d2c5b2723463736423842272c2723463736423842275d5d2c5b5b2723663962323934272c2723663962323934275d2c5b2723663237323766272c2723663237323766275d2c5b2723633036633836272c2723633036633836275d2c5b2723366435633765272c2723366435633765275d2c5b2723333235643766272c2723333235643766275d5d2c5b5b2723393962393938272c2723393962393938275d2c5b2723666463656161272c2723666463656161275d2c5b2723663438333764272c2723663438333764275d2c5b2723656234393630272c2723656234393630275d2c5b2723323733363362272c2723323733363362275d5d2c5b5b2723313632303339272c2723313632303339275d2c5b2723313433623561272c2723313433623561275d2c5b2723323334613735272c2723323334613735275d2c5b2723323535333865272c2723323535333865275d2c5b2723376636623533272c2723376636623533275d2c5b2723623339653864272c2723623339653864275d5d2c5b5b2723323531423337272c2723323531423337275d2c5b2723333732393438272c2723333732393438275d2c5b2723464643414341272c2723464643414341275d2c5b2723464645434546272c2723464645434546275d2c5b2723363735303833272c2723363735303833275d2c5b2723653139633963272c2723653139633963275d5d2c5b5b2723386630306666272c2723386630306666275d2c5b2723616466663032272c2723616466663032275d2c5b2723666630303664272c2723666630303664275d2c5b2723666637643030272c2723666637643030275d2c5b2723666664643030272c2723666664643030275d2c5b2723303162656665272c2723303162656665275d5d2c5b5b2723666636363633272c2723666636363633275d2c5b2723653066663466272c2723653066663466275d2c5b2723323231363262272c2723323231363262275d2c5b2723653865326661272c2723653865326661275d2c5b2723373233646362272c2723373233646362275d2c5b2723343531353963272c2723343531353963275d5d2c5b5b2723303632313035272c2723303632313035275d2c5b2723306338393030272c2723306338393030275d2c5b2723326263323065272c2723326263323065275d2c5b2723396366663030272c2723396366663030275d2c5b2723333966663133272c2723333966663133275d2c5b2723323632373239272c2723323632373239275d5d2c5b5b2723373830313136272c2723373830313136275d2c5b2723393831653164272c2723393831653164275d2c5b2723633332663237272c2723633332663237275d2c5b2723643835373261272c2723643835373261275d2c5b2723646237633236272c2723646237633236275d2c5b2723663762353338272c2723663762353338275d5d2c5b5b2723463935343642272c2723463935343642275d2c5b2723464337363531272c2723464337363531275d2c5b2723464644423630272c2723464644423630275d2c5b2723343243464341272c2723343243464341275d2c5b2723303039463933272c2723303039463933275d5d2c5b5b2723413841374137272c2723413841374137275d2c5b2723434335323741272c2723434335323741275d2c5b2723453831373544272c2723453831373544275d2c5b2723343734373437272c2723343734373437275d2c5b2723333633363336272c2723333633363336275d5d2c5b5b2723376464366636272c2723376464366636275d2c5b2723373937656636272c2723373937656636275d2c5b2723346164656465272c2723346164656465275d2c5b2723316161376563272c2723316161376563275d2c5b2723316532663937272c2723316532663937275d5d5d5b465d3b6628293c2e34262666756e6374696f6e28297b6c657420653d5b5d2c743d5b5d3b666f72286c657420743d303b743c702e6c656e6774683b742b2b29652e70757368282e2e2e705b745d293b666f72286c6574206e3d303b6e3c702e6c656e6774683b6e2b2b297b6c6574206e3d5b5d3b666f72286c657420743d303b743c323b742b2b297b6c657420743d7061727365496e74286628292a652e6c656e677468293b6e2e7075736828655b745d292c652e73706c69636528742c31297d742e70757368286e297d703d747d28293b6c657420753d705b7061727365496e74286628292a702e6c656e677468295d5b7061727365496e7428322a662829295d3b636f6e737420433d652e676574436f6e746578742827326427293b6c657420673d6628292c413d303b66756e6374696f6e207728297b673c2e323f413d6c2f312e333a673c2e37262628413d6c2f3133297d7728293b6c657420492c6d3d5b5d2c453d5b5d3b303d3d623f452e707573682821286628293c2e363529293a6628293c2e36353f452e707573682821312c2130293a452e707573682821302c2131292c723d6628292c493d723c2e313f323a723c2e33353f333a723c2e36353f343a723c2e38353f353a363b666f72286c657420653d303b653c3d623b652b2b297b6c657420743d5b5d3b666f72286c6574206e3d303b6e3c633b6e2b2b297b6c6574206e3d7061727365496e74286628292a28492d3129292b312c643d312c613d312c6c3d5b5b5d2c5b5d5d3b666f72286c657420743d303b743c493b742b2b297b6c657420633d705b7061727365496e74286628292a702e6c656e677468295d3b696628635b305d213d3d635b315d297b6c657420653d7061727365496e7428635b305d2e736c69636528312c33292c3136292c743d7061727365496e7428635b305d2e736c69636528332c35292c3136292c663d7061727365496e7428635b305d2e736c69636528352c37292c3136292c6e3d7061727365496e7428635b315d2e736c69636528312c33292c3136292c643d7061727365496e7428635b315d2e736c69636528332c35292c3136292c613d7061727365496e7428635b315d2e736c69636528352c37292c3136293b633d5b607267626128247b657d2c247b747d2c247b667d2c602c607267626128247b6e7d2c247b647d2c247b617d2c605d7d656c73657b6c657420653d7061727365496e7428635b305d2e736c69636528312c33292c3136292c743d7061727365496e7428635b305d2e736c69636528332c35292c3136292c663d7061727365496e7428635b305d2e736c69636528352c37292c3136293b633d5b607267626128247b657d2c247b747d2c247b667d2c605d7d696628743c6e297b6c657420613b613d743d3d6e2d313f643a642a6628292c642d3d613b666f72286c657420743d303b743c632e6c656e6774683b742b2b29635b745d2b3d60247b455b655d3f313a6f7d29603b6c5b305d2e70757368285b632c615d297d656c73657b6c6574206e3b6e3d743d3d492d313f613a612a6628292c612d3d6e3b666f72286c657420743d303b743c632e6c656e6774683b742b2b29635b745d2b3d60247b455b655d3f6f3a317d29603b6c5b315d2e70757368285b632c6e5d297d7d742e70757368286c297d6d2e707573682874297d4228292c646f63756d656e742e626f64792e617070656e644368696c642865293b6c657420793d77696e646f772e417564696f436f6e746578747c7c77696e646f772e7765626b6974417564696f436f6e746578743b66756e6374696f6e204428652c742c662c6e297b696628652e6c656e6774683e31297b6c657420643d432e6372656174654c696e6561724772616469656e7428742c662c742c662b6e293b72657475726e20642e616464436f6c6f7253746f7028302c655b305d292c642e616464436f6c6f7253746f7028312c655b315d292c647d72657475726e20655b305d7d66756e6374696f6e204228297b432e66696c6c5374796c653d752c432e66696c6c5265637428302c302c6e2c64292c432e6c696e6557696474683d413b666f72286c657420653d303b653c3d623b652b2b297b6c657420743d652a613b666f72286c657420663d303b663c633b662b2b297b6c6574206e3d6d5b655d5b665d2c643d695b665d2f3235352c633d4d6174682e6365696c28732a61292c723d642a612d632c6f3d612d722d632c623d633b455b655d2626286f3d722c723d612d6f2d632c623d642f733e313f633a632a642f73293b6c657420683d302c463d302c703d662a6c3b6966286f3e3029666f72286c657420663d303b663c6e5b315d2e6c656e6774683b662b2b297b6c657420643d4d6174682e6365696c286f2a6e5b315d5b665d5b315d292c633d682b743b632b643e28652b31292a61262628643d28652b31292a612d632c643c30262628643d3029292c432e66696c6c5374796c653d44286e5b315d5b665d5b305d2c702c632c64292c432e66696c6c5265637428702c632c6c2c64292c412626432e7374726f6b655265637428702c632c6c2c64292c682b3d647d696628723e3029666f72286c657420663d303b663c6e5b305d2e6c656e6774683b662b2b297b6c657420643d4d6174682e6365696c28722a6e5b305d5b665d5b315d292c633d462b682b742b623b632b643e28652b31292a61262628643d28652b31292a612d632c643c30262628643d3029292c432e66696c6c5374796c653d44286e5b305d5b665d5b305d2c702c632c64292c432e66696c6c5265637428702c632c6c2c64292c412626432e7374726f6b655265637428702c632c6c2c64292c462b3d647d7d7d7d6e6176696761746f722e6d65646961446576696365732e676574557365724d65646961287b617564696f3a21307d292e7468656e2828653d3e7b6c657420743d6e657720792c663d742e637265617465416e616c7973657228293b662e66667453697a653d323034382c662e6d61784465636962656c733d2d31302c742e6372656174654d6564696153747265616d536f757263652865292e636f6e6e6563742866292c72657175657374416e696d6174696f6e4672616d65282866756e6374696f6e206528297b662e676574427974654672657175656e6379446174612869292c4228292c72657175657374416e696d6174696f6e4672616d652865297d29297d29292e63617463682828653d3e7b636f6e736f6c652e6c6f672865292c616c65727428274d6963726f70686f6e65206e6f7420666f756e64215c6e417564696f20636170747572696e67206973207265636f6d6d656e64656420746f2066756c6c7920656e6a6f792053656e7374686573696127297d29293ba26469706673582212207efc8303761e8f6a4ecb024b998c09e02ac6b91540f02f1088ea667ba1b427e164736f6c63430008110033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a53656e7374686573696100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000653454e5354480000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Sensthesia
Arg [1] : symbol_ (string): SENSTH

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [3] : 53656e7374686573696100000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 53454e5354480000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38737:22448:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59732:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46244:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59549:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47160:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48798:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48284:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52903:1104;;;:::i;:::-;;60641:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49536:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60835:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36092:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49968:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60738:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46870:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60494:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46601:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59853:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32543:103;;;;;;;;;;;;;:::i;:::-;;59643:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31895:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47329:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49041:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50250:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47504:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61037:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49305:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60252:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32801:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60936:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59956:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59732:113;31781:13;:11;:13::i;:::-;59825:12:::1;59809:13;:28;;;;59732:113:::0;:::o;46244:293::-;46346:4;46394:25;46379:40;;;:11;:40;;;;:101;;;;46447:33;46432:48;;;:11;:48;;;;46379:101;:150;;;;46493:36;46517:11;46493:23;:36::i;:::-;46379:150;46363:166;;46244:293;;;:::o;59549:86::-;31781:13;:11;:13::i;:::-;59621:6:::1;59611:7;;:16;;;;;;;;;;;;;;;;;;59549:86:::0;:::o;47160:100::-;47214:13;47247:5;47240:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47160:100;:::o;48798:171::-;48874:7;48894:23;48909:7;48894:14;:23::i;:::-;48937:15;:24;48953:7;48937:24;;;;;;;;;;;;;;;;;;;;;48930:31;;48798:171;;;:::o;48284:448::-;48382:2;37609:30;37630:8;37609:20;:30::i;:::-;48397:13:::1;48413:23;48428:7;48413:14;:23::i;:::-;48397:39;;48461:5;48455:11;;:2;:11;;::::0;48447:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48555:5;48539:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;48564:37;48581:5;48588:12;:10;:12::i;:::-;48564:16;:37::i;:::-;48539:62;48517:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;48703:21;48712:2;48716:7;48703:8;:21::i;:::-;48386:346;48284:448:::0;;;:::o;52903:1104::-;52955:7;;;;;;;;;;;52947:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52998:24;53025:13;;52998:40;;53052:25;53064:12;:10;:12::i;:::-;53052:11;:25::i;:::-;53049:147;;;53112:1;53093:20;;53128:10;:24;53139:12;:10;:12::i;:::-;53128:24;;;;;;;;;;;;;;;;:26;;;;;;;;;:::i;:::-;;;;;;53169:13;;:15;;;;;;;;;:::i;:::-;;;;;;53049:147;53237:1;53217:16;:21;:49;;;;;39565:3;53242:11;;:24;53217:49;53216:116;;;;39631:3;39565;53305:25;;;;:::i;:::-;53287:13;;53273:11;;:27;;;;:::i;:::-;53272:59;53216:116;53208:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;53381:16;53368:9;:29;;53360:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53435:14;53464:16;53452:9;:28;;;;:::i;:::-;53435:45;;53504:1;53495:6;:10;53491:162;;;53523:12;53549;:10;:12::i;:::-;53541:26;;53574:6;53541:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53522:63;;;53608:7;53600:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;53507:146;53491:162;53663:17;53695:6;53683:9;:18;;;;:::i;:::-;53663:38;;53727:1;53715:9;:13;53712:173;;;53746:12;39878:42;53764:27;;53798:9;53764:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53745:67;;;53835:7;53827:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;53730:155;53712:173;53897:15;53915:23;53925:12;:10;:12::i;:::-;53915:9;:23::i;:::-;53897:41;;53982:16;53973:7;53959:12;:10;:12::i;:::-;53954:45;;;;;;;;;;;;52936:1071;;;;52903:1104::o;60641:89::-;60685:7;60711:11;;60704:18;;60641:89;:::o;49536:361::-;49679:4;37437:10;37429:18;;:4;:18;;;37425:83;;37464:32;37485:10;37464:20;:32::i;:::-;37425:83;49757:41:::1;49776:12;:10;:12::i;:::-;49790:7;49757:18;:41::i;:::-;49749:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;49861:28;49871:4;49877:2;49881:7;49861:9;:28::i;:::-;49536:361:::0;;;;:::o;60835:93::-;60881:7;60907:13;;60900:20;;60835:93;:::o;36092:139::-;36188:42;36092:139;:::o;49968:211::-;50115:4;37437:10;37429:18;;:4;:18;;;37425:83;;37464:32;37485:10;37464:20;:32::i;:::-;37425:83;50132:39:::1;50149:4;50155:2;50159:7;50132:39;;;;;;;;;;;::::0;:16:::1;:39::i;:::-;49968:211:::0;;;;:::o;60738:89::-;60783:7;39565:3;60802:17;;60738:89;:::o;46870:223::-;46942:7;46962:13;46978:17;46987:7;46978:8;:17::i;:::-;46962:33;;47031:1;47014:19;;:5;:19;;;47006:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47080:5;47073:12;;;46870:223;;;:::o;60494:139::-;60549:7;60568:23;60583:7;60568:14;:23::i;:::-;60609:7;:16;60617:7;60609:16;;;;;;;;;;;;60602:23;;60494:139;;;:::o;46601:207::-;46673:7;46718:1;46701:19;;:5;:19;;;46693:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46784:9;:16;46794:5;46784:16;;;;;;;;;;;;;;;;46777:23;;46601:207;;;:::o;59853:95::-;59901:7;59927:13;;59920:20;;59853:95;:::o;32543:103::-;31781:13;:11;:13::i;:::-;32608:30:::1;32635:1;32608:18;:30::i;:::-;32543:103::o:0;59643:81::-;59685:4;59709:7;;;;;;;;;;;59702:14;;59643:81;:::o;31895:87::-;31941:7;31968:6;;;;;;;;;;;31961:13;;31895:87;:::o;47329:104::-;47385:13;47418:7;47411:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47329:104;:::o;49041:193::-;49153:8;37609:30;37630:8;37609:20;:30::i;:::-;49174:52:::1;49193:12;:10;:12::i;:::-;49207:8;49217;49174:18;:52::i;:::-;49041:193:::0;;;:::o;50250:348::-;50425:4;37437:10;37429:18;;:4;:18;;;37425:83;;37464:32;37485:10;37464:20;:32::i;:::-;37425:83;50450:41:::1;50469:12;:10;:12::i;:::-;50483:7;50450:18;:41::i;:::-;50442:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;50552:38;50566:4;50572:2;50576:7;50585:4;50552:13;:38::i;:::-;50250:348:::0;;;;;:::o;47504:281::-;47577:13;47603:23;47618:7;47603:14;:23::i;:::-;47639:21;47663:10;:8;:10::i;:::-;47639:34;;47715:1;47697:7;47691:21;:25;:86;;;;;;;;;;;;;;;;;47743:7;47752:18;:7;:16;:18::i;:::-;47726:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47691:86;47684:93;;;47504:281;;;:::o;61037:145::-;61095:4;39631:3;61119:13;;:28;:54;;;;;61172:1;61151:10;:18;61162:6;61151:18;;;;;;;;;;;;;;;;:22;61119:54;61111:63;;61037:145;;;:::o;49305:164::-;49402:4;49426:18;:25;49445:5;49426:25;;;;;;;;;;;;;;;:35;49452:8;49426:35;;;;;;;;;;;;;;;;;;;;;;;;;49419:42;;49305:164;;;;:::o;60252:234::-;60309:13;60334:23;60349:7;60334:14;:23::i;:::-;60412:50;60440:7;:16;60448:7;60440:16;;;;;;;;;;;;60432:25;;60459:2;60412:19;:50::i;:::-;60469:7;;;;;;;;;;;;;;;;;60382:95;;;;;;;;;:::i;:::-;;;;;;;;;;;;;60368:110;;60252:234;;;:::o;32801:201::-;31781:13;:11;:13::i;:::-;32910:1:::1;32890:22;;:8;:22;;::::0;32882:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32966:28;32985:8;32966:18;:28::i;:::-;32801:201:::0;:::o;60936:93::-;60983:7;39631:3;61002:19;;60936:93;:::o;59956:288::-;31781:13;:11;:13::i;:::-;60088:11:::1;:18;60072:7;:14;:34;60064:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;60141:6;60137:100;60152:7;:14;60150:1;:16;60137:100;;;60211:11;60223:1;60211:14;;;;;;;;:::i;:::-;;;;;;;;60186:10;:22;60197:7;60205:1;60197:10;;;;;;;;:::i;:::-;;;;;;;;60186:22;;;;;;;;;;;;;;;:39;;;;60167:3;;;;;:::i;:::-;;;;60137:100;;;;59956:288:::0;;:::o;15449:326::-;15509:4;15766:1;15744:7;:19;;;:23;15737:30;;15449:326;;;:::o;32060:132::-;32135:12;:10;:12::i;:::-;32124:23;;:7;:5;:7::i;:::-;:23;;;32116:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32060:132::o;29669:157::-;29754:4;29793:25;29778:40;;;:11;:40;;;;29771:47;;29669:157;;;:::o;57989:135::-;58071:16;58079:7;58071;:16::i;:::-;58063:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;57989:135;:::o;37667:419::-;37906:1;36188:42;37858:45;;;:49;37854:225;;;36188:42;37929;;;37980:4;37987:8;37929:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37924:144;;38043:8;38024:28;;;;;;;;;;;:::i;:::-;;;;;;;;37924:144;37854:225;37667:419;:::o;14227:98::-;14280:7;14307:10;14300:17;;14227:98;:::o;57268:174::-;57370:2;57343:15;:24;57359:7;57343:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;57426:7;57422:2;57388:46;;57397:23;57412:7;57397:14;:23::i;:::-;57388:46;;;;;;;;;;;;57268:174;;:::o;54236:323::-;54309:16;54337:15;54355:9;54361:2;54355:5;:9::i;:::-;54337:27;;54397:51;54428:1;54432:2;54436:7;54397:51;;;;;;;;;;;;:22;:51::i;:::-;54375:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;54544:7;54537:14;;;54236:323;;;:::o;52631:264::-;52724:4;52741:13;52757:23;52772:7;52757:14;:23::i;:::-;52741:39;;52810:5;52799:16;;:7;:16;;;:52;;;;52819:32;52836:5;52843:7;52819:16;:32::i;:::-;52799:52;:87;;;;52879:7;52855:31;;:20;52867:7;52855:11;:20::i;:::-;:31;;;52799:87;52791:96;;;52631:264;;;;:::o;56027:1122::-;56186:4;56159:31;;:23;56174:7;56159:14;:23::i;:::-;:31;;;56151:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;56265:1;56251:16;;:2;:16;;;56243:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;56440:4;56413:31;;:23;56428:7;56413:14;:23::i;:::-;:31;;;56405:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;56558:15;:24;56574:7;56558:24;;;;;;;;;;;;56551:31;;;;;;;;;;;57025:1;57006:9;:15;57016:4;57006:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;57054:1;57037:9;:13;57047:2;57037:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;57092:2;57073:7;:16;57081:7;57073:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;57131:7;57127:2;57112:27;;57121:4;57112:27;;;;;;;;;;;;56027:1122;;;:::o;51906:117::-;51972:7;51999;:16;52007:7;51999:16;;;;;;;;;;;;;;;;;;;;;51992:23;;51906:117;;;:::o;33162:191::-;33236:16;33255:6;;;;;;;;;;;33236:25;;33281:8;33272:6;;:17;;;;;;;;;;;;;;;;;;33336:8;33305:40;;33326:8;33305:40;;;;;;;;;;;;33225:128;33162:191;:::o;57585:315::-;57740:8;57731:17;;:5;:17;;;57723:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;57827:8;57789:18;:25;57808:5;57789:25;;;;;;;;;;;;;;;:35;57815:8;57789:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;57873:8;57851:41;;57866:5;57851:41;;;57883:8;57851:41;;;;;;:::i;:::-;;;;;;;;57585:315;;;:::o;51479:313::-;51635:28;51645:4;51651:2;51655:7;51635:9;:28::i;:::-;51682:47;51705:4;51711:2;51715:7;51724:4;51682:22;:47::i;:::-;51674:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;51479:313;;;;:::o;48034:188::-;48085:13;48173:34;48201:4;48173:19;:34::i;:::-;48125:88;;;;;;;;:::i;:::-;;;;;;;;;;;;;48111:103;;48034:188;:::o;12388:640::-;12444:13;12487:14;12524:1;12504:17;12515:5;12504:10;:17::i;:::-;:21;12487:38;;12536:20;12570:6;12559:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12536:41;;12588:11;12705:6;12701:2;12697:15;12689:6;12685:28;12678:35;;12734:256;12741:4;12734:256;;;12762:5;;;;;;;;12892:8;12887:2;12880:5;12876:14;12871:30;12866:3;12858:44;12940:2;12931:11;;;;;;:::i;:::-;;;;;12970:1;12961:5;:10;12734:256;12957:21;12734:256;13007:6;13000:13;;;;;12388:640;;;:::o;13432:447::-;13507:13;13533:19;13578:1;13569:6;13565:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;13555:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13533:47;;13591:15;:6;13598:1;13591:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;13617;:6;13624:1;13617:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;13648:9;13673:1;13664:6;13660:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;13648:26;;13643:131;13680:1;13676;:5;13643:131;;;13715:8;13732:3;13724:5;:11;13715:21;;;;;;;:::i;:::-;;;;;13703:6;13710:1;13703:9;;;;;;;;:::i;:::-;;;;;:33;;;;;;;;;;;13761:1;13751:11;;;;;13683:3;;;;:::i;:::-;;;13643:131;;;;13801:1;13792:5;:10;13784:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13864:6;13850:21;;;13432:447;;;;:::o;52336:128::-;52401:4;52454:1;52425:31;;:17;52434:7;52425:8;:17::i;:::-;:31;;;;52418:38;;52336:128;;;:::o;54895:793::-;54948:16;55308:1;55291:9;:13;55301:2;55291:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;55327:15;55345:11;;55327:29;;55386:2;55367:7;:16;55375:7;55367:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;55399:11;;:13;;;;;;;;;:::i;:::-;;;;;;55423:12;55465:11;;55478:12;55517:1;55502:12;:16;;;;:::i;:::-;55492:27;55521:12;:10;:12::i;:::-;55535:15;55552:14;55448:119;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55438:130;;;;;;55423:145;;55598:4;55579:7;:16;55587:7;55579:16;;;;;;;;;;;:23;;;;55645:7;55641:2;55620:33;;55637:1;55620:33;;;;;;;;;;;;55673:7;55666:14;;;;54895:793;;;:::o;58688:853::-;58842:4;58863:15;:2;:13;;;:15::i;:::-;58859:675;;;58915:2;58899:36;;;58936:12;:10;:12::i;:::-;58950:4;58956:7;58965:4;58899:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;58895:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59157:1;59140:6;:13;:18;59136:328;;59183:60;;;;;;;;;;:::i;:::-;;;;;;;;59136:328;59414:6;59408:13;59399:6;59395:2;59391:15;59384:38;58895:584;59031:41;;;59021:51;;;:6;:51;;;;59014:58;;;;;58859:675;59518:4;59511:11;;58688:853;;;;;;;:::o;14036:151::-;14094:13;14127:52;14155:4;14139:22;;12279:2;14127:52;;:11;:52::i;:::-;14120:59;;14036:151;;;:::o;9679:806::-;9732:7;9752:14;9769:1;9752:18;;9811:6;9802:5;:15;9798:90;;9843:6;9834:15;;;;;;:::i;:::-;;;;;9874:2;9864:12;;;;9798:90;9911:6;9902:5;:15;9898:90;;9943:6;9934:15;;;;;;:::i;:::-;;;;;9974:2;9964:12;;;;9898:90;10011:6;10002:5;:15;9998:90;;10043:6;10034:15;;;;;;:::i;:::-;;;;;10074:2;10064:12;;;;9998:90;10111:5;10102;:14;10098:87;;10142:5;10133:14;;;;;;:::i;:::-;;;;;10172:1;10162:11;;;;10098:87;10208:5;10199;:14;10195:87;;10239:5;10230:14;;;;;;:::i;:::-;;;;;10269:1;10259:11;;;;10195:87;10305:5;10296;:14;10292:87;;10336:5;10327:14;;;;;;:::i;:::-;;;;;10366:1;10356:11;;;;10292:87;10402:5;10393;:14;10389:58;;10434:1;10424:11;;;;10389:58;10471:6;10464:13;;;9679:806;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:149::-;1061:7;1101:66;1094:5;1090:78;1079:89;;1025:149;;;:::o;1180:120::-;1252:23;1269:5;1252:23;:::i;:::-;1245:5;1242:34;1232:62;;1290:1;1287;1280:12;1232:62;1180:120;:::o;1306:137::-;1351:5;1389:6;1376:20;1367:29;;1405:32;1431:5;1405:32;:::i;:::-;1306:137;;;;:::o;1449:327::-;1507:6;1556:2;1544:9;1535:7;1531:23;1527:32;1524:119;;;1562:79;;:::i;:::-;1524:119;1682:1;1707:52;1751:7;1742:6;1731:9;1727:22;1707:52;:::i;:::-;1697:62;;1653:116;1449:327;;;;:::o;1782:90::-;1816:7;1859:5;1852:13;1845:21;1834:32;;1782:90;;;:::o;1878:109::-;1959:21;1974:5;1959:21;:::i;:::-;1954:3;1947:34;1878:109;;:::o;1993:210::-;2080:4;2118:2;2107:9;2103:18;2095:26;;2131:65;2193:1;2182:9;2178:17;2169:6;2131:65;:::i;:::-;1993:210;;;;:::o;2209:116::-;2279:21;2294:5;2279:21;:::i;:::-;2272:5;2269:32;2259:60;;2315:1;2312;2305:12;2259:60;2209:116;:::o;2331:133::-;2374:5;2412:6;2399:20;2390:29;;2428:30;2452:5;2428:30;:::i;:::-;2331:133;;;;:::o;2470:323::-;2526:6;2575:2;2563:9;2554:7;2550:23;2546:32;2543:119;;;2581:79;;:::i;:::-;2543:119;2701:1;2726:50;2768:7;2759:6;2748:9;2744:22;2726:50;:::i;:::-;2716:60;;2672:114;2470:323;;;;:::o;2799:99::-;2851:6;2885:5;2879:12;2869:22;;2799:99;;;:::o;2904:169::-;2988:11;3022:6;3017:3;3010:19;3062:4;3057:3;3053:14;3038:29;;2904:169;;;;:::o;3079:246::-;3160:1;3170:113;3184:6;3181:1;3178:13;3170:113;;;3269:1;3264:3;3260:11;3254:18;3250:1;3245:3;3241:11;3234:39;3206:2;3203:1;3199:10;3194:15;;3170:113;;;3317:1;3308:6;3303:3;3299:16;3292:27;3141:184;3079:246;;;:::o;3331:102::-;3372:6;3423:2;3419:7;3414:2;3407:5;3403:14;3399:28;3389:38;;3331:102;;;:::o;3439:377::-;3527:3;3555:39;3588:5;3555:39;:::i;:::-;3610:71;3674:6;3669:3;3610:71;:::i;:::-;3603:78;;3690:65;3748:6;3743:3;3736:4;3729:5;3725:16;3690:65;:::i;:::-;3780:29;3802:6;3780:29;:::i;:::-;3775:3;3771:39;3764:46;;3531:285;3439:377;;;;:::o;3822:313::-;3935:4;3973:2;3962:9;3958:18;3950:26;;4022:9;4016:4;4012:20;4008:1;3997:9;3993:17;3986:47;4050:78;4123:4;4114:6;4050:78;:::i;:::-;4042:86;;3822:313;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:60::-;6485:3;6506:5;6499:12;;6457:60;;;:::o;6523:142::-;6573:9;6606:53;6624:34;6633:24;6651:5;6633:24;:::i;:::-;6624:34;:::i;:::-;6606:53;:::i;:::-;6593:66;;6523:142;;;:::o;6671:126::-;6721:9;6754:37;6785:5;6754:37;:::i;:::-;6741:50;;6671:126;;;:::o;6803:158::-;6885:9;6918:37;6949:5;6918:37;:::i;:::-;6905:50;;6803:158;;;:::o;6967:195::-;7086:69;7149:5;7086:69;:::i;:::-;7081:3;7074:82;6967:195;;:::o;7168:286::-;7293:4;7331:2;7320:9;7316:18;7308:26;;7344:103;7444:1;7433:9;7429:17;7420:6;7344:103;:::i;:::-;7168:286;;;;:::o;7460:77::-;7497:7;7526:5;7515:16;;7460:77;;;:::o;7543:118::-;7630:24;7648:5;7630:24;:::i;:::-;7625:3;7618:37;7543:118;;:::o;7667:222::-;7760:4;7798:2;7787:9;7783:18;7775:26;;7811:71;7879:1;7868:9;7864:17;7855:6;7811:71;:::i;:::-;7667:222;;;;:::o;7895:329::-;7954:6;8003:2;7991:9;7982:7;7978:23;7974:32;7971:119;;;8009:79;;:::i;:::-;7971:119;8129:1;8154:53;8199:7;8190:6;8179:9;8175:22;8154:53;:::i;:::-;8144:63;;8100:117;7895:329;;;;:::o;8230:468::-;8295:6;8303;8352:2;8340:9;8331:7;8327:23;8323:32;8320:119;;;8358:79;;:::i;:::-;8320:119;8478:1;8503:53;8548:7;8539:6;8528:9;8524:22;8503:53;:::i;:::-;8493:63;;8449:117;8605:2;8631:50;8673:7;8664:6;8653:9;8649:22;8631:50;:::i;:::-;8621:60;;8576:115;8230:468;;;;;:::o;8704:117::-;8813:1;8810;8803:12;8827:117;8936:1;8933;8926:12;8950:180;8998:77;8995:1;8988:88;9095:4;9092:1;9085:15;9119:4;9116:1;9109:15;9136:281;9219:27;9241:4;9219:27;:::i;:::-;9211:6;9207:40;9349:6;9337:10;9334:22;9313:18;9301:10;9298:34;9295:62;9292:88;;;9360:18;;:::i;:::-;9292:88;9400:10;9396:2;9389:22;9179:238;9136:281;;:::o;9423:129::-;9457:6;9484:20;;:::i;:::-;9474:30;;9513:33;9541:4;9533:6;9513:33;:::i;:::-;9423:129;;;:::o;9558:307::-;9619:4;9709:18;9701:6;9698:30;9695:56;;;9731:18;;:::i;:::-;9695:56;9769:29;9791:6;9769:29;:::i;:::-;9761:37;;9853:4;9847;9843:15;9835:23;;9558:307;;;:::o;9871:146::-;9968:6;9963:3;9958;9945:30;10009:1;10000:6;9995:3;9991:16;9984:27;9871:146;;;:::o;10023:423::-;10100:5;10125:65;10141:48;10182:6;10141:48;:::i;:::-;10125:65;:::i;:::-;10116:74;;10213:6;10206:5;10199:21;10251:4;10244:5;10240:16;10289:3;10280:6;10275:3;10271:16;10268:25;10265:112;;;10296:79;;:::i;:::-;10265:112;10386:54;10433:6;10428:3;10423;10386:54;:::i;:::-;10106:340;10023:423;;;;;:::o;10465:338::-;10520:5;10569:3;10562:4;10554:6;10550:17;10546:27;10536:122;;10577:79;;:::i;:::-;10536:122;10694:6;10681:20;10719:78;10793:3;10785:6;10778:4;10770:6;10766:17;10719:78;:::i;:::-;10710:87;;10526:277;10465:338;;;;:::o;10809:943::-;10904:6;10912;10920;10928;10977:3;10965:9;10956:7;10952:23;10948:33;10945:120;;;10984:79;;:::i;:::-;10945:120;11104:1;11129:53;11174:7;11165:6;11154:9;11150:22;11129:53;:::i;:::-;11119:63;;11075:117;11231:2;11257:53;11302:7;11293:6;11282:9;11278:22;11257:53;:::i;:::-;11247:63;;11202:118;11359:2;11385:53;11430:7;11421:6;11410:9;11406:22;11385:53;:::i;:::-;11375:63;;11330:118;11515:2;11504:9;11500:18;11487:32;11546:18;11538:6;11535:30;11532:117;;;11568:79;;:::i;:::-;11532:117;11673:62;11727:7;11718:6;11707:9;11703:22;11673:62;:::i;:::-;11663:72;;11458:287;10809:943;;;;;;;:::o;11758:474::-;11826:6;11834;11883:2;11871:9;11862:7;11858:23;11854:32;11851:119;;;11889:79;;:::i;:::-;11851:119;12009:1;12034:53;12079:7;12070:6;12059:9;12055:22;12034:53;:::i;:::-;12024:63;;11980:117;12136:2;12162:53;12207:7;12198:6;12187:9;12183:22;12162:53;:::i;:::-;12152:63;;12107:118;11758:474;;;;;:::o;12238:311::-;12315:4;12405:18;12397:6;12394:30;12391:56;;;12427:18;;:::i;:::-;12391:56;12477:4;12469:6;12465:17;12457:25;;12537:4;12531;12527:15;12519:23;;12238:311;;;:::o;12555:117::-;12664:1;12661;12654:12;12695:710;12791:5;12816:81;12832:64;12889:6;12832:64;:::i;:::-;12816:81;:::i;:::-;12807:90;;12917:5;12946:6;12939:5;12932:21;12980:4;12973:5;12969:16;12962:23;;13033:4;13025:6;13021:17;13013:6;13009:30;13062:3;13054:6;13051:15;13048:122;;;13081:79;;:::i;:::-;13048:122;13196:6;13179:220;13213:6;13208:3;13205:15;13179:220;;;13288:3;13317:37;13350:3;13338:10;13317:37;:::i;:::-;13312:3;13305:50;13384:4;13379:3;13375:14;13368:21;;13255:144;13239:4;13234:3;13230:14;13223:21;;13179:220;;;13183:21;12797:608;;12695:710;;;;;:::o;13428:370::-;13499:5;13548:3;13541:4;13533:6;13529:17;13525:27;13515:122;;13556:79;;:::i;:::-;13515:122;13673:6;13660:20;13698:94;13788:3;13780:6;13773:4;13765:6;13761:17;13698:94;:::i;:::-;13689:103;;13505:293;13428:370;;;;:::o;13804:311::-;13881:4;13971:18;13963:6;13960:30;13957:56;;;13993:18;;:::i;:::-;13957:56;14043:4;14035:6;14031:17;14023:25;;14103:4;14097;14093:15;14085:23;;13804:311;;;:::o;14138:710::-;14234:5;14259:81;14275:64;14332:6;14275:64;:::i;:::-;14259:81;:::i;:::-;14250:90;;14360:5;14389:6;14382:5;14375:21;14423:4;14416:5;14412:16;14405:23;;14476:4;14468:6;14464:17;14456:6;14452:30;14505:3;14497:6;14494:15;14491:122;;;14524:79;;:::i;:::-;14491:122;14639:6;14622:220;14656:6;14651:3;14648:15;14622:220;;;14731:3;14760:37;14793:3;14781:10;14760:37;:::i;:::-;14755:3;14748:50;14827:4;14822:3;14818:14;14811:21;;14698:144;14682:4;14677:3;14673:14;14666:21;;14622:220;;;14626:21;14240:608;;14138:710;;;;;:::o;14871:370::-;14942:5;14991:3;14984:4;14976:6;14972:17;14968:27;14958:122;;14999:79;;:::i;:::-;14958:122;15116:6;15103:20;15141:94;15231:3;15223:6;15216:4;15208:6;15204:17;15141:94;:::i;:::-;15132:103;;14948:293;14871:370;;;;:::o;15247:894::-;15365:6;15373;15422:2;15410:9;15401:7;15397:23;15393:32;15390:119;;;15428:79;;:::i;:::-;15390:119;15576:1;15565:9;15561:17;15548:31;15606:18;15598:6;15595:30;15592:117;;;15628:79;;:::i;:::-;15592:117;15733:78;15803:7;15794:6;15783:9;15779:22;15733:78;:::i;:::-;15723:88;;15519:302;15888:2;15877:9;15873:18;15860:32;15919:18;15911:6;15908:30;15905:117;;;15941:79;;:::i;:::-;15905:117;16046:78;16116:7;16107:6;16096:9;16092:22;16046:78;:::i;:::-;16036:88;;15831:303;15247:894;;;;;:::o;16147:180::-;16195:77;16192:1;16185:88;16292:4;16289:1;16282:15;16316:4;16313:1;16306:15;16333:320;16377:6;16414:1;16408:4;16404:12;16394:22;;16461:1;16455:4;16451:12;16482:18;16472:81;;16538:4;16530:6;16526:17;16516:27;;16472:81;16600:2;16592:6;16589:14;16569:18;16566:38;16563:84;;16619:18;;:::i;:::-;16563:84;16384:269;16333:320;;;:::o;16659:220::-;16799:34;16795:1;16787:6;16783:14;16776:58;16868:3;16863:2;16855:6;16851:15;16844:28;16659:220;:::o;16885:366::-;17027:3;17048:67;17112:2;17107:3;17048:67;:::i;:::-;17041:74;;17124:93;17213:3;17124:93;:::i;:::-;17242:2;17237:3;17233:12;17226:19;;16885:366;;;:::o;17257:419::-;17423:4;17461:2;17450:9;17446:18;17438:26;;17510:9;17504:4;17500:20;17496:1;17485:9;17481:17;17474:47;17538:131;17664:4;17538:131;:::i;:::-;17530:139;;17257:419;;;:::o;17682:248::-;17822:34;17818:1;17810:6;17806:14;17799:58;17891:31;17886:2;17878:6;17874:15;17867:56;17682:248;:::o;17936:366::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:419::-;18474:4;18512:2;18501:9;18497:18;18489:26;;18561:9;18555:4;18551:20;18547:1;18536:9;18532:17;18525:47;18589:131;18715:4;18589:131;:::i;:::-;18581:139;;18308:419;;;:::o;18733:169::-;18873:21;18869:1;18861:6;18857:14;18850:45;18733:169;:::o;18908:366::-;19050:3;19071:67;19135:2;19130:3;19071:67;:::i;:::-;19064:74;;19147:93;19236:3;19147:93;:::i;:::-;19265:2;19260:3;19256:12;19249:19;;18908:366;;;:::o;19280:419::-;19446:4;19484:2;19473:9;19469:18;19461:26;;19533:9;19527:4;19523:20;19519:1;19508:9;19504:17;19497:47;19561:131;19687:4;19561:131;:::i;:::-;19553:139;;19280:419;;;:::o;19705:180::-;19753:77;19750:1;19743:88;19850:4;19847:1;19840:15;19874:4;19871:1;19864:15;19891:171;19930:3;19953:24;19971:5;19953:24;:::i;:::-;19944:33;;19999:4;19992:5;19989:15;19986:41;;20007:18;;:::i;:::-;19986:41;20054:1;20047:5;20043:13;20036:20;;19891:171;;;:::o;20068:233::-;20107:3;20130:24;20148:5;20130:24;:::i;:::-;20121:33;;20176:66;20169:5;20166:77;20163:103;;20246:18;;:::i;:::-;20163:103;20293:1;20286:5;20282:13;20275:20;;20068:233;;;:::o;20307:194::-;20347:4;20367:20;20385:1;20367:20;:::i;:::-;20362:25;;20401:20;20419:1;20401:20;:::i;:::-;20396:25;;20445:1;20442;20438:9;20430:17;;20469:1;20463:4;20460:11;20457:37;;;20474:18;;:::i;:::-;20457:37;20307:194;;;;:::o;20507:161::-;20647:13;20643:1;20635:6;20631:14;20624:37;20507:161;:::o;20674:366::-;20816:3;20837:67;20901:2;20896:3;20837:67;:::i;:::-;20830:74;;20913:93;21002:3;20913:93;:::i;:::-;21031:2;21026:3;21022:12;21015:19;;20674:366;;;:::o;21046:419::-;21212:4;21250:2;21239:9;21235:18;21227:26;;21299:9;21293:4;21289:20;21285:1;21274:9;21270:17;21263:47;21327:131;21453:4;21327:131;:::i;:::-;21319:139;;21046:419;;;:::o;21471:170::-;21611:22;21607:1;21599:6;21595:14;21588:46;21471:170;:::o;21647:366::-;21789:3;21810:67;21874:2;21869:3;21810:67;:::i;:::-;21803:74;;21886:93;21975:3;21886:93;:::i;:::-;22004:2;21999:3;21995:12;21988:19;;21647:366;;;:::o;22019:419::-;22185:4;22223:2;22212:9;22208:18;22200:26;;22272:9;22266:4;22262:20;22258:1;22247:9;22243:17;22236:47;22300:131;22426:4;22300:131;:::i;:::-;22292:139;;22019:419;;;:::o;22444:147::-;22545:11;22582:3;22567:18;;22444:147;;;;:::o;22597:114::-;;:::o;22717:398::-;22876:3;22897:83;22978:1;22973:3;22897:83;:::i;:::-;22890:90;;22989:93;23078:3;22989:93;:::i;:::-;23107:1;23102:3;23098:11;23091:18;;22717:398;;;:::o;23121:379::-;23305:3;23327:147;23470:3;23327:147;:::i;:::-;23320:154;;23491:3;23484:10;;23121:379;;;:::o;23506:167::-;23646:19;23642:1;23634:6;23630:14;23623:43;23506:167;:::o;23679:366::-;23821:3;23842:67;23906:2;23901:3;23842:67;:::i;:::-;23835:74;;23918:93;24007:3;23918:93;:::i;:::-;24036:2;24031:3;24027:12;24020:19;;23679:366;;;:::o;24051:419::-;24217:4;24255:2;24244:9;24240:18;24232:26;;24304:9;24298:4;24294:20;24290:1;24279:9;24275:17;24268:47;24332:131;24458:4;24332:131;:::i;:::-;24324:139;;24051:419;;;:::o;24476:176::-;24616:28;24612:1;24604:6;24600:14;24593:52;24476:176;:::o;24658:366::-;24800:3;24821:67;24885:2;24880:3;24821:67;:::i;:::-;24814:74;;24897:93;24986:3;24897:93;:::i;:::-;25015:2;25010:3;25006:12;24999:19;;24658:366;;;:::o;25030:419::-;25196:4;25234:2;25223:9;25219:18;25211:26;;25283:9;25277:4;25273:20;25269:1;25258:9;25254:17;25247:47;25311:131;25437:4;25311:131;:::i;:::-;25303:139;;25030:419;;;:::o;25455:232::-;25595:34;25591:1;25583:6;25579:14;25572:58;25664:15;25659:2;25651:6;25647:15;25640:40;25455:232;:::o;25693:366::-;25835:3;25856:67;25920:2;25915:3;25856:67;:::i;:::-;25849:74;;25932:93;26021:3;25932:93;:::i;:::-;26050:2;26045:3;26041:12;26034:19;;25693:366;;;:::o;26065:419::-;26231:4;26269:2;26258:9;26254:18;26246:26;;26318:9;26312:4;26308:20;26304:1;26293:9;26289:17;26282:47;26346:131;26472:4;26346:131;:::i;:::-;26338:139;;26065:419;;;:::o;26490:174::-;26630:26;26626:1;26618:6;26614:14;26607:50;26490:174;:::o;26670:366::-;26812:3;26833:67;26897:2;26892:3;26833:67;:::i;:::-;26826:74;;26909:93;26998:3;26909:93;:::i;:::-;27027:2;27022:3;27018:12;27011:19;;26670:366;;;:::o;27042:419::-;27208:4;27246:2;27235:9;27231:18;27223:26;;27295:9;27289:4;27285:20;27281:1;27270:9;27266:17;27259:47;27323:131;27449:4;27323:131;:::i;:::-;27315:139;;27042:419;;;:::o;27467:228::-;27607:34;27603:1;27595:6;27591:14;27584:58;27676:11;27671:2;27663:6;27659:15;27652:36;27467:228;:::o;27701:366::-;27843:3;27864:67;27928:2;27923:3;27864:67;:::i;:::-;27857:74;;27940:93;28029:3;27940:93;:::i;:::-;28058:2;28053:3;28049:12;28042:19;;27701:366;;;:::o;28073:419::-;28239:4;28277:2;28266:9;28262:18;28254:26;;28326:9;28320:4;28316:20;28312:1;28301:9;28297:17;28290:47;28354:131;28480:4;28354:131;:::i;:::-;28346:139;;28073:419;;;:::o;28498:148::-;28600:11;28637:3;28622:18;;28498:148;;;;:::o;28652:390::-;28758:3;28786:39;28819:5;28786:39;:::i;:::-;28841:89;28923:6;28918:3;28841:89;:::i;:::-;28834:96;;28939:65;28997:6;28992:3;28985:4;28978:5;28974:16;28939:65;:::i;:::-;29029:6;29024:3;29020:16;29013:23;;28762:280;28652:390;;;;:::o;29048:435::-;29228:3;29250:95;29341:3;29332:6;29250:95;:::i;:::-;29243:102;;29362:95;29453:3;29444:6;29362:95;:::i;:::-;29355:102;;29474:3;29467:10;;29048:435;;;;;:::o;29489:160::-;29629:12;29625:1;29617:6;29613:14;29606:36;29489:160;:::o;29655:402::-;29815:3;29836:85;29918:2;29913:3;29836:85;:::i;:::-;29829:92;;29930:93;30019:3;29930:93;:::i;:::-;30048:2;30043:3;30039:12;30032:19;;29655:402;;;:::o;30063:152::-;30203:4;30199:1;30191:6;30187:14;30180:28;30063:152;:::o;30221:400::-;30381:3;30402:84;30484:1;30479:3;30402:84;:::i;:::-;30395:91;;30495:93;30584:3;30495:93;:::i;:::-;30613:1;30608:3;30604:11;30597:18;;30221:400;;;:::o;30627:967::-;31009:3;31031:148;31175:3;31031:148;:::i;:::-;31024:155;;31196:95;31287:3;31278:6;31196:95;:::i;:::-;31189:102;;31308:148;31452:3;31308:148;:::i;:::-;31301:155;;31473:95;31564:3;31555:6;31473:95;:::i;:::-;31466:102;;31585:3;31578:10;;30627:967;;;;;:::o;31600:225::-;31740:34;31736:1;31728:6;31724:14;31717:58;31809:8;31804:2;31796:6;31792:15;31785:33;31600:225;:::o;31831:366::-;31973:3;31994:67;32058:2;32053:3;31994:67;:::i;:::-;31987:74;;32070:93;32159:3;32070:93;:::i;:::-;32188:2;32183:3;32179:12;32172:19;;31831:366;;;:::o;32203:419::-;32369:4;32407:2;32396:9;32392:18;32384:26;;32456:9;32450:4;32446:20;32442:1;32431:9;32427:17;32420:47;32484:131;32610:4;32484:131;:::i;:::-;32476:139;;32203:419;;;:::o;32628:165::-;32768:17;32764:1;32756:6;32752:14;32745:41;32628:165;:::o;32799:366::-;32941:3;32962:67;33026:2;33021:3;32962:67;:::i;:::-;32955:74;;33038:93;33127:3;33038:93;:::i;:::-;33156:2;33151:3;33147:12;33140:19;;32799:366;;;:::o;33171:419::-;33337:4;33375:2;33364:9;33360:18;33352:26;;33424:9;33418:4;33414:20;33410:1;33399:9;33395:17;33388:47;33452:131;33578:4;33452:131;:::i;:::-;33444:139;;33171:419;;;:::o;33596:180::-;33644:77;33641:1;33634:88;33741:4;33738:1;33731:15;33765:4;33762:1;33755:15;33782:182;33922:34;33918:1;33910:6;33906:14;33899:58;33782:182;:::o;33970:366::-;34112:3;34133:67;34197:2;34192:3;34133:67;:::i;:::-;34126:74;;34209:93;34298:3;34209:93;:::i;:::-;34327:2;34322:3;34318:12;34311:19;;33970:366;;;:::o;34342:419::-;34508:4;34546:2;34535:9;34531:18;34523:26;;34595:9;34589:4;34585:20;34581:1;34570:9;34566:17;34559:47;34623:131;34749:4;34623:131;:::i;:::-;34615:139;;34342:419;;;:::o;34767:332::-;34888:4;34926:2;34915:9;34911:18;34903:26;;34939:71;35007:1;34996:9;34992:17;34983:6;34939:71;:::i;:::-;35020:72;35088:2;35077:9;35073:18;35064:6;35020:72;:::i;:::-;34767:332;;;;;:::o;35105:137::-;35159:5;35190:6;35184:13;35175:22;;35206:30;35230:5;35206:30;:::i;:::-;35105:137;;;;:::o;35248:345::-;35315:6;35364:2;35352:9;35343:7;35339:23;35335:32;35332:119;;;35370:79;;:::i;:::-;35332:119;35490:1;35515:61;35568:7;35559:6;35548:9;35544:22;35515:61;:::i;:::-;35505:71;;35461:125;35248:345;;;;:::o;35599:237::-;35739:34;35735:1;35727:6;35723:14;35716:58;35808:20;35803:2;35795:6;35791:15;35784:45;35599:237;:::o;35842:366::-;35984:3;36005:67;36069:2;36064:3;36005:67;:::i;:::-;35998:74;;36081:93;36170:3;36081:93;:::i;:::-;36199:2;36194:3;36190:12;36183:19;;35842:366;;;:::o;36214:419::-;36380:4;36418:2;36407:9;36403:18;36395:26;;36467:9;36461:4;36457:20;36453:1;36442:9;36438:17;36431:47;36495:131;36621:4;36495:131;:::i;:::-;36487:139;;36214:419;;;:::o;36639:224::-;36779:34;36775:1;36767:6;36763:14;36756:58;36848:7;36843:2;36835:6;36831:15;36824:32;36639:224;:::o;36869:366::-;37011:3;37032:67;37096:2;37091:3;37032:67;:::i;:::-;37025:74;;37108:93;37197:3;37108:93;:::i;:::-;37226:2;37221:3;37217:12;37210:19;;36869:366;;;:::o;37241:419::-;37407:4;37445:2;37434:9;37430:18;37422:26;;37494:9;37488:4;37484:20;37480:1;37469:9;37465:17;37458:47;37522:131;37648:4;37522:131;:::i;:::-;37514:139;;37241:419;;;:::o;37666:223::-;37806:34;37802:1;37794:6;37790:14;37783:58;37875:6;37870:2;37862:6;37858:15;37851:31;37666:223;:::o;37895:366::-;38037:3;38058:67;38122:2;38117:3;38058:67;:::i;:::-;38051:74;;38134:93;38223:3;38134:93;:::i;:::-;38252:2;38247:3;38243:12;38236:19;;37895:366;;;:::o;38267:419::-;38433:4;38471:2;38460:9;38456:18;38448:26;;38520:9;38514:4;38510:20;38506:1;38495:9;38491:17;38484:47;38548:131;38674:4;38548:131;:::i;:::-;38540:139;;38267:419;;;:::o;38692:175::-;38832:27;38828:1;38820:6;38816:14;38809:51;38692:175;:::o;38873:366::-;39015:3;39036:67;39100:2;39095:3;39036:67;:::i;:::-;39029:74;;39112:93;39201:3;39112:93;:::i;:::-;39230:2;39225:3;39221:12;39214:19;;38873:366;;;:::o;39245:419::-;39411:4;39449:2;39438:9;39434:18;39426:26;;39498:9;39492:4;39488:20;39484:1;39473:9;39469:17;39462:47;39526:131;39652:4;39526:131;:::i;:::-;39518:139;;39245:419;;;:::o;39670:181::-;39810:29;39806:1;39798:6;39794:14;39787:53;39670:181;:::o;39861:418::-;40021:3;40046:85;40128:2;40123:3;40046:85;:::i;:::-;40039:92;;40144:93;40233:3;40144:93;:::i;:::-;40266:2;40261:3;40257:12;40250:19;;39861:418;;;:::o;40289:159::-;40433:3;40429:1;40421:6;40417:14;40410:27;40289:159;:::o;40458:416::-;40618:3;40643:84;40725:1;40720:3;40643:84;:::i;:::-;40636:91;;40740:93;40829:3;40740:93;:::i;:::-;40862:1;40857:3;40853:11;40846:18;;40458:416;;;:::o;40884:827::-;41218:3;41244:148;41388:3;41244:148;:::i;:::-;41237:155;;41413:95;41504:3;41495:6;41413:95;:::i;:::-;41406:102;;41529:148;41673:3;41529:148;:::i;:::-;41522:155;;41698:3;41691:10;;40884:827;;;;:::o;41721:196::-;41773:77;41770:1;41763:88;41874:4;41871:1;41864:15;41902:4;41899:1;41892:15;41927:458;41967:7;41994:20;42012:1;41994:20;:::i;:::-;41989:25;;42032:20;42050:1;42032:20;:::i;:::-;42027:25;;42091:1;42088;42084:9;42117:30;42135:11;42117:30;:::i;:::-;42106:41;;42316:1;42307:7;42303:15;42300:1;42297:22;42273:1;42266:9;42242:95;42215:159;;42354:18;;:::i;:::-;42215:159;41975:410;41927:458;;;;:::o;42395:211::-;42435:3;42458:20;42476:1;42458:20;:::i;:::-;42453:25;;42496:20;42514:1;42496:20;:::i;:::-;42491:25;;42543:1;42540;42536:9;42529:16;;42568:3;42565:1;42562:10;42559:36;;;42575:18;;:::i;:::-;42559:36;42395:211;;;;:::o;42616:190::-;42760:34;42756:1;42748:6;42744:14;42737:58;42616:190;:::o;42816:382::-;42958:3;42983:67;43047:2;43042:3;42983:67;:::i;:::-;42976:74;;43063:93;43152:3;43063:93;:::i;:::-;43185:2;43180:3;43176:12;43169:19;;42816:382;;;:::o;43208:435::-;43374:4;43416:2;43405:9;43401:18;43393:26;;43469:9;43463:4;43459:20;43455:1;43444:9;43440:17;43433:47;43501:131;43627:4;43501:131;:::i;:::-;43493:139;;43208:435;;;:::o;43653:87::-;43692:7;43725:5;43714:16;;43653:87;;;:::o;43750:165::-;43859:45;43879:24;43897:5;43879:24;:::i;:::-;43859:45;:::i;:::-;43854:3;43847:58;43750:165;;:::o;43925:87::-;43964:7;43997:5;43986:16;;43925:87;;;:::o;44022:165::-;44131:45;44151:24;44169:5;44151:24;:::i;:::-;44131:45;:::i;:::-;44126:3;44119:58;44022:165;;:::o;44197:106::-;44230:8;44286:5;44282:2;44278:14;44253:39;;44197:106;;;:::o;44313:102::-;44352:7;44385:20;44399:5;44385:20;:::i;:::-;44374:31;;44313:102;;;:::o;44425:108::-;44464:7;44497:26;44517:5;44497:26;:::i;:::-;44486:37;;44425:108;;;:::o;44543:165::-;44652:45;44672:24;44690:5;44672:24;:::i;:::-;44652:45;:::i;:::-;44647:3;44640:58;44543:165;;:::o;44718:112::-;44763:7;44796:24;44814:5;44796:24;:::i;:::-;44785:35;;44718:112;;;:::o;44840:116::-;44887:7;44920:26;44940:5;44920:26;:::i;:::-;44909:37;;44840:116;;;:::o;44966:197::-;45091:61;45119:32;45145:5;45119:32;:::i;:::-;45091:61;:::i;:::-;45086:3;45079:74;44966:197;;:::o;45173:1049::-;45441:3;45460:75;45531:3;45522:6;45460:75;:::i;:::-;45564:2;45559:3;45555:12;45548:19;;45581:75;45652:3;45643:6;45581:75;:::i;:::-;45685:2;45680:3;45676:12;45669:19;;45702:75;45773:3;45764:6;45702:75;:::i;:::-;45806:2;45801:3;45797:12;45790:19;;45823:75;45894:3;45885:6;45823:75;:::i;:::-;45927:2;45922:3;45918:12;45911:19;;45944:75;46015:3;46006:6;45944:75;:::i;:::-;46048:2;46043:3;46039:12;46032:19;;46065:91;46152:3;46143:6;46065:91;:::i;:::-;46185:2;46180:3;46176:12;46169:19;;46209:3;46202:10;;45173:1049;;;;;;;;;:::o;46232:106::-;46283:6;46321:5;46315:12;46305:22;;46232:106;;;:::o;46348:180::-;46431:11;46469:6;46464:3;46457:19;46513:4;46508:3;46504:14;46489:29;;46348:180;;;;:::o;46538:393::-;46624:3;46656:38;46688:5;46656:38;:::i;:::-;46714:70;46777:6;46772:3;46714:70;:::i;:::-;46707:77;;46797:65;46855:6;46850:3;46843:4;46836:5;46832:16;46797:65;:::i;:::-;46891:29;46913:6;46891:29;:::i;:::-;46886:3;46882:39;46875:46;;46628:303;46538:393;;;;:::o;46941:668::-;47136:4;47178:3;47167:9;47163:19;47155:27;;47196:71;47264:1;47253:9;47249:17;47240:6;47196:71;:::i;:::-;47281:72;47349:2;47338:9;47334:18;47325:6;47281:72;:::i;:::-;47367;47435:2;47424:9;47420:18;47411:6;47367:72;:::i;:::-;47490:9;47484:4;47480:20;47475:2;47464:9;47460:18;47453:48;47522:76;47593:4;47584:6;47522:76;:::i;:::-;47514:84;;46941:668;;;;;;;:::o;47619:153::-;47675:5;47710:6;47704:13;47695:22;;47730:32;47756:5;47730:32;:::i;:::-;47619:153;;;;:::o;47782:373::-;47851:6;47904:2;47892:9;47883:7;47879:23;47875:32;47872:119;;;47910:79;;:::i;:::-;47872:119;48038:1;48067:63;48122:7;48113:6;48102:9;48098:22;48067:63;:::i;:::-;48057:73;;48005:139;47782:373;;;;:::o

Swarm Source

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