ETH Price: $3,323.64 (-3.50%)
Gas: 4 Gwei

Token

Meta Nindom: MEvolution (MNM)
 

Overview

Max Total Supply

3,916 MNM

Holders

280

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
10 MNM
0xce74026f15cb3bdda7f0caa0f11b84747a702008
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Ninja Metaverse NFT on Ethereum.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MetaNindomMEvolution

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-24
*/

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


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: contracts/token/ERC721ME.sol


// Creators: Meta Estates Labs
pragma solidity ^0.8.4;









contract ERC721ME is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

//Varibles list
    struct AddressData {
        uint64 balance;
        uint64 numMinted;
        uint64 numBurned;
        uint64 numEvolved;
        uint64 actionScore;
    }

    struct TokenOwnership {
        address addr;
        uint64  startTime;
        bool    burned;
    }

    uint64  internal _maxSupply;
    uint64  internal _mintPerAddress;
    uint64  internal _currentIndex;
    uint64  internal _currentEvolveIndex;
    uint64  internal _burnCounter;
    uint64  internal _evoCounter;

    string  private _name;
    string  private _symbol;

    mapping(uint256 => address) internal _tokenApprovals;
    mapping(address => AddressData) internal _addressData;
    mapping(uint256 => TokenOwnership) internal _ownerships;
    mapping(address => mapping(address => bool)) internal _operatorApprovals;

//Constructor
    constructor(
        string memory name_,
        string memory symbol_,
        uint64 maxSupply_,
        uint64 mintPerAddress_
    ){
        _name = name_;
        _symbol = symbol_;
        _maxSupply = maxSupply_;
        _mintPerAddress = mintPerAddress_; 

        _currentIndex = 1;
        _currentEvolveIndex = _maxSupply + 1;
    }

//Modifier
    modifier addressZeroChecker(address owner) {
        require(owner != address(0),"address(0)");
        _;
    }

    modifier approvedOrOwnerChecker(uint256 tokenId) {
        address addr = _ownerships[tokenId].addr;

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

        require(isApprovedOrOwner, "not qualified");
        _;
    }

    modifier exists(uint256 tokenId) {
        require((1 <= tokenId && tokenId < _currentIndex) || 
        (_maxSupply <= tokenId && tokenId < _currentEvolveIndex), "not mint");
        require(!_ownerships[tokenId].burned, "token burned");
        _;
    }


//Contract amount relatived functions  
    function totalSupply() public view returns (uint256) {
        return _currentIndex + _evoCounter - _burnCounter - 1;
    }

    function maxSupply() public view returns (uint256) {
        return _maxSupply - totalBurned();
    }

    function totalMinted() public view returns (uint64) {
        return _currentIndex - 1;
    }

    function totalBurned() public view returns (uint64) {
        return _burnCounter - _evoCounter;
    }

    function totalEvolved() public view returns (uint64) {
        return _evoCounter;
    }


//Contract Metadata relatived functions
    function name() public view override returns (string memory) {
        return _name;
    }

    function symbol() public view override returns (string memory) {
        return _symbol;
    }

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

//Owner address relatived function

    function balanceOf(address owner) public view override returns (uint256) {
        return _addressData[owner].balance;
    }

    function addressDataOf(address owner) public view returns (AddressData memory) {
        return _addressData[owner];
    }

    function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) {
        return _ownerships[tokenId];
    }
    
    function ownerOf(uint256 tokenId) public view override exists(tokenId) returns (address) {
        return _ownerships[tokenId].addr;
    }

//Approve relatived functions

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = _ownerships[tokenId].addr;

        require(to != owner, "approval to current owner");
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "not approval");
        
        _approve(to, tokenId, owner);
    }

    function _approve(address to, uint256 tokenId, address owner) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "approve to caller");

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

    function isApprovedForAll(address owner, address operator) public view override returns (bool) {
        return _operatorApprovals[owner][operator];
    }


//Transfer relatived functions
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert();
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private addressZeroChecker(to) approvedOrOwnerChecker(tokenId) {
        TokenOwnership storage ownership = _ownerships[tokenId];

        AddressData storage data = _addressData[from];

        _approve(address(0), tokenId, from);

        data.balance -= 1;
        data.actionScore += 1000;
        _addressData[to].balance += 1;

        ownership.addr = to;
        ownership.startTime = uint64(block.timestamp);

        emit Transfer(from, to, tokenId);
    }

//Mint relatived functions
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    function _safeMint(address to, uint256 quantity, bytes memory _data) internal {
        _mint(to, uint64(quantity), _data);
    }

    function _mint(address to, uint64 quantity, bytes memory _data) internal {
        AddressData storage data = _addressData[to];

        if (to.isContract() && !_checkContractOnERC721Received(address(0), to, _currentIndex, _data)) { 
            revert();
        }  

        data.balance += quantity;
        data.numMinted += quantity;

        uint64 updatedIndex = _currentIndex;
        uint64 end = updatedIndex + quantity;

        for (updatedIndex; updatedIndex < end; updatedIndex++ ) {
            _ownerships[updatedIndex].addr = to;
            _ownerships[updatedIndex].startTime = uint64(block.timestamp);
            emit Transfer(address(0), to, updatedIndex);
        }
   
        _currentIndex = end;
    }

    function _evolve(address to) internal {
        AddressData storage data = _addressData[to];

        require(data.numBurned > 1, "burn token firstly");

        uint64 startTokenId = _currentEvolveIndex;

        data.balance += 1;
        data.numBurned -= 1;
        data.numEvolved += 1;

        _ownerships[startTokenId].addr = to;
        _ownerships[startTokenId].startTime = uint64(block.timestamp);

        _currentEvolveIndex++;
        _evoCounter++;

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

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert();
            } else {
                assembly {
                    revert (add(32, reason), mload(reason))
                }
            }
        }
    }

//Burn relatived functions
    function _burn(uint256 tokenId) internal virtual {
        TokenOwnership storage ownership = _ownerships[tokenId];

        address addr = ownership.addr;

        _approve(address(0), tokenId, addr);

        _addressData[addr].balance -=  1;
        _addressData[addr].numBurned +=  1;

        ownership.addr = address(0);
        ownership.startTime = uint64(block.timestamp);
        ownership.burned = true;    

        _burnCounter++;

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

//Other functions
    function supportsInterface(bytes4 interfaceId) public view override(ERC165, IERC165) 
    returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
}
// File: contracts/project_MNM/MetaNindom.sol


// Creators: Meta Estates Labs;
pragma solidity ^0.8.4;







contract MetaNindomMEvolution is Ownable, ERC721ME, ReentrancyGuard {
  using Strings   for uint256;
  using SafeERC20 for IERC20;

//Varibles list
  enum JutsuType {
    MEvolvedJutsu,
    CryptoJutsu,
    MetaJutsu,
    UltimateJutsu
  }

  uint64 immutable MINT_ACTIONSCORE   =  5000;
  uint64 immutable BURN_ACTIONSCORE   =  5000;
  uint64 immutable EVOLVE_ACTIONSCORE = 10000;
  uint64 immutable POWER_ACTIONSCORE  = 10000;
  uint64 immutable STRING_ACTIONSCORE =  1500;

  uint256 public publicPriceWei;

  string public baseURI;
  string private _baseExtension = ".json";

  address public tokenContract;

  mapping (uint256 => string) public soulBound;
  mapping (uint256 => mapping (JutsuType => uint64)) public soulBoundPowByTokenId;

//Constructor
  constructor(
    uint64 amountForDev_,
    string memory initBaseURI_,
    address tokenContract_
  ) ERC721ME("Meta Nindom: MEvolution", "MNM", 12000, 50) {
    _safeMint(_msgSender(), amountForDev_);
    baseURI = initBaseURI_;
    tokenContract = tokenContract_;
  }

//Modifier
  modifier callerIsUser() {
    require(tx.origin == msg.sender, "contract caller");
    _;
  }

//Public sale relatived functions
  function publicMint(uint64 quantity) external payable callerIsUser {
    require(publicPriceWei != 0, "sale not begun");
    require(totalMinted() + quantity <= _maxSupply, "Max supply");
    require(msg.value >= publicPriceWei * quantity, "insufficient amount");

    AddressData storage data = _addressData[_msgSender()];

    require(data.numMinted + quantity <= _mintPerAddress, "Max mint");
    data.actionScore += MINT_ACTIONSCORE;

    _safeMint(msg.sender, quantity);   
  }

  function setPublicPriceWei(uint256 newPublicPriceWei) external onlyOwner {
    publicPriceWei = newPublicPriceWei;
  }

  function withdraw() external onlyOwner callerIsUser nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "withdraw failed");
  }

//Contract metadata relatived functions
  function tokenURI(uint256 tokenId) public view virtual override exists(tokenId) returns (string memory) {

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

  function _baseURI() internal view virtual returns (string memory) {
    return baseURI;
  }

//Address score relatived functions
  function _spendActionScore(uint64 spendScore) private {
    AddressData storage data = _addressData[_msgSender()];

    require (data.actionScore >= spendScore, "invalid score");

    data.actionScore -= spendScore;
  }

  function burnActionScore(uint64 spendScore) public {

    _spendActionScore(spendScore);
  }

  function addActionScoreByBurnWei(uint256 burnWei) public callerIsUser {
    require (IERC20(tokenContract).balanceOf(_msgSender()) >= burnWei, "invalid amount");

    IERC20(tokenContract).safeTransferFrom(_msgSender(), address(this), burnWei); 

    _addressData[_msgSender()].actionScore += uint64(burnWei / (1 ether));
  }

  function burn(uint256 tokenId) public callerIsUser approvedOrOwnerChecker(tokenId) {
    AddressData storage data = _addressData[ownerOf(tokenId)];

    getHodlScore(tokenId);

    _burn(tokenId);

    data.actionScore += BURN_ACTIONSCORE;
  }

  function getHodlScore(uint256 tokenId) public callerIsUser approvedOrOwnerChecker(tokenId) {
    TokenOwnership storage ownership = _ownerships[tokenId];

    uint64 score = (uint64(block.timestamp) - ownership.startTime) / 600 seconds;
    _addressData[ownership.addr].actionScore += score;

    ownership.startTime = uint64(block.timestamp);
  }

//Token score relatived function
  function evolveToken(uint256 tokenId) public callerIsUser approvedOrOwnerChecker(tokenId) {
    address owner = _ownerships[tokenId].addr;
    AddressData memory data = _addressData[owner];

    require(data.numBurned > 0, "burn token");
    require(data.actionScore >= EVOLVE_ACTIONSCORE, "invalid score");

    getHodlScore(tokenId);

    _spendActionScore(EVOLVE_ACTIONSCORE);
    _burn(tokenId);
    _evolve(owner);
  }

  function addSoulBound(uint256 tokenId, string memory newSoul) public approvedOrOwnerChecker(tokenId) {
    _spendActionScore(POWER_ACTIONSCORE);
    soulBound[tokenId] = newSoul;
  }

  function soulBoundPow(
    uint256 tokenId, 
    JutsuType jutsuType, 
    uint64 power
  ) external callerIsUser approvedOrOwnerChecker(tokenId) {
    _spendActionScore(power * POWER_ACTIONSCORE);
    soulBoundPowByTokenId[tokenId][jutsuType] += power;
  }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint64","name":"amountForDev_","type":"uint64"},{"internalType":"string","name":"initBaseURI_","type":"string"},{"internalType":"address","name":"tokenContract_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"burnWei","type":"uint256"}],"name":"addActionScoreByBurnWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newSoul","type":"string"}],"name":"addSoulBound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"addressDataOf","outputs":[{"components":[{"internalType":"uint64","name":"balance","type":"uint64"},{"internalType":"uint64","name":"numMinted","type":"uint64"},{"internalType":"uint64","name":"numBurned","type":"uint64"},{"internalType":"uint64","name":"numEvolved","type":"uint64"},{"internalType":"uint64","name":"actionScore","type":"uint64"}],"internalType":"struct ERC721ME.AddressData","name":"","type":"tuple"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"spendScore","type":"uint64"}],"name":"burnActionScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"evolveToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getHodlScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTime","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721ME.TokenOwnership","name":"","type":"tuple"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"quantity","type":"uint64"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicPriceWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPublicPriceWei","type":"uint256"}],"name":"setPublicPriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"soulBound","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"enum MetaNindomMEvolution.JutsuType","name":"jutsuType","type":"uint8"},{"internalType":"uint64","name":"power","type":"uint64"}],"name":"soulBoundPow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"enum MetaNindomMEvolution.JutsuType","name":"","type":"uint8"}],"name":"soulBoundPowByTokenId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenContract","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"totalBurned","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEvolved","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61012060405261138867ffffffffffffffff1660809067ffffffffffffffff1660c01b81525061138867ffffffffffffffff1660a09067ffffffffffffffff1660c01b81525061271067ffffffffffffffff1660c09067ffffffffffffffff1660c01b81525061271067ffffffffffffffff1660e09067ffffffffffffffff1660c01b8152506105dc67ffffffffffffffff166101009067ffffffffffffffff1660c01b8152506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000f3929190620008b3565b503480156200010157600080fd5b5060405162006e4b38038062006e4b833981810160405281019062000127919062000a58565b6040518060400160405280601781526020017f4d657461204e696e646f6d3a204d45766f6c7574696f6e0000000000000000008152506040518060400160405280600381526020017f4d4e4d0000000000000000000000000000000000000000000000000000000000815250612ee06032620001b8620001ac6200034c60201b60201c565b6200035460201b60201c565b8360039080519060200190620001d0929190620008b3565b508260049080519060200190620001e9929190620008b3565b5081600060146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018060086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600060149054906101000a900467ffffffffffffffff166200028a919062000c05565b600160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050506001600981905550620002e9620002d26200034c60201b60201c565b8467ffffffffffffffff166200041860201b60201c565b81600b908051906020019062000301929190620008b3565b5080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000ea0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200043a8282604051806020016040528060008152506200043e60201b60201c565b5050565b620004518383836200045660201b60201c565b505050565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050620004c58473ffffffffffffffffffffffffffffffffffffffff166200074b60201b62002da11760201c565b801562000504575062000502600085600160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16856200076e60201b60201c565b155b156200050f57600080fd5b828160000160008282829054906101000a900467ffffffffffffffff1662000538919062000c05565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550828160000160088282829054906101000a900467ffffffffffffffff1662000587919062000c05565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600160089054906101000a900467ffffffffffffffff16905060008482620005d8919062000c05565b90505b8067ffffffffffffffff168267ffffffffffffffff1610156200071a5785600760008467ffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600760008467ffffffffffffffff16815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508167ffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48180620007119062000d6a565b925050620005db565b80600160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200079c6200034c60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007c0949392919062000b36565b602060405180830381600087803b158015620007db57600080fd5b505af19250505080156200080f57506040513d601f19601f820116820180604052508101906200080c919062000a26565b60015b62000860573d806000811462000842576040519150601f19603f3d011682016040523d82523d6000602084013e62000847565b606091505b506000815114156200085857600080fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b828054620008c19062000cfe565b90600052602060002090601f016020900481019282620008e5576000855562000931565b82601f106200090057805160ff191683800117855562000931565b8280016001018555821562000931579182015b828111156200093057825182559160200191906001019062000913565b5b50905062000940919062000944565b5090565b5b808211156200095f57600081600090555060010162000945565b5090565b60006200097a620009748462000bb3565b62000b8a565b90508281526020810184848401111562000999576200099862000e32565b5b620009a684828562000cc8565b509392505050565b600081519050620009bf8162000e52565b92915050565b600081519050620009d68162000e6c565b92915050565b600082601f830112620009f457620009f362000e2d565b5b815162000a0684826020860162000963565b91505092915050565b60008151905062000a208162000e86565b92915050565b60006020828403121562000a3f5762000a3e62000e3c565b5b600062000a4f84828501620009c5565b91505092915050565b60008060006060848603121562000a745762000a7362000e3c565b5b600062000a848682870162000a0f565b935050602084015167ffffffffffffffff81111562000aa85762000aa762000e37565b5b62000ab686828701620009dc565b925050604062000ac986828701620009ae565b9150509250925092565b62000ade8162000c4a565b82525050565b600062000af18262000be9565b62000afd818562000bf4565b935062000b0f81856020860162000cc8565b62000b1a8162000e41565b840191505092915050565b62000b308162000caa565b82525050565b600060808201905062000b4d600083018762000ad3565b62000b5c602083018662000ad3565b62000b6b604083018562000b25565b818103606083015262000b7f818462000ae4565b905095945050505050565b600062000b9662000ba9565b905062000ba4828262000d34565b919050565b6000604051905090565b600067ffffffffffffffff82111562000bd15762000bd062000dfe565b5b62000bdc8262000e41565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600062000c128262000cb4565b915062000c1f8362000cb4565b92508267ffffffffffffffff0382111562000c3f5762000c3e62000da0565b5b828201905092915050565b600062000c578262000c8a565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60005b8381101562000ce857808201518184015260208101905062000ccb565b8381111562000cf8576000848401525b50505050565b6000600282049050600182168062000d1757607f821691505b6020821081141562000d2e5762000d2d62000dcf565b5b50919050565b62000d3f8262000e41565b810181811067ffffffffffffffff8211171562000d615762000d6062000dfe565b5b80604052505050565b600062000d778262000cb4565b915067ffffffffffffffff82141562000d955762000d9462000da0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b62000e5d8162000c4a565b811462000e6957600080fd5b50565b62000e778162000c5e565b811462000e8357600080fd5b50565b62000e918162000cb4565b811462000e9d57600080fd5b50565b60805160c01c60a05160c01c60c05160c01c60e05160c01c6101005160c01c615f4c62000eff60003960005050600081816118840152612b2f01526000818161124601526112cd015260006116fa01526000611cd70152615f4c6000f3fe6080604052600436106102255760003560e01c80636c0360eb11610123578063b3dde482116100ab578063d89135cd1161006f578063d89135cd14610808578063d9c6273714610833578063e2cbe2461461085c578063e985e9c514610887578063f2fde38b146108c457610225565b8063b3dde48214610725578063b88d4fde1461074e578063b9e34bd314610777578063c87b56dd146107a0578063d5abeb01146107dd57610225565b80639231ab2a116100f25780639231ab2a1461062c57806395d89b4114610669578063a22cb46514610694578063a2309ff8146106bd578063b2cbf40a146106e857610225565b80636c0360eb1461058257806370a08231146105ad578063715018a6146105ea5780638da5cb5b1461060157610225565b8063285194a9116101b15780635505f315116101755780635505f315146104aa57806355a373d6146104d35780635d463810146104fe5780636352211e146105295780636afcb7b01461056657610225565b8063285194a9146103ef5780632a03a101146104185780633ccfd60b1461044157806342842e0e1461045857806342966c681461048157610225565b8063081812fc116101f8578063081812fc146102f8578063095ea7b31461033557806318160ddd1461035e57806319df14301461038957806323b872dd146103c657610225565b806301ffc9a71461022a57806304d4f96c146102675780630639bfad146102a457806306fdde03146102cd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190614872565b6108ed565b60405161025e91906150eb565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190614682565b6109cf565b60405161029b9190615408565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906148cc565b610b22565b005b3480156102d957600080fd5b506102e2610ba8565b6040516102ef9190615106565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a91906148cc565b610c3a565b60405161032c919061504d565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190614805565b610c77565b005b34801561036a57600080fd5b50610373610dbe565b604051610380919061543e565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab91906148cc565b610e33565b6040516103bd9190615106565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e891906146ef565b610ed3565b005b3480156103fb57600080fd5b5061041660048036038101906104119190614a15565b610ee3565b005b34801561042457600080fd5b5061043f600480360381019061043a91906148cc565b610eef565b005b34801561044d57600080fd5b5061045661130b565b005b34801561046457600080fd5b5061047f600480360381019061047a91906146ef565b6114fa565b005b34801561048d57600080fd5b506104a860048036038101906104a391906148cc565b61151a565b005b3480156104b657600080fd5b506104d160048036038101906104cc91906149b9565b61176c565b005b3480156104df57600080fd5b506104e86118d7565b6040516104f5919061504d565b60405180910390f35b34801561050a57600080fd5b506105136118fd565b604051610520919061543e565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b91906148cc565b611903565b60405161055d919061504d565b60405180910390f35b610580600480360381019061057b9190614a15565b611a6e565b005b34801561058e57600080fd5b50610597611d5a565b6040516105a49190615106565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190614682565b611de8565b6040516105e1919061543e565b60405180910390f35b3480156105f657600080fd5b506105ff611e52565b005b34801561060d57600080fd5b50610616611eda565b604051610623919061504d565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906148cc565b611f03565b6040516106609190615423565b60405180910390f35b34801561067557600080fd5b5061067e611fd3565b60405161068b9190615106565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b691906147c5565b612065565b005b3480156106c957600080fd5b506106d26121e6565b6040516106df9190615459565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190614926565b61220f565b60405161071c9190615459565b60405180910390f35b34801561073157600080fd5b5061074c600480360381019061074791906148cc565b612245565b005b34801561075a57600080fd5b5061077560048036038101906107709190614742565b6124f4565b005b34801561078357600080fd5b5061079e600480360381019061079991906148cc565b612543565b005b3480156107ac57600080fd5b506107c760048036038101906107c291906148cc565b6127a3565b6040516107d49190615106565b60405180910390f35b3480156107e957600080fd5b506107f2612930565b6040516107ff919061543e565b60405180910390f35b34801561081457600080fd5b5061081d61296a565b60405161082a9190615459565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190614966565b6129a9565b005b34801561086857600080fd5b50610871612bf7565b60405161087e9190615459565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a991906146af565b612c15565b6040516108bb91906150eb565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190614682565b612ca9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c857506109c782612dc4565b5b9050919050565b6109d761439e565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050919050565b610b2a612e2e565b73ffffffffffffffffffffffffffffffffffffffff16610b48611eda565b73ffffffffffffffffffffffffffffffffffffffff1614610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590615268565b60405180910390fd5b80600a8190555050565b606060038054610bb790615822565b80601f0160208091040260200160405190810160405280929190818152602001828054610be390615822565b8015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b5050505050905090565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890615188565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d40612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480610d6f5750610d6e81610d69612e2e565b612c15565b5b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590615288565b60405180910390fd5b610db9838383612e36565b505050565b600060018060189054906101000a900467ffffffffffffffff16600260009054906101000a900467ffffffffffffffff16600160089054906101000a900467ffffffffffffffff16610e1091906155b4565b610e1a9190615724565b610e249190615724565b67ffffffffffffffff16905090565b600e6020528060005260406000206000915090508054610e5290615822565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7e90615822565b8015610ecb5780601f10610ea057610100808354040283529160200191610ecb565b820191906000526020600020905b815481529060010190602001808311610eae57829003601f168201915b505050505081565b610ede838383612ee8565b505050565b610eec816132cf565b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490615328565b60405180910390fd5b8060006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16610fba612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480610fe95750610fe882610fe3612e2e565b612c15565b5b8061102e5750610ff7612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661101684610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611070576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611067906152a8565b60405180910390fd5b60006007600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090506000816040015167ffffffffffffffff1611611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90615308565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16816080015167ffffffffffffffff1610156112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b6906151c8565b60405180910390fd5b6112c886612245565b6112f17f00000000000000000000000000000000000000000000000000000000000000006132cf565b6112fa866133d9565b61130382613677565b505050505050565b611313612e2e565b73ffffffffffffffffffffffffffffffffffffffff16611331611eda565b73ffffffffffffffffffffffffffffffffffffffff1614611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90615268565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90615328565b60405180910390fd5b6002600954141561143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906153c8565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161146990615038565b60006040518083038185875af1925050503d80600081146114a6576040519150601f19603f3d011682016040523d82523d6000602084013e6114ab565b606091505b50509050806114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906153e8565b60405180910390fd5b506001600981905550565b611515838383604051806020016040528060008152506124f4565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90615328565b60405180910390fd5b8060006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166115e5612e2e565b73ffffffffffffffffffffffffffffffffffffffff16148061161457506116138261160e612e2e565b612c15565b5b806116595750611622612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661164184610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061169b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611692906152a8565b60405180910390fd5b6000600660006116aa87611903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506116ef85612245565b6116f8856133d9565b7f00000000000000000000000000000000000000000000000000000000000000008160010160008282829054906101000a900467ffffffffffffffff1661173f91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050505050565b8160006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166117c9612e2e565b73ffffffffffffffffffffffffffffffffffffffff1614806117f857506117f7826117f2612e2e565b612c15565b5b8061183d5750611806612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661182584610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906152a8565b60405180910390fd5b6118a87f00000000000000000000000000000000000000000000000000000000000000006132cf565b83600e600087815260200190815260200160002090805190602001906118cf9291906143ff565b505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600081806001111580156119365750600160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b8061198c575080600060149054906101000a900467ffffffffffffffff1667ffffffffffffffff161115801561198b5750600160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b5b6119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c2906152e8565b60405180910390fd5b60076000828152602001908152602001600020600001601c9054906101000a900460ff1615611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2690615368565b60405180910390fd5b6007600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390615328565b60405180910390fd5b6000600a541415611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990615128565b60405180910390fd5b600060149054906101000a900467ffffffffffffffff1667ffffffffffffffff1681611b4c6121e6565b611b5691906155b4565b67ffffffffffffffff161115611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890615208565b60405180910390fd5b8067ffffffffffffffff16600a54611bb99190615654565b341015611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290615168565b60405180910390fd5b600060066000611c09612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16828260000160089054906101000a900467ffffffffffffffff16611c8a91906155b4565b67ffffffffffffffff161115611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90615228565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160010160008282829054906101000a900467ffffffffffffffff16611d1c91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550611d56338367ffffffffffffffff166139cf565b5050565b600b8054611d6790615822565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9390615822565b8015611de05780601f10611db557610100808354040283529160200191611de0565b820191906000526020600020905b815481529060010190602001808311611dc357829003601f168201915b505050505081565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611e5a612e2e565b73ffffffffffffffffffffffffffffffffffffffff16611e78611eda565b73ffffffffffffffffffffffffffffffffffffffff1614611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590615268565b60405180910390fd5b611ed860006139ed565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f0b614485565b600760008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050919050565b606060048054611fe290615822565b80601f016020809104026020016040519081016040528092919081815260200182805461200e90615822565b801561205b5780601f106120305761010080835404028352916020019161205b565b820191906000526020600020905b81548152906001019060200180831161203e57829003601f168201915b5050505050905090565b61206d612e2e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d2906152c8565b60405180910390fd5b80600860006120e8612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612195612e2e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121da91906150eb565b60405180910390a35050565b600060018060089054906101000a900467ffffffffffffffff1661220a9190615724565b905090565b600f6020528160005260406000206020528060005260406000206000915091509054906101000a900467ffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90615328565b60405180910390fd5b8060006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16612310612e2e565b73ffffffffffffffffffffffffffffffffffffffff16148061233f575061233e82612339612e2e565b612c15565b5b80612384575061234d612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661236c84610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd906152a8565b60405180910390fd5b600060076000868152602001908152602001600020905060006102588260000160149054906101000a900467ffffffffffffffff16426124069190615724565b6124109190615623565b905080600660008460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282829054906101000a900467ffffffffffffffff1661249b91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550428260000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505050565b6124ff848484612ee8565b61251e8373ffffffffffffffffffffffffffffffffffffffff16612da1565b8015612533575061253184848484613ab1565b155b1561253d57600080fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890615328565b60405180910390fd5b80600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316125f8612e2e565b6040518263ffffffff1660e01b8152600401612614919061504d565b60206040518083038186803b15801561262c57600080fd5b505afa158015612640573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266491906148f9565b10156126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906151a8565b60405180910390fd5b6126fb6126b0612e2e565b3083600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613be4909392919063ffffffff16565b670de0b6b3a76400008161270f91906155f2565b6006600061271b612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282829054906101000a900467ffffffffffffffff1661277a91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b606081806001111580156127d65750600160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b8061282c575080600060149054906101000a900467ffffffffffffffff1667ffffffffffffffff161115801561282b5750600160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b5b61286b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612862906152e8565b60405180910390fd5b60076000828152602001908152602001600020600001601c9054906101000a900460ff16156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c690615368565b60405180910390fd5b60006128d9613c6d565b905060008151116128f95760405180602001604052806000815250612927565b8061290385613cff565b600c60405160200161291793929190615007565b6040516020818303038152906040525b92505050919050565b600061293a61296a565b600060149054906101000a900467ffffffffffffffff1661295b9190615724565b67ffffffffffffffff16905090565b6000600260009054906101000a900467ffffffffffffffff16600160189054906101000a900467ffffffffffffffff166129a49190615724565b905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e90615328565b60405180910390fd5b8260006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16612a74612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480612aa35750612aa282612a9d612e2e565b612c15565b5b80612ae85750612ab1612e2e565b73ffffffffffffffffffffffffffffffffffffffff16612ad084610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b21906152a8565b60405180910390fd5b612b5e7f000000000000000000000000000000000000000000000000000000000000000085612b5991906156ae565b6132cf565b83600f60008881526020019081526020016000206000876003811115612b8757612b8661598e565b5b6003811115612b9957612b9861598e565b5b815260200190815260200160002060008282829054906101000a900467ffffffffffffffff16612bc991906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505050565b6000600260009054906101000a900467ffffffffffffffff16905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612cb1612e2e565b73ffffffffffffffffffffffffffffffffffffffff16612ccf611eda565b73ffffffffffffffffffffffffffffffffffffffff1614612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90615268565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90615148565b60405180910390fd5b612d9e816139ed565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f50906153a8565b60405180910390fd5b8160006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16612fb6612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480612fe55750612fe482612fdf612e2e565b612c15565b5b8061302a5750612ff3612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661301284610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061306c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613063906152a8565b60405180910390fd5b60006007600087815260200190815260200160002090506000600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506130d26000888b612e36565b60018160000160008282829054906101000a900467ffffffffffffffff166130fa9190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506103e88160010160008282829054906101000a900467ffffffffffffffff1661314991906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff166131d591906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428260000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550868873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050505050565b6000600660006132dd612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508167ffffffffffffffff168160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161015613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337f906151c8565b60405180910390fd5b818160010160008282829054906101000a900467ffffffffffffffff166133af9190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b600060076000838152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061342560008483612e36565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff1661348b9190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a900467ffffffffffffffff1661351791906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428260000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600182600001601c6101000a81548160ff0219169083151502179055506001601881819054906101000a900467ffffffffffffffff16809291906135ef906158ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505082600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161161371f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371690615248565b60405180910390fd5b6000600160109054906101000a900467ffffffffffffffff16905060018260000160008282829054906101000a900467ffffffffffffffff1661376291906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018260000160108282829054906101000a900467ffffffffffffffff166137b09190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018260000160188282829054906101000a900467ffffffffffffffff166137fe91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600760008367ffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600760008367ffffffffffffffff16815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001601081819054906101000a900467ffffffffffffffff16809291906138f0906158ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506002600081819054906101000a900467ffffffffffffffff168092919061393d906158ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508067ffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6139e9828260405180602001604052806000815250613e60565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613ad7612e2e565b8786866040518563ffffffff1660e01b8152600401613af9949392919061509f565b602060405180830381600087803b158015613b1357600080fd5b505af1925050508015613b4457506040513d601f19601f82011682018060405250810190613b41919061489f565b60015b613b91573d8060008114613b74576040519150601f19603f3d011682016040523d82523d6000602084013e613b79565b606091505b50600081511415613b8957600080fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b613c67846323b872dd60e01b858585604051602401613c0593929190615068565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e70565b50505050565b6060600b8054613c7c90615822565b80601f0160208091040260200160405190810160405280929190818152602001828054613ca890615822565b8015613cf55780601f10613cca57610100808354040283529160200191613cf5565b820191906000526020600020905b815481529060010190602001808311613cd857829003601f168201915b5050505050905090565b60606000821415613d47576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613e5b565b600082905060005b60008214613d79578080613d6290615885565b915050600a82613d7291906155f2565b9150613d4f565b60008167ffffffffffffffff811115613d9557613d94615a1b565b5b6040519080825280601f01601f191660200182016040528015613dc75781602001600182028036833780820191505090505b5090505b60008514613e5457600182613de091906156f0565b9150600a85613def91906158ff565b6030613dfb919061555e565b60f81b818381518110613e1157613e106159ec565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613e4d91906155f2565b9450613dcb565b8093505050505b919050565b613e6b838383613f37565b505050565b6000613ed2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661420b9092919063ffffffff16565b9050600081511115613f325780806020019051810190613ef29190614845565b613f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2890615388565b60405180910390fd5b5b505050565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050613f998473ffffffffffffffffffffffffffffffffffffffff16612da1565b8015613fcf5750613fcd600085600160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1685613ab1565b155b15613fd957600080fd5b828160000160008282829054906101000a900467ffffffffffffffff1661400091906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550828160000160088282829054906101000a900467ffffffffffffffff1661404d91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600160089054906101000a900467ffffffffffffffff1690506000848261409c91906155b4565b90505b8067ffffffffffffffff168267ffffffffffffffff1610156141da5785600760008467ffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600760008467ffffffffffffffff16815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508167ffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a481806141d2906158ce565b92505061409f565b80600160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505050565b606061421a8484600085614223565b90509392505050565b606082471015614268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161425f906151e8565b60405180910390fd5b61427185612da1565b6142b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a790615348565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516142d99190614ff0565b60006040518083038185875af1925050503d8060008114614316576040519150601f19603f3d011682016040523d82523d6000602084013e61431b565b606091505b509150915061432b828286614337565b92505050949350505050565b6060831561434757829050614397565b60008351111561435a5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161438e9190615106565b60405180910390fd5b9392505050565b6040518060a00160405280600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff1681525090565b82805461440b90615822565b90600052602060002090601f01602090048101928261442d5760008555614474565b82601f1061444657805160ff1916838001178555614474565b82800160010185558215614474579182015b82811115614473578251825591602001919060010190614458565b5b50905061448191906144c8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156144e15760008160009055506001016144c9565b5090565b60006144f86144f384615499565b615474565b90508281526020810184848401111561451457614513615a4f565b5b61451f8482856157e0565b509392505050565b600061453a614535846154ca565b615474565b90508281526020810184848401111561455657614555615a4f565b5b6145618482856157e0565b509392505050565b60008135905061457881615e93565b92915050565b60008135905061458d81615eaa565b92915050565b6000815190506145a281615eaa565b92915050565b6000813590506145b781615ec1565b92915050565b6000815190506145cc81615ec1565b92915050565b600082601f8301126145e7576145e6615a4a565b5b81356145f78482602086016144e5565b91505092915050565b60008135905061460f81615ed8565b92915050565b600082601f83011261462a57614629615a4a565b5b813561463a848260208601614527565b91505092915050565b60008135905061465281615ee8565b92915050565b60008151905061466781615ee8565b92915050565b60008135905061467c81615eff565b92915050565b60006020828403121561469857614697615a59565b5b60006146a684828501614569565b91505092915050565b600080604083850312156146c6576146c5615a59565b5b60006146d485828601614569565b92505060206146e585828601614569565b9150509250929050565b60008060006060848603121561470857614707615a59565b5b600061471686828701614569565b935050602061472786828701614569565b925050604061473886828701614643565b9150509250925092565b6000806000806080858703121561475c5761475b615a59565b5b600061476a87828801614569565b945050602061477b87828801614569565b935050604061478c87828801614643565b925050606085013567ffffffffffffffff8111156147ad576147ac615a54565b5b6147b9878288016145d2565b91505092959194509250565b600080604083850312156147dc576147db615a59565b5b60006147ea85828601614569565b92505060206147fb8582860161457e565b9150509250929050565b6000806040838503121561481c5761481b615a59565b5b600061482a85828601614569565b925050602061483b85828601614643565b9150509250929050565b60006020828403121561485b5761485a615a59565b5b600061486984828501614593565b91505092915050565b60006020828403121561488857614887615a59565b5b6000614896848285016145a8565b91505092915050565b6000602082840312156148b5576148b4615a59565b5b60006148c3848285016145bd565b91505092915050565b6000602082840312156148e2576148e1615a59565b5b60006148f084828501614643565b91505092915050565b60006020828403121561490f5761490e615a59565b5b600061491d84828501614658565b91505092915050565b6000806040838503121561493d5761493c615a59565b5b600061494b85828601614643565b925050602061495c85828601614600565b9150509250929050565b60008060006060848603121561497f5761497e615a59565b5b600061498d86828701614643565b935050602061499e86828701614600565b92505060406149af8682870161466d565b9150509250925092565b600080604083850312156149d0576149cf615a59565b5b60006149de85828601614643565b925050602083013567ffffffffffffffff8111156149ff576149fe615a54565b5b614a0b85828601614615565b9150509250929050565b600060208284031215614a2b57614a2a615a59565b5b6000614a398482850161466d565b91505092915050565b614a4b81615758565b82525050565b614a5a81615758565b82525050565b614a698161576a565b82525050565b614a788161576a565b82525050565b6000614a8982615510565b614a938185615526565b9350614aa38185602086016157ef565b614aac81615a5e565b840191505092915050565b6000614ac282615510565b614acc8185615537565b9350614adc8185602086016157ef565b80840191505092915050565b6000614af38261551b565b614afd8185615542565b9350614b0d8185602086016157ef565b614b1681615a5e565b840191505092915050565b6000614b2c8261551b565b614b368185615553565b9350614b468185602086016157ef565b80840191505092915050565b60008154614b5f81615822565b614b698186615553565b94506001821660008114614b845760018114614b9557614bc8565b60ff19831686528186019350614bc8565b614b9e856154fb565b60005b83811015614bc057815481890152600182019150602081019050614ba1565b838801955050505b50505092915050565b6000614bde600e83615542565b9150614be982615a6f565b602082019050919050565b6000614c01602683615542565b9150614c0c82615a98565b604082019050919050565b6000614c24601383615542565b9150614c2f82615ae7565b602082019050919050565b6000614c47601983615542565b9150614c5282615b10565b602082019050919050565b6000614c6a600e83615542565b9150614c7582615b39565b602082019050919050565b6000614c8d600d83615542565b9150614c9882615b62565b602082019050919050565b6000614cb0602683615542565b9150614cbb82615b8b565b604082019050919050565b6000614cd3600a83615542565b9150614cde82615bda565b602082019050919050565b6000614cf6600883615542565b9150614d0182615c03565b602082019050919050565b6000614d19601283615542565b9150614d2482615c2c565b602082019050919050565b6000614d3c602083615542565b9150614d4782615c55565b602082019050919050565b6000614d5f600c83615542565b9150614d6a82615c7e565b602082019050919050565b6000614d82600d83615542565b9150614d8d82615ca7565b602082019050919050565b6000614da5601183615542565b9150614db082615cd0565b602082019050919050565b6000614dc8600883615542565b9150614dd382615cf9565b602082019050919050565b6000614deb600083615537565b9150614df682615d22565b600082019050919050565b6000614e0e600a83615542565b9150614e1982615d25565b602082019050919050565b6000614e31600f83615542565b9150614e3c82615d4e565b602082019050919050565b6000614e54601d83615542565b9150614e5f82615d77565b602082019050919050565b6000614e77600c83615542565b9150614e8282615da0565b602082019050919050565b6000614e9a602a83615542565b9150614ea582615dc9565b604082019050919050565b6000614ebd600a83615542565b9150614ec882615e18565b602082019050919050565b6000614ee0601f83615542565b9150614eeb82615e41565b602082019050919050565b6000614f03600f83615542565b9150614f0e82615e6a565b602082019050919050565b60a082016000820151614f2f6000850182614fd2565b506020820151614f426020850182614fd2565b506040820151614f556040850182614fd2565b506060820151614f686060850182614fd2565b506080820151614f7b6080850182614fd2565b50505050565b606082016000820151614f976000850182614a42565b506020820151614faa6020850182614fd2565b506040820151614fbd6040850182614a60565b50505050565b614fcc816157c2565b82525050565b614fdb816157cc565b82525050565b614fea816157cc565b82525050565b6000614ffc8284614ab7565b915081905092915050565b60006150138286614b21565b915061501f8285614b21565b915061502b8284614b52565b9150819050949350505050565b600061504382614dde565b9150819050919050565b60006020820190506150626000830184614a51565b92915050565b600060608201905061507d6000830186614a51565b61508a6020830185614a51565b6150976040830184614fc3565b949350505050565b60006080820190506150b46000830187614a51565b6150c16020830186614a51565b6150ce6040830185614fc3565b81810360608301526150e08184614a7e565b905095945050505050565b60006020820190506151006000830184614a6f565b92915050565b600060208201905081810360008301526151208184614ae8565b905092915050565b6000602082019050818103600083015261514181614bd1565b9050919050565b6000602082019050818103600083015261516181614bf4565b9050919050565b6000602082019050818103600083015261518181614c17565b9050919050565b600060208201905081810360008301526151a181614c3a565b9050919050565b600060208201905081810360008301526151c181614c5d565b9050919050565b600060208201905081810360008301526151e181614c80565b9050919050565b6000602082019050818103600083015261520181614ca3565b9050919050565b6000602082019050818103600083015261522181614cc6565b9050919050565b6000602082019050818103600083015261524181614ce9565b9050919050565b6000602082019050818103600083015261526181614d0c565b9050919050565b6000602082019050818103600083015261528181614d2f565b9050919050565b600060208201905081810360008301526152a181614d52565b9050919050565b600060208201905081810360008301526152c181614d75565b9050919050565b600060208201905081810360008301526152e181614d98565b9050919050565b6000602082019050818103600083015261530181614dbb565b9050919050565b6000602082019050818103600083015261532181614e01565b9050919050565b6000602082019050818103600083015261534181614e24565b9050919050565b6000602082019050818103600083015261536181614e47565b9050919050565b6000602082019050818103600083015261538181614e6a565b9050919050565b600060208201905081810360008301526153a181614e8d565b9050919050565b600060208201905081810360008301526153c181614eb0565b9050919050565b600060208201905081810360008301526153e181614ed3565b9050919050565b6000602082019050818103600083015261540181614ef6565b9050919050565b600060a08201905061541d6000830184614f19565b92915050565b60006060820190506154386000830184614f81565b92915050565b60006020820190506154536000830184614fc3565b92915050565b600060208201905061546e6000830184614fe1565b92915050565b600061547e61548f565b905061548a8282615854565b919050565b6000604051905090565b600067ffffffffffffffff8211156154b4576154b3615a1b565b5b6154bd82615a5e565b9050602081019050919050565b600067ffffffffffffffff8211156154e5576154e4615a1b565b5b6154ee82615a5e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615569826157c2565b9150615574836157c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156155a9576155a8615930565b5b828201905092915050565b60006155bf826157cc565b91506155ca836157cc565b92508267ffffffffffffffff038211156155e7576155e6615930565b5b828201905092915050565b60006155fd826157c2565b9150615608836157c2565b9250826156185761561761595f565b5b828204905092915050565b600061562e826157cc565b9150615639836157cc565b9250826156495761564861595f565b5b828204905092915050565b600061565f826157c2565b915061566a836157c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156a3576156a2615930565b5b828202905092915050565b60006156b9826157cc565b91506156c4836157cc565b92508167ffffffffffffffff04831182151516156156e5576156e4615930565b5b828202905092915050565b60006156fb826157c2565b9150615706836157c2565b92508282101561571957615718615930565b5b828203905092915050565b600061572f826157cc565b915061573a836157cc565b92508282101561574d5761574c615930565b5b828203905092915050565b6000615763826157a2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561580d5780820151818401526020810190506157f2565b8381111561581c576000848401525b50505050565b6000600282049050600182168061583a57607f821691505b6020821081141561584e5761584d6159bd565b5b50919050565b61585d82615a5e565b810181811067ffffffffffffffff8211171561587c5761587b615a1b565b5b80604052505050565b6000615890826157c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156158c3576158c2615930565b5b600182019050919050565b60006158d9826157cc565b915067ffffffffffffffff8214156158f4576158f3615930565b5b600182019050919050565b600061590a826157c2565b9150615915836157c2565b9250826159255761592461595f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f73616c65206e6f7420626567756e000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e7420616d6f756e7400000000000000000000000000600082015250565b7f617070726f76616c20746f2063757272656e74206f776e657200000000000000600082015250565b7f696e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f696e76616c69642073636f726500000000000000000000000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7900000000000000000000000000000000000000000000600082015250565b7f4d6178206d696e74000000000000000000000000000000000000000000000000600082015250565b7f6275726e20746f6b656e2066697273746c790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f7420617070726f76616c0000000000000000000000000000000000000000600082015250565b7f6e6f74207175616c696669656400000000000000000000000000000000000000600082015250565b7f617070726f766520746f2063616c6c6572000000000000000000000000000000600082015250565b7f6e6f74206d696e74000000000000000000000000000000000000000000000000600082015250565b50565b7f6275726e20746f6b656e00000000000000000000000000000000000000000000600082015250565b7f636f6e74726163742063616c6c65720000000000000000000000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f746f6b656e206275726e65640000000000000000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f6164647265737328302900000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b615e9c81615758565b8114615ea757600080fd5b50565b615eb38161576a565b8114615ebe57600080fd5b50565b615eca81615776565b8114615ed557600080fd5b50565b60048110615ee557600080fd5b50565b615ef1816157c2565b8114615efc57600080fd5b50565b615f08816157cc565b8114615f1357600080fd5b5056fea26469706673582212201a7f9091ca6234afe228fdfa1f2131acde5c294f37b26a769f0be0d879d5437a64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000060000000000000000000000000b4afbb2a566830806e7258c2fcfb0fd7799e0f560000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d52346559416e337341516d7335516872596547637158543647755a48735a7a3752414c63624668416a3739732f00000000000000000000

Deployed Bytecode

0x6080604052600436106102255760003560e01c80636c0360eb11610123578063b3dde482116100ab578063d89135cd1161006f578063d89135cd14610808578063d9c6273714610833578063e2cbe2461461085c578063e985e9c514610887578063f2fde38b146108c457610225565b8063b3dde48214610725578063b88d4fde1461074e578063b9e34bd314610777578063c87b56dd146107a0578063d5abeb01146107dd57610225565b80639231ab2a116100f25780639231ab2a1461062c57806395d89b4114610669578063a22cb46514610694578063a2309ff8146106bd578063b2cbf40a146106e857610225565b80636c0360eb1461058257806370a08231146105ad578063715018a6146105ea5780638da5cb5b1461060157610225565b8063285194a9116101b15780635505f315116101755780635505f315146104aa57806355a373d6146104d35780635d463810146104fe5780636352211e146105295780636afcb7b01461056657610225565b8063285194a9146103ef5780632a03a101146104185780633ccfd60b1461044157806342842e0e1461045857806342966c681461048157610225565b8063081812fc116101f8578063081812fc146102f8578063095ea7b31461033557806318160ddd1461035e57806319df14301461038957806323b872dd146103c657610225565b806301ffc9a71461022a57806304d4f96c146102675780630639bfad146102a457806306fdde03146102cd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190614872565b6108ed565b60405161025e91906150eb565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190614682565b6109cf565b60405161029b9190615408565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906148cc565b610b22565b005b3480156102d957600080fd5b506102e2610ba8565b6040516102ef9190615106565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a91906148cc565b610c3a565b60405161032c919061504d565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190614805565b610c77565b005b34801561036a57600080fd5b50610373610dbe565b604051610380919061543e565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab91906148cc565b610e33565b6040516103bd9190615106565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e891906146ef565b610ed3565b005b3480156103fb57600080fd5b5061041660048036038101906104119190614a15565b610ee3565b005b34801561042457600080fd5b5061043f600480360381019061043a91906148cc565b610eef565b005b34801561044d57600080fd5b5061045661130b565b005b34801561046457600080fd5b5061047f600480360381019061047a91906146ef565b6114fa565b005b34801561048d57600080fd5b506104a860048036038101906104a391906148cc565b61151a565b005b3480156104b657600080fd5b506104d160048036038101906104cc91906149b9565b61176c565b005b3480156104df57600080fd5b506104e86118d7565b6040516104f5919061504d565b60405180910390f35b34801561050a57600080fd5b506105136118fd565b604051610520919061543e565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b91906148cc565b611903565b60405161055d919061504d565b60405180910390f35b610580600480360381019061057b9190614a15565b611a6e565b005b34801561058e57600080fd5b50610597611d5a565b6040516105a49190615106565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190614682565b611de8565b6040516105e1919061543e565b60405180910390f35b3480156105f657600080fd5b506105ff611e52565b005b34801561060d57600080fd5b50610616611eda565b604051610623919061504d565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906148cc565b611f03565b6040516106609190615423565b60405180910390f35b34801561067557600080fd5b5061067e611fd3565b60405161068b9190615106565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b691906147c5565b612065565b005b3480156106c957600080fd5b506106d26121e6565b6040516106df9190615459565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190614926565b61220f565b60405161071c9190615459565b60405180910390f35b34801561073157600080fd5b5061074c600480360381019061074791906148cc565b612245565b005b34801561075a57600080fd5b5061077560048036038101906107709190614742565b6124f4565b005b34801561078357600080fd5b5061079e600480360381019061079991906148cc565b612543565b005b3480156107ac57600080fd5b506107c760048036038101906107c291906148cc565b6127a3565b6040516107d49190615106565b60405180910390f35b3480156107e957600080fd5b506107f2612930565b6040516107ff919061543e565b60405180910390f35b34801561081457600080fd5b5061081d61296a565b60405161082a9190615459565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190614966565b6129a9565b005b34801561086857600080fd5b50610871612bf7565b60405161087e9190615459565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a991906146af565b612c15565b6040516108bb91906150eb565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190614682565b612ca9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c857506109c782612dc4565b5b9050919050565b6109d761439e565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050919050565b610b2a612e2e565b73ffffffffffffffffffffffffffffffffffffffff16610b48611eda565b73ffffffffffffffffffffffffffffffffffffffff1614610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590615268565b60405180910390fd5b80600a8190555050565b606060038054610bb790615822565b80601f0160208091040260200160405190810160405280929190818152602001828054610be390615822565b8015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b5050505050905090565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890615188565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d40612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480610d6f5750610d6e81610d69612e2e565b612c15565b5b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590615288565b60405180910390fd5b610db9838383612e36565b505050565b600060018060189054906101000a900467ffffffffffffffff16600260009054906101000a900467ffffffffffffffff16600160089054906101000a900467ffffffffffffffff16610e1091906155b4565b610e1a9190615724565b610e249190615724565b67ffffffffffffffff16905090565b600e6020528060005260406000206000915090508054610e5290615822565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7e90615822565b8015610ecb5780601f10610ea057610100808354040283529160200191610ecb565b820191906000526020600020905b815481529060010190602001808311610eae57829003601f168201915b505050505081565b610ede838383612ee8565b505050565b610eec816132cf565b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490615328565b60405180910390fd5b8060006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16610fba612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480610fe95750610fe882610fe3612e2e565b612c15565b5b8061102e5750610ff7612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661101684610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611070576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611067906152a8565b60405180910390fd5b60006007600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090506000816040015167ffffffffffffffff1611611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90615308565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000271067ffffffffffffffff16816080015167ffffffffffffffff1610156112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b6906151c8565b60405180910390fd5b6112c886612245565b6112f17f00000000000000000000000000000000000000000000000000000000000027106132cf565b6112fa866133d9565b61130382613677565b505050505050565b611313612e2e565b73ffffffffffffffffffffffffffffffffffffffff16611331611eda565b73ffffffffffffffffffffffffffffffffffffffff1614611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90615268565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90615328565b60405180910390fd5b6002600954141561143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906153c8565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161146990615038565b60006040518083038185875af1925050503d80600081146114a6576040519150601f19603f3d011682016040523d82523d6000602084013e6114ab565b606091505b50509050806114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906153e8565b60405180910390fd5b506001600981905550565b611515838383604051806020016040528060008152506124f4565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90615328565b60405180910390fd5b8060006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166115e5612e2e565b73ffffffffffffffffffffffffffffffffffffffff16148061161457506116138261160e612e2e565b612c15565b5b806116595750611622612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661164184610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061169b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611692906152a8565b60405180910390fd5b6000600660006116aa87611903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506116ef85612245565b6116f8856133d9565b7f00000000000000000000000000000000000000000000000000000000000013888160010160008282829054906101000a900467ffffffffffffffff1661173f91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050505050565b8160006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166117c9612e2e565b73ffffffffffffffffffffffffffffffffffffffff1614806117f857506117f7826117f2612e2e565b612c15565b5b8061183d5750611806612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661182584610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906152a8565b60405180910390fd5b6118a87f00000000000000000000000000000000000000000000000000000000000027106132cf565b83600e600087815260200190815260200160002090805190602001906118cf9291906143ff565b505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600081806001111580156119365750600160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b8061198c575080600060149054906101000a900467ffffffffffffffff1667ffffffffffffffff161115801561198b5750600160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b5b6119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c2906152e8565b60405180910390fd5b60076000828152602001908152602001600020600001601c9054906101000a900460ff1615611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2690615368565b60405180910390fd5b6007600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390615328565b60405180910390fd5b6000600a541415611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990615128565b60405180910390fd5b600060149054906101000a900467ffffffffffffffff1667ffffffffffffffff1681611b4c6121e6565b611b5691906155b4565b67ffffffffffffffff161115611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890615208565b60405180910390fd5b8067ffffffffffffffff16600a54611bb99190615654565b341015611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290615168565b60405180910390fd5b600060066000611c09612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16828260000160089054906101000a900467ffffffffffffffff16611c8a91906155b4565b67ffffffffffffffff161115611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90615228565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013888160010160008282829054906101000a900467ffffffffffffffff16611d1c91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550611d56338367ffffffffffffffff166139cf565b5050565b600b8054611d6790615822565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9390615822565b8015611de05780601f10611db557610100808354040283529160200191611de0565b820191906000526020600020905b815481529060010190602001808311611dc357829003601f168201915b505050505081565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611e5a612e2e565b73ffffffffffffffffffffffffffffffffffffffff16611e78611eda565b73ffffffffffffffffffffffffffffffffffffffff1614611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec590615268565b60405180910390fd5b611ed860006139ed565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f0b614485565b600760008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050919050565b606060048054611fe290615822565b80601f016020809104026020016040519081016040528092919081815260200182805461200e90615822565b801561205b5780601f106120305761010080835404028352916020019161205b565b820191906000526020600020905b81548152906001019060200180831161203e57829003601f168201915b5050505050905090565b61206d612e2e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d2906152c8565b60405180910390fd5b80600860006120e8612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612195612e2e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121da91906150eb565b60405180910390a35050565b600060018060089054906101000a900467ffffffffffffffff1661220a9190615724565b905090565b600f6020528160005260406000206020528060005260406000206000915091509054906101000a900467ffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90615328565b60405180910390fd5b8060006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16612310612e2e565b73ffffffffffffffffffffffffffffffffffffffff16148061233f575061233e82612339612e2e565b612c15565b5b80612384575061234d612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661236c84610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd906152a8565b60405180910390fd5b600060076000868152602001908152602001600020905060006102588260000160149054906101000a900467ffffffffffffffff16426124069190615724565b6124109190615623565b905080600660008460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282829054906101000a900467ffffffffffffffff1661249b91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550428260000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505050565b6124ff848484612ee8565b61251e8373ffffffffffffffffffffffffffffffffffffffff16612da1565b8015612533575061253184848484613ab1565b155b1561253d57600080fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890615328565b60405180910390fd5b80600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316125f8612e2e565b6040518263ffffffff1660e01b8152600401612614919061504d565b60206040518083038186803b15801561262c57600080fd5b505afa158015612640573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266491906148f9565b10156126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906151a8565b60405180910390fd5b6126fb6126b0612e2e565b3083600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613be4909392919063ffffffff16565b670de0b6b3a76400008161270f91906155f2565b6006600061271b612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282829054906101000a900467ffffffffffffffff1661277a91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b606081806001111580156127d65750600160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b8061282c575080600060149054906101000a900467ffffffffffffffff1667ffffffffffffffff161115801561282b5750600160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1681105b5b61286b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612862906152e8565b60405180910390fd5b60076000828152602001908152602001600020600001601c9054906101000a900460ff16156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c690615368565b60405180910390fd5b60006128d9613c6d565b905060008151116128f95760405180602001604052806000815250612927565b8061290385613cff565b600c60405160200161291793929190615007565b6040516020818303038152906040525b92505050919050565b600061293a61296a565b600060149054906101000a900467ffffffffffffffff1661295b9190615724565b67ffffffffffffffff16905090565b6000600260009054906101000a900467ffffffffffffffff16600160189054906101000a900467ffffffffffffffff166129a49190615724565b905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e90615328565b60405180910390fd5b8260006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16612a74612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480612aa35750612aa282612a9d612e2e565b612c15565b5b80612ae85750612ab1612e2e565b73ffffffffffffffffffffffffffffffffffffffff16612ad084610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b21906152a8565b60405180910390fd5b612b5e7f000000000000000000000000000000000000000000000000000000000000271085612b5991906156ae565b6132cf565b83600f60008881526020019081526020016000206000876003811115612b8757612b8661598e565b5b6003811115612b9957612b9861598e565b5b815260200190815260200160002060008282829054906101000a900467ffffffffffffffff16612bc991906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505050565b6000600260009054906101000a900467ffffffffffffffff16905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612cb1612e2e565b73ffffffffffffffffffffffffffffffffffffffff16612ccf611eda565b73ffffffffffffffffffffffffffffffffffffffff1614612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90615268565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90615148565b60405180910390fd5b612d9e816139ed565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f50906153a8565b60405180910390fd5b8160006007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16612fb6612e2e565b73ffffffffffffffffffffffffffffffffffffffff161480612fe55750612fe482612fdf612e2e565b612c15565b5b8061302a5750612ff3612e2e565b73ffffffffffffffffffffffffffffffffffffffff1661301284610c3a565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061306c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613063906152a8565b60405180910390fd5b60006007600087815260200190815260200160002090506000600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506130d26000888b612e36565b60018160000160008282829054906101000a900467ffffffffffffffff166130fa9190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506103e88160010160008282829054906101000a900467ffffffffffffffff1661314991906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff166131d591906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428260000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550868873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050505050565b6000600660006132dd612e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508167ffffffffffffffff168160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161015613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337f906151c8565b60405180910390fd5b818160010160008282829054906101000a900467ffffffffffffffff166133af9190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b600060076000838152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061342560008483612e36565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff1661348b9190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a900467ffffffffffffffff1661351791906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428260000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600182600001601c6101000a81548160ff0219169083151502179055506001601881819054906101000a900467ffffffffffffffff16809291906135ef906158ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505082600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161161371f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371690615248565b60405180910390fd5b6000600160109054906101000a900467ffffffffffffffff16905060018260000160008282829054906101000a900467ffffffffffffffff1661376291906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018260000160108282829054906101000a900467ffffffffffffffff166137b09190615724565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018260000160188282829054906101000a900467ffffffffffffffff166137fe91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600760008367ffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600760008367ffffffffffffffff16815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001601081819054906101000a900467ffffffffffffffff16809291906138f0906158ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506002600081819054906101000a900467ffffffffffffffff168092919061393d906158ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508067ffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6139e9828260405180602001604052806000815250613e60565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613ad7612e2e565b8786866040518563ffffffff1660e01b8152600401613af9949392919061509f565b602060405180830381600087803b158015613b1357600080fd5b505af1925050508015613b4457506040513d601f19601f82011682018060405250810190613b41919061489f565b60015b613b91573d8060008114613b74576040519150601f19603f3d011682016040523d82523d6000602084013e613b79565b606091505b50600081511415613b8957600080fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b613c67846323b872dd60e01b858585604051602401613c0593929190615068565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e70565b50505050565b6060600b8054613c7c90615822565b80601f0160208091040260200160405190810160405280929190818152602001828054613ca890615822565b8015613cf55780601f10613cca57610100808354040283529160200191613cf5565b820191906000526020600020905b815481529060010190602001808311613cd857829003601f168201915b5050505050905090565b60606000821415613d47576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613e5b565b600082905060005b60008214613d79578080613d6290615885565b915050600a82613d7291906155f2565b9150613d4f565b60008167ffffffffffffffff811115613d9557613d94615a1b565b5b6040519080825280601f01601f191660200182016040528015613dc75781602001600182028036833780820191505090505b5090505b60008514613e5457600182613de091906156f0565b9150600a85613def91906158ff565b6030613dfb919061555e565b60f81b818381518110613e1157613e106159ec565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613e4d91906155f2565b9450613dcb565b8093505050505b919050565b613e6b838383613f37565b505050565b6000613ed2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661420b9092919063ffffffff16565b9050600081511115613f325780806020019051810190613ef29190614845565b613f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2890615388565b60405180910390fd5b5b505050565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050613f998473ffffffffffffffffffffffffffffffffffffffff16612da1565b8015613fcf5750613fcd600085600160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1685613ab1565b155b15613fd957600080fd5b828160000160008282829054906101000a900467ffffffffffffffff1661400091906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550828160000160088282829054906101000a900467ffffffffffffffff1661404d91906155b4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600160089054906101000a900467ffffffffffffffff1690506000848261409c91906155b4565b90505b8067ffffffffffffffff168267ffffffffffffffff1610156141da5785600760008467ffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600760008467ffffffffffffffff16815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508167ffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a481806141d2906158ce565b92505061409f565b80600160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505050565b606061421a8484600085614223565b90509392505050565b606082471015614268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161425f906151e8565b60405180910390fd5b61427185612da1565b6142b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a790615348565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516142d99190614ff0565b60006040518083038185875af1925050503d8060008114614316576040519150601f19603f3d011682016040523d82523d6000602084013e61431b565b606091505b509150915061432b828286614337565b92505050949350505050565b6060831561434757829050614397565b60008351111561435a5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161438e9190615106565b60405180910390fd5b9392505050565b6040518060a00160405280600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff1681525090565b82805461440b90615822565b90600052602060002090601f01602090048101928261442d5760008555614474565b82601f1061444657805160ff1916838001178555614474565b82800160010185558215614474579182015b82811115614473578251825591602001919060010190614458565b5b50905061448191906144c8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156144e15760008160009055506001016144c9565b5090565b60006144f86144f384615499565b615474565b90508281526020810184848401111561451457614513615a4f565b5b61451f8482856157e0565b509392505050565b600061453a614535846154ca565b615474565b90508281526020810184848401111561455657614555615a4f565b5b6145618482856157e0565b509392505050565b60008135905061457881615e93565b92915050565b60008135905061458d81615eaa565b92915050565b6000815190506145a281615eaa565b92915050565b6000813590506145b781615ec1565b92915050565b6000815190506145cc81615ec1565b92915050565b600082601f8301126145e7576145e6615a4a565b5b81356145f78482602086016144e5565b91505092915050565b60008135905061460f81615ed8565b92915050565b600082601f83011261462a57614629615a4a565b5b813561463a848260208601614527565b91505092915050565b60008135905061465281615ee8565b92915050565b60008151905061466781615ee8565b92915050565b60008135905061467c81615eff565b92915050565b60006020828403121561469857614697615a59565b5b60006146a684828501614569565b91505092915050565b600080604083850312156146c6576146c5615a59565b5b60006146d485828601614569565b92505060206146e585828601614569565b9150509250929050565b60008060006060848603121561470857614707615a59565b5b600061471686828701614569565b935050602061472786828701614569565b925050604061473886828701614643565b9150509250925092565b6000806000806080858703121561475c5761475b615a59565b5b600061476a87828801614569565b945050602061477b87828801614569565b935050604061478c87828801614643565b925050606085013567ffffffffffffffff8111156147ad576147ac615a54565b5b6147b9878288016145d2565b91505092959194509250565b600080604083850312156147dc576147db615a59565b5b60006147ea85828601614569565b92505060206147fb8582860161457e565b9150509250929050565b6000806040838503121561481c5761481b615a59565b5b600061482a85828601614569565b925050602061483b85828601614643565b9150509250929050565b60006020828403121561485b5761485a615a59565b5b600061486984828501614593565b91505092915050565b60006020828403121561488857614887615a59565b5b6000614896848285016145a8565b91505092915050565b6000602082840312156148b5576148b4615a59565b5b60006148c3848285016145bd565b91505092915050565b6000602082840312156148e2576148e1615a59565b5b60006148f084828501614643565b91505092915050565b60006020828403121561490f5761490e615a59565b5b600061491d84828501614658565b91505092915050565b6000806040838503121561493d5761493c615a59565b5b600061494b85828601614643565b925050602061495c85828601614600565b9150509250929050565b60008060006060848603121561497f5761497e615a59565b5b600061498d86828701614643565b935050602061499e86828701614600565b92505060406149af8682870161466d565b9150509250925092565b600080604083850312156149d0576149cf615a59565b5b60006149de85828601614643565b925050602083013567ffffffffffffffff8111156149ff576149fe615a54565b5b614a0b85828601614615565b9150509250929050565b600060208284031215614a2b57614a2a615a59565b5b6000614a398482850161466d565b91505092915050565b614a4b81615758565b82525050565b614a5a81615758565b82525050565b614a698161576a565b82525050565b614a788161576a565b82525050565b6000614a8982615510565b614a938185615526565b9350614aa38185602086016157ef565b614aac81615a5e565b840191505092915050565b6000614ac282615510565b614acc8185615537565b9350614adc8185602086016157ef565b80840191505092915050565b6000614af38261551b565b614afd8185615542565b9350614b0d8185602086016157ef565b614b1681615a5e565b840191505092915050565b6000614b2c8261551b565b614b368185615553565b9350614b468185602086016157ef565b80840191505092915050565b60008154614b5f81615822565b614b698186615553565b94506001821660008114614b845760018114614b9557614bc8565b60ff19831686528186019350614bc8565b614b9e856154fb565b60005b83811015614bc057815481890152600182019150602081019050614ba1565b838801955050505b50505092915050565b6000614bde600e83615542565b9150614be982615a6f565b602082019050919050565b6000614c01602683615542565b9150614c0c82615a98565b604082019050919050565b6000614c24601383615542565b9150614c2f82615ae7565b602082019050919050565b6000614c47601983615542565b9150614c5282615b10565b602082019050919050565b6000614c6a600e83615542565b9150614c7582615b39565b602082019050919050565b6000614c8d600d83615542565b9150614c9882615b62565b602082019050919050565b6000614cb0602683615542565b9150614cbb82615b8b565b604082019050919050565b6000614cd3600a83615542565b9150614cde82615bda565b602082019050919050565b6000614cf6600883615542565b9150614d0182615c03565b602082019050919050565b6000614d19601283615542565b9150614d2482615c2c565b602082019050919050565b6000614d3c602083615542565b9150614d4782615c55565b602082019050919050565b6000614d5f600c83615542565b9150614d6a82615c7e565b602082019050919050565b6000614d82600d83615542565b9150614d8d82615ca7565b602082019050919050565b6000614da5601183615542565b9150614db082615cd0565b602082019050919050565b6000614dc8600883615542565b9150614dd382615cf9565b602082019050919050565b6000614deb600083615537565b9150614df682615d22565b600082019050919050565b6000614e0e600a83615542565b9150614e1982615d25565b602082019050919050565b6000614e31600f83615542565b9150614e3c82615d4e565b602082019050919050565b6000614e54601d83615542565b9150614e5f82615d77565b602082019050919050565b6000614e77600c83615542565b9150614e8282615da0565b602082019050919050565b6000614e9a602a83615542565b9150614ea582615dc9565b604082019050919050565b6000614ebd600a83615542565b9150614ec882615e18565b602082019050919050565b6000614ee0601f83615542565b9150614eeb82615e41565b602082019050919050565b6000614f03600f83615542565b9150614f0e82615e6a565b602082019050919050565b60a082016000820151614f2f6000850182614fd2565b506020820151614f426020850182614fd2565b506040820151614f556040850182614fd2565b506060820151614f686060850182614fd2565b506080820151614f7b6080850182614fd2565b50505050565b606082016000820151614f976000850182614a42565b506020820151614faa6020850182614fd2565b506040820151614fbd6040850182614a60565b50505050565b614fcc816157c2565b82525050565b614fdb816157cc565b82525050565b614fea816157cc565b82525050565b6000614ffc8284614ab7565b915081905092915050565b60006150138286614b21565b915061501f8285614b21565b915061502b8284614b52565b9150819050949350505050565b600061504382614dde565b9150819050919050565b60006020820190506150626000830184614a51565b92915050565b600060608201905061507d6000830186614a51565b61508a6020830185614a51565b6150976040830184614fc3565b949350505050565b60006080820190506150b46000830187614a51565b6150c16020830186614a51565b6150ce6040830185614fc3565b81810360608301526150e08184614a7e565b905095945050505050565b60006020820190506151006000830184614a6f565b92915050565b600060208201905081810360008301526151208184614ae8565b905092915050565b6000602082019050818103600083015261514181614bd1565b9050919050565b6000602082019050818103600083015261516181614bf4565b9050919050565b6000602082019050818103600083015261518181614c17565b9050919050565b600060208201905081810360008301526151a181614c3a565b9050919050565b600060208201905081810360008301526151c181614c5d565b9050919050565b600060208201905081810360008301526151e181614c80565b9050919050565b6000602082019050818103600083015261520181614ca3565b9050919050565b6000602082019050818103600083015261522181614cc6565b9050919050565b6000602082019050818103600083015261524181614ce9565b9050919050565b6000602082019050818103600083015261526181614d0c565b9050919050565b6000602082019050818103600083015261528181614d2f565b9050919050565b600060208201905081810360008301526152a181614d52565b9050919050565b600060208201905081810360008301526152c181614d75565b9050919050565b600060208201905081810360008301526152e181614d98565b9050919050565b6000602082019050818103600083015261530181614dbb565b9050919050565b6000602082019050818103600083015261532181614e01565b9050919050565b6000602082019050818103600083015261534181614e24565b9050919050565b6000602082019050818103600083015261536181614e47565b9050919050565b6000602082019050818103600083015261538181614e6a565b9050919050565b600060208201905081810360008301526153a181614e8d565b9050919050565b600060208201905081810360008301526153c181614eb0565b9050919050565b600060208201905081810360008301526153e181614ed3565b9050919050565b6000602082019050818103600083015261540181614ef6565b9050919050565b600060a08201905061541d6000830184614f19565b92915050565b60006060820190506154386000830184614f81565b92915050565b60006020820190506154536000830184614fc3565b92915050565b600060208201905061546e6000830184614fe1565b92915050565b600061547e61548f565b905061548a8282615854565b919050565b6000604051905090565b600067ffffffffffffffff8211156154b4576154b3615a1b565b5b6154bd82615a5e565b9050602081019050919050565b600067ffffffffffffffff8211156154e5576154e4615a1b565b5b6154ee82615a5e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615569826157c2565b9150615574836157c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156155a9576155a8615930565b5b828201905092915050565b60006155bf826157cc565b91506155ca836157cc565b92508267ffffffffffffffff038211156155e7576155e6615930565b5b828201905092915050565b60006155fd826157c2565b9150615608836157c2565b9250826156185761561761595f565b5b828204905092915050565b600061562e826157cc565b9150615639836157cc565b9250826156495761564861595f565b5b828204905092915050565b600061565f826157c2565b915061566a836157c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156a3576156a2615930565b5b828202905092915050565b60006156b9826157cc565b91506156c4836157cc565b92508167ffffffffffffffff04831182151516156156e5576156e4615930565b5b828202905092915050565b60006156fb826157c2565b9150615706836157c2565b92508282101561571957615718615930565b5b828203905092915050565b600061572f826157cc565b915061573a836157cc565b92508282101561574d5761574c615930565b5b828203905092915050565b6000615763826157a2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561580d5780820151818401526020810190506157f2565b8381111561581c576000848401525b50505050565b6000600282049050600182168061583a57607f821691505b6020821081141561584e5761584d6159bd565b5b50919050565b61585d82615a5e565b810181811067ffffffffffffffff8211171561587c5761587b615a1b565b5b80604052505050565b6000615890826157c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156158c3576158c2615930565b5b600182019050919050565b60006158d9826157cc565b915067ffffffffffffffff8214156158f4576158f3615930565b5b600182019050919050565b600061590a826157c2565b9150615915836157c2565b9250826159255761592461595f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f73616c65206e6f7420626567756e000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e7420616d6f756e7400000000000000000000000000600082015250565b7f617070726f76616c20746f2063757272656e74206f776e657200000000000000600082015250565b7f696e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f696e76616c69642073636f726500000000000000000000000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7900000000000000000000000000000000000000000000600082015250565b7f4d6178206d696e74000000000000000000000000000000000000000000000000600082015250565b7f6275726e20746f6b656e2066697273746c790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f7420617070726f76616c0000000000000000000000000000000000000000600082015250565b7f6e6f74207175616c696669656400000000000000000000000000000000000000600082015250565b7f617070726f766520746f2063616c6c6572000000000000000000000000000000600082015250565b7f6e6f74206d696e74000000000000000000000000000000000000000000000000600082015250565b50565b7f6275726e20746f6b656e00000000000000000000000000000000000000000000600082015250565b7f636f6e74726163742063616c6c65720000000000000000000000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f746f6b656e206275726e65640000000000000000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f6164647265737328302900000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b615e9c81615758565b8114615ea757600080fd5b50565b615eb38161576a565b8114615ebe57600080fd5b50565b615eca81615776565b8114615ed557600080fd5b50565b60048110615ee557600080fd5b50565b615ef1816157c2565b8114615efc57600080fd5b50565b615f08816157cc565b8114615f1357600080fd5b5056fea26469706673582212201a7f9091ca6234afe228fdfa1f2131acde5c294f37b26a769f0be0d879d5437a64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000060000000000000000000000000b4afbb2a566830806e7258c2fcfb0fd7799e0f560000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d52346559416e337341516d7335516872596547637158543647755a48735a7a3752414c63624668416a3739732f00000000000000000000

-----Decoded View---------------
Arg [0] : amountForDev_ (uint64): 50
Arg [1] : initBaseURI_ (string): ipfs://QmR4eYAn3sAQms5QhrYeGcqXT6GuZHsZz7RALcbFhAj79s/
Arg [2] : tokenContract_ (address): 0xB4afbB2A566830806E7258c2FCfb0Fd7799E0F56

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 000000000000000000000000b4afbb2a566830806e7258c2fcfb0fd7799e0f56
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [4] : 697066733a2f2f516d52346559416e337341516d733551687259654763715854
Arg [5] : 3647755a48735a7a3752414c63624668416a3739732f00000000000000000000


Deployed Bytecode Sourcemap

47115:4762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46684:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40985:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48836:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40505:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41962:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41445:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39905:125;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47755:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42598:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49885:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50974:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48962:188;;;;;;;;;;;;;:::i;:::-;;42776:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50323:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51415:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47720:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47612:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41264:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48337:493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47648:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40851:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10368:103;;;;;;;;;;;;;:::i;:::-;;9717:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41117:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40605:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42105:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40149:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47804:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50580:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42969:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49986:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49197:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40038:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40252:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51606:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40364:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42400:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10626:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46684:303;46784:4;46836:25;46821:40;;;:11;:40;;;;:105;;;;46893:33;46878:48;;;:11;:48;;;;46821:105;:158;;;;46943:36;46967:11;46943:23;:36::i;:::-;46821:158;46801:178;;46684:303;;;:::o;40985:124::-;41044:18;;:::i;:::-;41082:12;:19;41095:5;41082:19;;;;;;;;;;;;;;;41075:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40985:124;;;:::o;48836:120::-;9948:12;:10;:12::i;:::-;9937:23;;:7;:5;:7::i;:::-;:23;;;9929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48933:17:::1;48916:14;:34;;;;48836:120:::0;:::o;40505:92::-;40551:13;40584:5;40577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40505:92;:::o;41962:135::-;42038:7;42065:15;:24;42081:7;42065:24;;;;;;;;;;;;;;;;;;;;;42058:31;;41962:135;;;:::o;41445:339::-;41526:13;41542:11;:20;41554:7;41542:20;;;;;;;;;;;:25;;;;;;;;;;;;41526:41;;41594:5;41588:11;;:2;:11;;;;41580:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41664:5;41648:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;41673:37;41690:5;41697:12;:10;:12::i;:::-;41673:16;:37::i;:::-;41648:62;41640:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41748:28;41757:2;41761:7;41770:5;41748:8;:28::i;:::-;41515:269;41445:339;;:::o;39905:125::-;39949:7;40021:1;40006:12;;;;;;;;;;;39992:11;;;;;;;;;;;39976:13;;;;;;;;;;;:27;;;;:::i;:::-;:42;;;;:::i;:::-;:46;;;;:::i;:::-;39969:53;;;;39905:125;:::o;47755:44::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42598:170::-;42732:28;42742:4;42748:2;42752:7;42732:9;:28::i;:::-;42598:170;;;:::o;49885:95::-;49945:29;49963:10;49945:17;:29::i;:::-;49885:95;:::o;50974:435::-;48252:10;48239:23;;:9;:23;;;48231:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;51055:7:::1;39302:12;39317:11;:20;39329:7;39317:20;;;;;;;;;;;:25;;;;;;;;;;;;39302:40;;39355:22;39397:4;39381:20;;:12;:10;:12::i;:::-;:20;;;:74;;;;39419:36;39436:4;39442:12;:10;:12::i;:::-;39419:16;:36::i;:::-;39381:74;:128;;;;39497:12;:10;:12::i;:::-;39473:36;;:20;39485:7;39473:11;:20::i;:::-;:36;;;39381:128;39355:155;;39531:17;39523:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51071:13:::2;51087:11;:20;51099:7;51087:20;;;;;;;;;;;:25;;;;;;;;;;;;51071:41;;51119:23;51145:12;:19;51158:5;51145:19;;;;;;;;;;;;;;;51119:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;51198:1;51181:4;:14;;;:18;;;51173:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;51249:18;51229:38;;:4;:16;;;:38;;;;51221:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51294:21;51307:7;51294:12;:21::i;:::-;51324:37;51342:18;51324:17;:37::i;:::-;51368:14;51374:7;51368:5;:14::i;:::-;51389;51397:5;51389:7;:14::i;:::-;51064:345;;39291:295:::1;;48289:1;50974:435:::0;:::o;48962:188::-;9948:12;:10;:12::i;:::-;9937:23;;:7;:5;:7::i;:::-;:23;;;9929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48252:10:::1;48239:23;;:9;:23;;;48231:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::2;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;49035:12:::3;49053:10;:15;;49076:21;49053:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49034:68;;;49117:7;49109:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;49027:123;1768:1:::2;2722:7;:22;;;;48962:188::o:0;42776:185::-;42914:39;42931:4;42937:2;42941:7;42914:39;;;;;;;;;;;;:16;:39::i;:::-;42776:185;;;:::o;50323:251::-;48252:10;48239:23;;:9;:23;;;48231:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;50397:7:::1;39302:12;39317:11;:20;39329:7;39317:20;;;;;;;;;;;:25;;;;;;;;;;;;39302:40;;39355:22;39397:4;39381:20;;:12;:10;:12::i;:::-;:20;;;:74;;;;39419:36;39436:4;39442:12;:10;:12::i;:::-;39419:16;:36::i;:::-;39381:74;:128;;;;39497:12;:10;:12::i;:::-;39473:36;;:20;39485:7;39473:11;:20::i;:::-;:36;;;39381:128;39355:155;;39531:17;39523:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;50413:24:::2;50440:12;:30;50453:16;50461:7;50453;:16::i;:::-;50440:30;;;;;;;;;;;;;;;50413:57;;50479:21;50492:7;50479:12;:21::i;:::-;50509:14;50515:7;50509:5;:14::i;:::-;50552:16;50532:4;:16;;;:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50406:168;39291:295:::1;;48289:1;50323:251:::0;:::o;51415:185::-;51507:7;39302:12;39317:11;:20;39329:7;39317:20;;;;;;;;;;;:25;;;;;;;;;;;;39302:40;;39355:22;39397:4;39381:20;;:12;:10;:12::i;:::-;:20;;;:74;;;;39419:36;39436:4;39442:12;:10;:12::i;:::-;39419:16;:36::i;:::-;39381:74;:128;;;;39497:12;:10;:12::i;:::-;39473:36;;:20;39485:7;39473:11;:20::i;:::-;:36;;;39381:128;39355:155;;39531:17;39523:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51523:36:::1;51541:17;51523;:36::i;:::-;51587:7;51566:9;:18;51576:7;51566:18;;;;;;;;;;;:28;;;;;;;;;;;;:::i;:::-;;39291:295:::0;;51415:185;;;:::o;47720:28::-;;;;;;;;;;;;;:::o;47612:29::-;;;;:::o;41264:140::-;41344:7;41326;39652;39647:1;:12;;:39;;;;;39673:13;;;;;;;;;;;39663:23;;:7;:23;39647:39;39646:111;;;;39716:7;39702:10;;;;;;;;;;;:21;;;;:54;;;;;39737:19;;;;;;;;;;;39727:29;;:7;:29;39702:54;39646:111;39638:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39790:11;:20;39802:7;39790:20;;;;;;;;;;;:27;;;;;;;;;;;;39789:28;39781:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41371:11:::1;:20;41383:7;41371:20;;;;;;;;;;;:25;;;;;;;;;;;;41364:32;;41264:140:::0;;;;:::o;48337:493::-;48252:10;48239:23;;:9;:23;;;48231:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48437:1:::1;48419:14;;:19;;48411:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;48500:10;;;;;;;;;;;48472:38;;48488:8;48472:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;;;48464:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48570:8;48553:25;;:14;;:25;;;;:::i;:::-;48540:9;:38;;48532:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48611:24;48638:12;:26;48651:12;:10;:12::i;:::-;48638:26;;;;;;;;;;;;;;;48611:53;;48710:15;;;;;;;;;;;48681:44;;48698:8;48681:4;:14;;;;;;;;;;;;:25;;;;:::i;:::-;:44;;;;48673:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48765:16;48745:4;:16;;;:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48790:31;48800:10;48812:8;48790:31;;:9;:31::i;:::-;48404:426;48337:493:::0;:::o;47648:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40851:126::-;40915:7;40942:12;:19;40955:5;40942:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;40935:34;;;;40851:126;;;:::o;10368:103::-;9948:12;:10;:12::i;:::-;9937:23;;:7;:5;:7::i;:::-;:23;;;9929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10433:30:::1;10460:1;10433:18;:30::i;:::-;10368:103::o:0;9717:87::-;9763:7;9790:6;;;;;;;;;;;9783:13;;9717:87;:::o;41117:135::-;41183:21;;:::i;:::-;41224:11;:20;41236:7;41224:20;;;;;;;;;;;41217:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41117:135;;;:::o;40605:96::-;40653:13;40686:7;40679:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40605:96;:::o;42105:287::-;42220:12;:10;:12::i;:::-;42208:24;;:8;:24;;;;42200:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;42312:8;42267:18;:32;42286:12;:10;:12::i;:::-;42267:32;;;;;;;;;;;;;;;:42;42300:8;42267:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;42365:8;42336:48;;42351:12;:10;:12::i;:::-;42336:48;;;42375:8;42336:48;;;;;;:::i;:::-;;;;;;;;42105:287;;:::o;40149:95::-;40193:6;40235:1;40219:13;;;;;;;;;;;:17;;;;:::i;:::-;40212:24;;40149:95;:::o;47804:79::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50580:354::-;48252:10;48239:23;;:9;:23;;;48231:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;50662:7:::1;39302:12;39317:11;:20;39329:7;39317:20;;;;;;;;;;;:25;;;;;;;;;;;;39302:40;;39355:22;39397:4;39381:20;;:12;:10;:12::i;:::-;:20;;;:74;;;;39419:36;39436:4;39442:12;:10;:12::i;:::-;39419:16;:36::i;:::-;39381:74;:128;;;;39497:12;:10;:12::i;:::-;39473:36;;:20;39485:7;39473:11;:20::i;:::-;:36;;;39381:128;39355:155;;39531:17;39523:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;50678:32:::2;50713:11;:20;50725:7;50713:20;;;;;;;;;;;50678:55;;50742:12;50807:11;50784:9;:19;;;;;;;;;;;;50765:15;50758:45;;;;:::i;:::-;50757:61;;;;:::i;:::-;50742:76;;50869:5;50825:12;:28;50838:9;:14;;;;;;;;;;;;50825:28;;;;;;;;;;;;;;;:40;;;:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50912:15;50883:9;:19;;;:45;;;;;;;;;;;;;;;;;;50671:263;;39291:295:::1;;48289:1;50580:354:::0;:::o;42969:330::-;43136:28;43146:4;43152:2;43156:7;43136:9;:28::i;:::-;43179:15;:2;:13;;;:15::i;:::-;:76;;;;;43199:56;43230:4;43236:2;43240:7;43249:5;43199:30;:56::i;:::-;43198:57;43179:76;43175:117;;;43272:8;;;43175:117;42969:330;;;;:::o;49986:331::-;48252:10;48239:23;;:9;:23;;;48231:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;50121:7:::1;50079:13;;;;;;;;;;;50072:31;;;50104:12;:10;:12::i;:::-;50072:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;50063:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;50156:76;50195:12;:10;:12::i;:::-;50217:4;50224:7;50163:13;;;;;;;;;;;50156:38;;;;:76;;;;;;:::i;:::-;50302:7;50291;:19;;;;:::i;:::-;50242:12;:26;50255:12;:10;:12::i;:::-;50242:26;;;;;;;;;;;;;;;:38;;;:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49986:331:::0;:::o;49197:315::-;49286:13;49268:7;39652;39647:1;:12;;:39;;;;;39673:13;;;;;;;;;;;39663:23;;:7;:23;39647:39;39646:111;;;;39716:7;39702:10;;;;;;;;;;;:21;;;;:54;;;;;39737:19;;;;;;;;;;;39727:29;;:7;:29;39702:54;39646:111;39638:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39790:11;:20;39802:7;39790:20;;;;;;;;;;;:27;;;;;;;;;;;;39789:28;39781:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;49310:28:::1;49341:10;:8;:10::i;:::-;49310:41;;49406:1;49381:14;49375:28;:32;:131;;;;;;;;;;;;;::::0;::::1;;;49443:14;49458:18;:7;:16;:18::i;:::-;49477:14;49426:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49375:131;49361:145;;;49197:315:::0;;;;:::o;40038:103::-;40080:7;40120:13;:11;:13::i;:::-;40107:10;;;;;;;;;;;:26;;;;:::i;:::-;40100:33;;;;40038:103;:::o;40252:104::-;40296:6;40337:11;;;;;;;;;;;40322:12;;;;;;;;;;;:26;;;;:::i;:::-;40315:33;;40252:104;:::o;51606:264::-;48252:10;48239:23;;:9;:23;;;48231:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;51747:7:::1;39302:12;39317:11;:20;39329:7;39317:20;;;;;;;;;;;:25;;;;;;;;;;;;39302:40;;39355:22;39397:4;39381:20;;:12;:10;:12::i;:::-;:20;;;:74;;;;39419:36;39436:4;39442:12;:10;:12::i;:::-;39419:16;:36::i;:::-;39381:74;:128;;;;39497:12;:10;:12::i;:::-;39473:36;;:20;39485:7;39473:11;:20::i;:::-;:36;;;39381:128;39355:155;;39531:17;39523:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51763:44:::2;51789:17;51781:5;:25;;;;:::i;:::-;51763:17;:44::i;:::-;51859:5;51814:21;:30;51836:7;51814:30;;;;;;;;;;;:41;51845:9;51814:41;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39291:295:::1;;48289:1;51606:264:::0;;;:::o;40364:90::-;40409:6;40435:11;;;;;;;;;;;40428:18;;40364:90;:::o;42400:156::-;42489:4;42513:18;:25;42532:5;42513:25;;;;;;;;;;;;;;;:35;42539:8;42513:35;;;;;;;;;;;;;;;;;;;;;;;;;42506:42;;42400:156;;;;:::o;10626:201::-;9948:12;:10;:12::i;:::-;9937:23;;:7;:5;:7::i;:::-;:23;;;9929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10735:1:::1;10715:22;;:8;:22;;;;10707:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10791:28;10810:8;10791:18;:28::i;:::-;10626:201:::0;:::o;12418:326::-;12478:4;12735:1;12713:7;:19;;;:23;12706:30;;12418:326;;;:::o;30689:157::-;30774:4;30813:25;30798:40;;;:11;:40;;;;30791:47;;30689:157;;;:::o;8441:98::-;8494:7;8521:10;8514:17;;8441:98;:::o;41792:162::-;41900:2;41873:15;:24;41889:7;41873:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41938:7;41934:2;41918:28;;41927:5;41918:28;;;;;;;;;;;;41792:162;;;:::o;43307:577::-;43430:2;39198:1;39181:19;;:5;:19;;;;39173:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;43457:7:::1;39302:12;39317:11;:20;39329:7;39317:20;;;;;;;;;;;:25;;;;;;;;;;;;39302:40;;39355:22;39397:4;39381:20;;:12;:10;:12::i;:::-;:20;;;:74;;;;39419:36;39436:4;39442:12;:10;:12::i;:::-;39419:16;:36::i;:::-;39381:74;:128;;;;39497:12;:10;:12::i;:::-;39473:36;;:20;39485:7;39473:11;:20::i;:::-;:36;;;39381:128;39355:155;;39531:17;39523:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;43477:32:::2;43512:11;:20;43524:7;43512:20;;;;;;;;;;;43477:55;;43545:24;43572:12;:18;43585:4;43572:18;;;;;;;;;;;;;;;43545:45;;43603:35;43620:1;43624:7;43633:4;43603:8;:35::i;:::-;43667:1;43651:4;:12;;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43699:4;43679;:16;;;:24;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43742:1;43714:12;:16;43727:2;43714:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43773:2;43756:9;:14;;;:19;;;;;;;;;;;;;;;;;;43815:15;43786:9;:19;;;:45;;;;;;;;;;;;;;;;;;43868:7;43864:2;43849:27;;43858:4;43849:27;;;;;;;;;;;;43466:418;;39291:295:::1;;39225:1;43307:577:::0;;;;:::o;49654:225::-;49715:24;49742:12;:26;49755:12;:10;:12::i;:::-;49742:26;;;;;;;;;;;;;;;49715:53;;49806:10;49786:30;;:4;:16;;;;;;;;;;;;:30;;;;49777:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;49863:10;49843:4;:16;;;:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49708:171;49654:225;:::o;46140:517::-;46200:32;46235:11;:20;46247:7;46235:20;;;;;;;;;;;46200:55;;46268:12;46283:9;:14;;;;;;;;;;;;46268:29;;46310:35;46327:1;46331:7;46340:4;46310:8;:35::i;:::-;46389:1;46358:12;:18;46371:4;46358:18;;;;;;;;;;;;;;;:26;;;:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46434:1;46401:12;:18;46414:4;46401:18;;;;;;;;;;;;;;;:28;;;:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46473:1;46448:9;:14;;;:27;;;;;;;;;;;;;;;;;;46515:15;46486:9;:19;;;:45;;;;;;;;;;;;;;;;;;46561:4;46542:9;:16;;;:23;;;;;;;;;;;;;;;;;;46582:12;;:14;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;46641:7;46637:1;46614:35;;46623:4;46614:35;;;;;;;;;;;;46189:468;;46140:517;:::o;44926:541::-;44975:24;45002:12;:16;45015:2;45002:16;;;;;;;;;;;;;;;44975:43;;45056:1;45039:4;:14;;;;;;;;;;;;:18;;;45031:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45093:19;45115;;;;;;;;;;;45093:41;;45163:1;45147:4;:12;;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45193:1;45175:4;:14;;;:19;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45224:1;45205:4;:15;;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45271:2;45238:11;:25;45250:12;45238:25;;;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;45329:15;45284:11;:25;45296:12;45284:25;;;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;45358:19;;:21;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;45390:11;;:13;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;45446:12;45421:38;;45442:2;45421:38;;45438:1;45421:38;;;;;;;;;;;;44964:503;;44926:541;:::o;43920:104::-;43989:27;43999:2;44003:8;43989:27;;;;;;;;;;;;:9;:27::i;:::-;43920:104;;:::o;10987:191::-;11061:16;11080:6;;;;;;;;;;;11061:25;;11106:8;11097:6;;:17;;;;;;;;;;;;;;;;;;11161:8;11130:40;;11151:8;11130:40;;;;;;;;;;;;11050:128;10987:191;:::o;45475:629::-;45638:4;45675:2;45659:36;;;45696:12;:10;:12::i;:::-;45710:4;45716:7;45725:5;45659:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45655:442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45910:1;45893:6;:13;:18;45889:197;;;45932:8;;;45889:197;46044:6;46038:13;46029:6;46025:2;46021:15;46013:39;45655:442;45788:45;;;45778:55;;;:6;:55;;;;45771:62;;;45475:629;;;;;;:::o;20604:248::-;20748:96;20768:5;20798:27;;;20827:4;20833:2;20837:5;20775:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20748:19;:96::i;:::-;20604:248;;;;:::o;49518:93::-;49569:13;49598:7;49591:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49518:93;:::o;6003:723::-;6059:13;6289:1;6280:5;:10;6276:53;;;6307:10;;;;;;;;;;;;;;;;;;;;;6276:53;6339:12;6354:5;6339:20;;6370:14;6395:78;6410:1;6402:4;:9;6395:78;;6428:8;;;;;:::i;:::-;;;;6459:2;6451:10;;;;;:::i;:::-;;;6395:78;;;6483:19;6515:6;6505:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6483:39;;6533:154;6549:1;6540:5;:10;6533:154;;6577:1;6567:11;;;;;:::i;:::-;;;6644:2;6636:5;:10;;;;:::i;:::-;6623:2;:24;;;;:::i;:::-;6610:39;;6593:6;6600;6593:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6673:2;6664:11;;;;;:::i;:::-;;;6533:154;;;6711:6;6697:21;;;;;6003:723;;;;:::o;44032:131::-;44121:34;44127:2;44138:8;44149:5;44121;:34::i;:::-;44032:131;;;:::o;22958:716::-;23382:23;23408:69;23436:4;23408:69;;;;;;;;;;;;;;;;;23416:5;23408:27;;;;:69;;;;;:::i;:::-;23382:95;;23512:1;23492:10;:17;:21;23488:179;;;23589:10;23578:30;;;;;;;;;;;;:::i;:::-;23570:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23488:179;23028:646;22958:716;;:::o;44171:747::-;44255:24;44282:12;:16;44295:2;44282:16;;;;;;;;;;;;;;;44255:43;;44315:15;:2;:13;;;:15::i;:::-;:88;;;;;44335:68;44374:1;44378:2;44382:13;;;;;;;;;;;44335:68;;44397:5;44335:30;:68::i;:::-;44334:69;44315:88;44311:130;;;44421:8;;;44311:130;44471:8;44455:4;:12;;;:24;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44508:8;44490:4;:14;;;:26;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44529:19;44551:13;;;;;;;;;;;44529:35;;44575:10;44603:8;44588:12;:23;;;;:::i;:::-;44575:36;;44624:252;44658:3;44643:18;;:12;:18;;;44624:252;;;44728:2;44695:11;:25;44707:12;44695:25;;;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;44790:15;44745:11;:25;44757:12;44745:25;;;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;44851:12;44826:38;;44847:2;44826:38;;44843:1;44826:38;;;;;;;;;;;;44663:14;;;;;:::i;:::-;;;;44624:252;;;44907:3;44891:13;;:19;;;;;;;;;;;;;;;;;;44244:674;;;44171:747;;;:::o;15163:229::-;15300:12;15332:52;15354:6;15362:4;15368:1;15371:12;15332:21;:52::i;:::-;15325:59;;15163:229;;;;;:::o;16283:510::-;16453:12;16511:5;16486:21;:30;;16478:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;16578:18;16589:6;16578:10;:18::i;:::-;16570:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16644:12;16658:23;16685:6;:11;;16704:5;16711:4;16685:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16643:73;;;;16734:51;16751:7;16760:10;16772:12;16734:16;:51::i;:::-;16727:58;;;;16283:510;;;;;;:::o;18969:712::-;19119:12;19148:7;19144:530;;;19179:10;19172:17;;;;19144:530;19313:1;19293:10;:17;:21;19289:374;;;19491:10;19485:17;19552:15;19539:10;19535:2;19531:19;19524:44;19289:374;19634:12;19627:20;;;;;;;;;;;:::i;:::-;;;;;;;;18969:712;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1915:167::-;1975:5;2013:6;2000:20;1991:29;;2029:47;2070:5;2029:47;:::i;:::-;1915:167;;;;:::o;2102:340::-;2158:5;2207:3;2200:4;2192:6;2188:17;2184:27;2174:122;;2215:79;;:::i;:::-;2174:122;2332:6;2319:20;2357:79;2432:3;2424:6;2417:4;2409:6;2405:17;2357:79;:::i;:::-;2348:88;;2164:278;2102:340;;;;:::o;2448:139::-;2494:5;2532:6;2519:20;2510:29;;2548:33;2575:5;2548:33;:::i;:::-;2448:139;;;;:::o;2593:143::-;2650:5;2681:6;2675:13;2666:22;;2697:33;2724:5;2697:33;:::i;:::-;2593:143;;;;:::o;2742:137::-;2787:5;2825:6;2812:20;2803:29;;2841:32;2867:5;2841:32;:::i;:::-;2742:137;;;;:::o;2885:329::-;2944:6;2993:2;2981:9;2972:7;2968:23;2964:32;2961:119;;;2999:79;;:::i;:::-;2961:119;3119:1;3144:53;3189:7;3180:6;3169:9;3165:22;3144:53;:::i;:::-;3134:63;;3090:117;2885:329;;;;:::o;3220:474::-;3288:6;3296;3345:2;3333:9;3324:7;3320:23;3316:32;3313:119;;;3351:79;;:::i;:::-;3313:119;3471:1;3496:53;3541:7;3532:6;3521:9;3517:22;3496:53;:::i;:::-;3486:63;;3442:117;3598:2;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3569:118;3220:474;;;;;:::o;3700:619::-;3777:6;3785;3793;3842:2;3830:9;3821:7;3817:23;3813:32;3810:119;;;3848:79;;:::i;:::-;3810:119;3968:1;3993:53;4038:7;4029:6;4018:9;4014:22;3993:53;:::i;:::-;3983:63;;3939:117;4095:2;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4066:118;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;3700:619;;;;;:::o;4325:943::-;4420:6;4428;4436;4444;4493:3;4481:9;4472:7;4468:23;4464:33;4461:120;;;4500:79;;:::i;:::-;4461:120;4620:1;4645:53;4690:7;4681:6;4670:9;4666:22;4645:53;:::i;:::-;4635:63;;4591:117;4747:2;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4718:118;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5031:2;5020:9;5016:18;5003:32;5062:18;5054:6;5051:30;5048:117;;;5084:79;;:::i;:::-;5048:117;5189:62;5243:7;5234:6;5223:9;5219:22;5189:62;:::i;:::-;5179:72;;4974:287;4325:943;;;;;;;:::o;5274:468::-;5339:6;5347;5396:2;5384:9;5375:7;5371:23;5367:32;5364:119;;;5402:79;;:::i;:::-;5364:119;5522:1;5547:53;5592:7;5583:6;5572:9;5568:22;5547:53;:::i;:::-;5537:63;;5493:117;5649:2;5675:50;5717:7;5708:6;5697:9;5693:22;5675:50;:::i;:::-;5665:60;;5620:115;5274:468;;;;;:::o;5748:474::-;5816:6;5824;5873:2;5861:9;5852:7;5848:23;5844:32;5841:119;;;5879:79;;:::i;:::-;5841:119;5999:1;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5970:117;6126:2;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6097:118;5748:474;;;;;:::o;6228:345::-;6295:6;6344:2;6332:9;6323:7;6319:23;6315:32;6312:119;;;6350:79;;:::i;:::-;6312:119;6470:1;6495:61;6548:7;6539:6;6528:9;6524:22;6495:61;:::i;:::-;6485:71;;6441:125;6228:345;;;;:::o;6579:327::-;6637:6;6686:2;6674:9;6665:7;6661:23;6657:32;6654:119;;;6692:79;;:::i;:::-;6654:119;6812:1;6837:52;6881:7;6872:6;6861:9;6857:22;6837:52;:::i;:::-;6827:62;;6783:116;6579:327;;;;:::o;6912:349::-;6981:6;7030:2;7018:9;7009:7;7005:23;7001:32;6998:119;;;7036:79;;:::i;:::-;6998:119;7156:1;7181:63;7236:7;7227:6;7216:9;7212:22;7181:63;:::i;:::-;7171:73;;7127:127;6912:349;;;;:::o;7267:329::-;7326:6;7375:2;7363:9;7354:7;7350:23;7346:32;7343:119;;;7381:79;;:::i;:::-;7343:119;7501:1;7526:53;7571:7;7562:6;7551:9;7547:22;7526:53;:::i;:::-;7516:63;;7472:117;7267:329;;;;:::o;7602:351::-;7672:6;7721:2;7709:9;7700:7;7696:23;7692:32;7689:119;;;7727:79;;:::i;:::-;7689:119;7847:1;7872:64;7928:7;7919:6;7908:9;7904:22;7872:64;:::i;:::-;7862:74;;7818:128;7602:351;;;;:::o;7959:502::-;8041:6;8049;8098:2;8086:9;8077:7;8073:23;8069:32;8066:119;;;8104:79;;:::i;:::-;8066:119;8224:1;8249:53;8294:7;8285:6;8274:9;8270:22;8249:53;:::i;:::-;8239:63;;8195:117;8351:2;8377:67;8436:7;8427:6;8416:9;8412:22;8377:67;:::i;:::-;8367:77;;8322:132;7959:502;;;;;:::o;8467:645::-;8557:6;8565;8573;8622:2;8610:9;8601:7;8597:23;8593:32;8590:119;;;8628:79;;:::i;:::-;8590:119;8748:1;8773:53;8818:7;8809:6;8798:9;8794:22;8773:53;:::i;:::-;8763:63;;8719:117;8875:2;8901:67;8960:7;8951:6;8940:9;8936:22;8901:67;:::i;:::-;8891:77;;8846:132;9017:2;9043:52;9087:7;9078:6;9067:9;9063:22;9043:52;:::i;:::-;9033:62;;8988:117;8467:645;;;;;:::o;9118:654::-;9196:6;9204;9253:2;9241:9;9232:7;9228:23;9224:32;9221:119;;;9259:79;;:::i;:::-;9221:119;9379:1;9404:53;9449:7;9440:6;9429:9;9425:22;9404:53;:::i;:::-;9394:63;;9350:117;9534:2;9523:9;9519:18;9506:32;9565:18;9557:6;9554:30;9551:117;;;9587:79;;:::i;:::-;9551:117;9692:63;9747:7;9738:6;9727:9;9723:22;9692:63;:::i;:::-;9682:73;;9477:288;9118:654;;;;;:::o;9778:327::-;9836:6;9885:2;9873:9;9864:7;9860:23;9856:32;9853:119;;;9891:79;;:::i;:::-;9853:119;10011:1;10036:52;10080:7;10071:6;10060:9;10056:22;10036:52;:::i;:::-;10026:62;;9982:116;9778:327;;;;:::o;10111:108::-;10188:24;10206:5;10188:24;:::i;:::-;10183:3;10176:37;10111:108;;:::o;10225:118::-;10312:24;10330:5;10312:24;:::i;:::-;10307:3;10300:37;10225:118;;:::o;10349:99::-;10420:21;10435:5;10420:21;:::i;:::-;10415:3;10408:34;10349:99;;:::o;10454:109::-;10535:21;10550:5;10535:21;:::i;:::-;10530:3;10523:34;10454:109;;:::o;10569:360::-;10655:3;10683:38;10715:5;10683:38;:::i;:::-;10737:70;10800:6;10795:3;10737:70;:::i;:::-;10730:77;;10816:52;10861:6;10856:3;10849:4;10842:5;10838:16;10816:52;:::i;:::-;10893:29;10915:6;10893:29;:::i;:::-;10888:3;10884:39;10877:46;;10659:270;10569:360;;;;:::o;10935:373::-;11039:3;11067:38;11099:5;11067:38;:::i;:::-;11121:88;11202:6;11197:3;11121:88;:::i;:::-;11114:95;;11218:52;11263:6;11258:3;11251:4;11244:5;11240:16;11218:52;:::i;:::-;11295:6;11290:3;11286:16;11279:23;;11043:265;10935:373;;;;:::o;11314:364::-;11402:3;11430:39;11463:5;11430:39;:::i;:::-;11485:71;11549:6;11544:3;11485:71;:::i;:::-;11478:78;;11565:52;11610:6;11605:3;11598:4;11591:5;11587:16;11565:52;:::i;:::-;11642:29;11664:6;11642:29;:::i;:::-;11637:3;11633:39;11626:46;;11406:272;11314:364;;;;:::o;11684:377::-;11790:3;11818:39;11851:5;11818:39;:::i;:::-;11873:89;11955:6;11950:3;11873:89;:::i;:::-;11866:96;;11971:52;12016:6;12011:3;12004:4;11997:5;11993:16;11971:52;:::i;:::-;12048:6;12043:3;12039:16;12032:23;;11794:267;11684:377;;;;:::o;12091:845::-;12194:3;12231:5;12225:12;12260:36;12286:9;12260:36;:::i;:::-;12312:89;12394:6;12389:3;12312:89;:::i;:::-;12305:96;;12432:1;12421:9;12417:17;12448:1;12443:137;;;;12594:1;12589:341;;;;12410:520;;12443:137;12527:4;12523:9;12512;12508:25;12503:3;12496:38;12563:6;12558:3;12554:16;12547:23;;12443:137;;12589:341;12656:38;12688:5;12656:38;:::i;:::-;12716:1;12730:154;12744:6;12741:1;12738:13;12730:154;;;12818:7;12812:14;12808:1;12803:3;12799:11;12792:35;12868:1;12859:7;12855:15;12844:26;;12766:4;12763:1;12759:12;12754:17;;12730:154;;;12913:6;12908:3;12904:16;12897:23;;12596:334;;12410:520;;12198:738;;12091:845;;;;:::o;12942:366::-;13084:3;13105:67;13169:2;13164:3;13105:67;:::i;:::-;13098:74;;13181:93;13270:3;13181:93;:::i;:::-;13299:2;13294:3;13290:12;13283:19;;12942:366;;;:::o;13314:::-;13456:3;13477:67;13541:2;13536:3;13477:67;:::i;:::-;13470:74;;13553:93;13642:3;13553:93;:::i;:::-;13671:2;13666:3;13662:12;13655:19;;13314:366;;;:::o;13686:::-;13828:3;13849:67;13913:2;13908:3;13849:67;:::i;:::-;13842:74;;13925:93;14014:3;13925:93;:::i;:::-;14043:2;14038:3;14034:12;14027:19;;13686:366;;;:::o;14058:::-;14200:3;14221:67;14285:2;14280:3;14221:67;:::i;:::-;14214:74;;14297:93;14386:3;14297:93;:::i;:::-;14415:2;14410:3;14406:12;14399:19;;14058:366;;;:::o;14430:::-;14572:3;14593:67;14657:2;14652:3;14593:67;:::i;:::-;14586:74;;14669:93;14758:3;14669:93;:::i;:::-;14787:2;14782:3;14778:12;14771:19;;14430:366;;;:::o;14802:::-;14944:3;14965:67;15029:2;15024:3;14965:67;:::i;:::-;14958:74;;15041:93;15130:3;15041:93;:::i;:::-;15159:2;15154:3;15150:12;15143:19;;14802:366;;;:::o;15174:::-;15316:3;15337:67;15401:2;15396:3;15337:67;:::i;:::-;15330:74;;15413:93;15502:3;15413:93;:::i;:::-;15531:2;15526:3;15522:12;15515:19;;15174:366;;;:::o;15546:::-;15688:3;15709:67;15773:2;15768:3;15709:67;:::i;:::-;15702:74;;15785:93;15874:3;15785:93;:::i;:::-;15903:2;15898:3;15894:12;15887:19;;15546:366;;;:::o;15918:365::-;16060:3;16081:66;16145:1;16140:3;16081:66;:::i;:::-;16074:73;;16156:93;16245:3;16156:93;:::i;:::-;16274:2;16269:3;16265:12;16258:19;;15918:365;;;:::o;16289:366::-;16431:3;16452:67;16516:2;16511:3;16452:67;:::i;:::-;16445:74;;16528:93;16617:3;16528:93;:::i;:::-;16646:2;16641:3;16637:12;16630:19;;16289:366;;;:::o;16661:::-;16803:3;16824:67;16888:2;16883:3;16824:67;:::i;:::-;16817:74;;16900:93;16989:3;16900:93;:::i;:::-;17018:2;17013:3;17009:12;17002:19;;16661:366;;;:::o;17033:::-;17175:3;17196:67;17260:2;17255:3;17196:67;:::i;:::-;17189:74;;17272:93;17361:3;17272:93;:::i;:::-;17390:2;17385:3;17381:12;17374:19;;17033:366;;;:::o;17405:::-;17547:3;17568:67;17632:2;17627:3;17568:67;:::i;:::-;17561:74;;17644:93;17733:3;17644:93;:::i;:::-;17762:2;17757:3;17753:12;17746:19;;17405:366;;;:::o;17777:::-;17919:3;17940:67;18004:2;17999:3;17940:67;:::i;:::-;17933:74;;18016:93;18105:3;18016:93;:::i;:::-;18134:2;18129:3;18125:12;18118:19;;17777:366;;;:::o;18149:365::-;18291:3;18312:66;18376:1;18371:3;18312:66;:::i;:::-;18305:73;;18387:93;18476:3;18387:93;:::i;:::-;18505:2;18500:3;18496:12;18489:19;;18149:365;;;:::o;18520:398::-;18679:3;18700:83;18781:1;18776:3;18700:83;:::i;:::-;18693:90;;18792:93;18881:3;18792:93;:::i;:::-;18910:1;18905:3;18901:11;18894:18;;18520:398;;;:::o;18924:366::-;19066:3;19087:67;19151:2;19146:3;19087:67;:::i;:::-;19080:74;;19163:93;19252:3;19163:93;:::i;:::-;19281:2;19276:3;19272:12;19265:19;;18924:366;;;:::o;19296:::-;19438:3;19459:67;19523:2;19518:3;19459:67;:::i;:::-;19452:74;;19535:93;19624:3;19535:93;:::i;:::-;19653:2;19648:3;19644:12;19637:19;;19296:366;;;:::o;19668:::-;19810:3;19831:67;19895:2;19890:3;19831:67;:::i;:::-;19824:74;;19907:93;19996:3;19907:93;:::i;:::-;20025:2;20020:3;20016:12;20009:19;;19668:366;;;:::o;20040:::-;20182:3;20203:67;20267:2;20262:3;20203:67;:::i;:::-;20196:74;;20279:93;20368:3;20279:93;:::i;:::-;20397:2;20392:3;20388:12;20381:19;;20040:366;;;:::o;20412:::-;20554:3;20575:67;20639:2;20634:3;20575:67;:::i;:::-;20568:74;;20651:93;20740:3;20651:93;:::i;:::-;20769:2;20764:3;20760:12;20753:19;;20412:366;;;:::o;20784:::-;20926:3;20947:67;21011:2;21006:3;20947:67;:::i;:::-;20940:74;;21023:93;21112:3;21023:93;:::i;:::-;21141:2;21136:3;21132:12;21125:19;;20784:366;;;:::o;21156:::-;21298:3;21319:67;21383:2;21378:3;21319:67;:::i;:::-;21312:74;;21395:93;21484:3;21395:93;:::i;:::-;21513:2;21508:3;21504:12;21497:19;;21156:366;;;:::o;21528:::-;21670:3;21691:67;21755:2;21750:3;21691:67;:::i;:::-;21684:74;;21767:93;21856:3;21767:93;:::i;:::-;21885:2;21880:3;21876:12;21869:19;;21528:366;;;:::o;21966:1053::-;22121:4;22116:3;22112:14;22211:4;22204:5;22200:16;22194:23;22230:61;22285:4;22280:3;22276:14;22262:12;22230:61;:::i;:::-;22136:165;22388:4;22381:5;22377:16;22371:23;22407:61;22462:4;22457:3;22453:14;22439:12;22407:61;:::i;:::-;22311:167;22565:4;22558:5;22554:16;22548:23;22584:61;22639:4;22634:3;22630:14;22616:12;22584:61;:::i;:::-;22488:167;22743:4;22736:5;22732:16;22726:23;22762:61;22817:4;22812:3;22808:14;22794:12;22762:61;:::i;:::-;22665:168;22922:4;22915:5;22911:16;22905:23;22941:61;22996:4;22991:3;22987:14;22973:12;22941:61;:::i;:::-;22843:169;22090:929;21966:1053;;:::o;23097:694::-;23258:4;23253:3;23249:14;23345:4;23338:5;23334:16;23328:23;23364:63;23421:4;23416:3;23412:14;23398:12;23364:63;:::i;:::-;23273:164;23524:4;23517:5;23513:16;23507:23;23543:61;23598:4;23593:3;23589:14;23575:12;23543:61;:::i;:::-;23447:167;23698:4;23691:5;23687:16;23681:23;23717:57;23768:4;23763:3;23759:14;23745:12;23717:57;:::i;:::-;23624:160;23227:564;23097:694;;:::o;23797:118::-;23884:24;23902:5;23884:24;:::i;:::-;23879:3;23872:37;23797:118;;:::o;23921:105::-;23996:23;24013:5;23996:23;:::i;:::-;23991:3;23984:36;23921:105;;:::o;24032:115::-;24117:23;24134:5;24117:23;:::i;:::-;24112:3;24105:36;24032:115;;:::o;24153:271::-;24283:3;24305:93;24394:3;24385:6;24305:93;:::i;:::-;24298:100;;24415:3;24408:10;;24153:271;;;;:::o;24430:589::-;24655:3;24677:95;24768:3;24759:6;24677:95;:::i;:::-;24670:102;;24789:95;24880:3;24871:6;24789:95;:::i;:::-;24782:102;;24901:92;24989:3;24980:6;24901:92;:::i;:::-;24894:99;;25010:3;25003:10;;24430:589;;;;;;:::o;25025:379::-;25209:3;25231:147;25374:3;25231:147;:::i;:::-;25224:154;;25395:3;25388:10;;25025:379;;;:::o;25410:222::-;25503:4;25541:2;25530:9;25526:18;25518:26;;25554:71;25622:1;25611:9;25607:17;25598:6;25554:71;:::i;:::-;25410:222;;;;:::o;25638:442::-;25787:4;25825:2;25814:9;25810:18;25802:26;;25838:71;25906:1;25895:9;25891:17;25882:6;25838:71;:::i;:::-;25919:72;25987:2;25976:9;25972:18;25963:6;25919:72;:::i;:::-;26001;26069:2;26058:9;26054:18;26045:6;26001:72;:::i;:::-;25638:442;;;;;;:::o;26086:640::-;26281:4;26319:3;26308:9;26304:19;26296:27;;26333:71;26401:1;26390:9;26386:17;26377:6;26333:71;:::i;:::-;26414:72;26482:2;26471:9;26467:18;26458:6;26414:72;:::i;:::-;26496;26564:2;26553:9;26549:18;26540:6;26496:72;:::i;:::-;26615:9;26609:4;26605:20;26600:2;26589:9;26585:18;26578:48;26643:76;26714:4;26705:6;26643:76;:::i;:::-;26635:84;;26086:640;;;;;;;:::o;26732:210::-;26819:4;26857:2;26846:9;26842:18;26834:26;;26870:65;26932:1;26921:9;26917:17;26908:6;26870:65;:::i;:::-;26732:210;;;;:::o;26948:313::-;27061:4;27099:2;27088:9;27084:18;27076:26;;27148:9;27142:4;27138:20;27134:1;27123:9;27119:17;27112:47;27176:78;27249:4;27240:6;27176:78;:::i;:::-;27168:86;;26948:313;;;;:::o;27267:419::-;27433:4;27471:2;27460:9;27456:18;27448:26;;27520:9;27514:4;27510:20;27506:1;27495:9;27491:17;27484:47;27548:131;27674:4;27548:131;:::i;:::-;27540:139;;27267:419;;;:::o;27692:::-;27858:4;27896:2;27885:9;27881:18;27873:26;;27945:9;27939:4;27935:20;27931:1;27920:9;27916:17;27909:47;27973:131;28099:4;27973:131;:::i;:::-;27965:139;;27692:419;;;:::o;28117:::-;28283:4;28321:2;28310:9;28306:18;28298:26;;28370:9;28364:4;28360:20;28356:1;28345:9;28341:17;28334:47;28398:131;28524:4;28398:131;:::i;:::-;28390:139;;28117:419;;;:::o;28542:::-;28708:4;28746:2;28735:9;28731:18;28723:26;;28795:9;28789:4;28785:20;28781:1;28770:9;28766:17;28759:47;28823:131;28949:4;28823:131;:::i;:::-;28815:139;;28542:419;;;:::o;28967:::-;29133:4;29171:2;29160:9;29156:18;29148:26;;29220:9;29214:4;29210:20;29206:1;29195:9;29191:17;29184:47;29248:131;29374:4;29248:131;:::i;:::-;29240:139;;28967:419;;;:::o;29392:::-;29558:4;29596:2;29585:9;29581:18;29573:26;;29645:9;29639:4;29635:20;29631:1;29620:9;29616:17;29609:47;29673:131;29799:4;29673:131;:::i;:::-;29665:139;;29392:419;;;:::o;29817:::-;29983:4;30021:2;30010:9;30006:18;29998:26;;30070:9;30064:4;30060:20;30056:1;30045:9;30041:17;30034:47;30098:131;30224:4;30098:131;:::i;:::-;30090:139;;29817:419;;;:::o;30242:::-;30408:4;30446:2;30435:9;30431:18;30423:26;;30495:9;30489:4;30485:20;30481:1;30470:9;30466:17;30459:47;30523:131;30649:4;30523:131;:::i;:::-;30515:139;;30242:419;;;:::o;30667:::-;30833:4;30871:2;30860:9;30856:18;30848:26;;30920:9;30914:4;30910:20;30906:1;30895:9;30891:17;30884:47;30948:131;31074:4;30948:131;:::i;:::-;30940:139;;30667:419;;;:::o;31092:::-;31258:4;31296:2;31285:9;31281:18;31273:26;;31345:9;31339:4;31335:20;31331:1;31320:9;31316:17;31309:47;31373:131;31499:4;31373:131;:::i;:::-;31365:139;;31092:419;;;:::o;31517:::-;31683:4;31721:2;31710:9;31706:18;31698:26;;31770:9;31764:4;31760:20;31756:1;31745:9;31741:17;31734:47;31798:131;31924:4;31798:131;:::i;:::-;31790:139;;31517:419;;;:::o;31942:::-;32108:4;32146:2;32135:9;32131:18;32123:26;;32195:9;32189:4;32185:20;32181:1;32170:9;32166:17;32159:47;32223:131;32349:4;32223:131;:::i;:::-;32215:139;;31942:419;;;:::o;32367:::-;32533:4;32571:2;32560:9;32556:18;32548:26;;32620:9;32614:4;32610:20;32606:1;32595:9;32591:17;32584:47;32648:131;32774:4;32648:131;:::i;:::-;32640:139;;32367:419;;;:::o;32792:::-;32958:4;32996:2;32985:9;32981:18;32973:26;;33045:9;33039:4;33035:20;33031:1;33020:9;33016:17;33009:47;33073:131;33199:4;33073:131;:::i;:::-;33065:139;;32792:419;;;:::o;33217:::-;33383:4;33421:2;33410:9;33406:18;33398:26;;33470:9;33464:4;33460:20;33456:1;33445:9;33441:17;33434:47;33498:131;33624:4;33498:131;:::i;:::-;33490:139;;33217:419;;;:::o;33642:::-;33808:4;33846:2;33835:9;33831:18;33823:26;;33895:9;33889:4;33885:20;33881:1;33870:9;33866:17;33859:47;33923:131;34049:4;33923:131;:::i;:::-;33915:139;;33642:419;;;:::o;34067:::-;34233:4;34271:2;34260:9;34256:18;34248:26;;34320:9;34314:4;34310:20;34306:1;34295:9;34291:17;34284:47;34348:131;34474:4;34348:131;:::i;:::-;34340:139;;34067:419;;;:::o;34492:::-;34658:4;34696:2;34685:9;34681:18;34673:26;;34745:9;34739:4;34735:20;34731:1;34720:9;34716:17;34709:47;34773:131;34899:4;34773:131;:::i;:::-;34765:139;;34492:419;;;:::o;34917:::-;35083:4;35121:2;35110:9;35106:18;35098:26;;35170:9;35164:4;35160:20;35156:1;35145:9;35141:17;35134:47;35198:131;35324:4;35198:131;:::i;:::-;35190:139;;34917:419;;;:::o;35342:::-;35508:4;35546:2;35535:9;35531:18;35523:26;;35595:9;35589:4;35585:20;35581:1;35570:9;35566:17;35559:47;35623:131;35749:4;35623:131;:::i;:::-;35615:139;;35342:419;;;:::o;35767:::-;35933:4;35971:2;35960:9;35956:18;35948:26;;36020:9;36014:4;36010:20;36006:1;35995:9;35991:17;35984:47;36048:131;36174:4;36048:131;:::i;:::-;36040:139;;35767:419;;;:::o;36192:::-;36358:4;36396:2;36385:9;36381:18;36373:26;;36445:9;36439:4;36435:20;36431:1;36420:9;36416:17;36409:47;36473:131;36599:4;36473:131;:::i;:::-;36465:139;;36192:419;;;:::o;36617:::-;36783:4;36821:2;36810:9;36806:18;36798:26;;36870:9;36864:4;36860:20;36856:1;36845:9;36841:17;36834:47;36898:131;37024:4;36898:131;:::i;:::-;36890:139;;36617:419;;;:::o;37042:339::-;37193:4;37231:3;37220:9;37216:19;37208:27;;37245:129;37371:1;37360:9;37356:17;37347:6;37245:129;:::i;:::-;37042:339;;;;:::o;37387:350::-;37544:4;37582:2;37571:9;37567:18;37559:26;;37595:135;37727:1;37716:9;37712:17;37703:6;37595:135;:::i;:::-;37387:350;;;;:::o;37743:222::-;37836:4;37874:2;37863:9;37859:18;37851:26;;37887:71;37955:1;37944:9;37940:17;37931:6;37887:71;:::i;:::-;37743:222;;;;:::o;37971:218::-;38062:4;38100:2;38089:9;38085:18;38077:26;;38113:69;38179:1;38168:9;38164:17;38155:6;38113:69;:::i;:::-;37971:218;;;;:::o;38195:129::-;38229:6;38256:20;;:::i;:::-;38246:30;;38285:33;38313:4;38305:6;38285:33;:::i;:::-;38195:129;;;:::o;38330:75::-;38363:6;38396:2;38390:9;38380:19;;38330:75;:::o;38411:307::-;38472:4;38562:18;38554:6;38551:30;38548:56;;;38584:18;;:::i;:::-;38548:56;38622:29;38644:6;38622:29;:::i;:::-;38614:37;;38706:4;38700;38696:15;38688:23;;38411:307;;;:::o;38724:308::-;38786:4;38876:18;38868:6;38865:30;38862:56;;;38898:18;;:::i;:::-;38862:56;38936:29;38958:6;38936:29;:::i;:::-;38928:37;;39020:4;39014;39010:15;39002:23;;38724:308;;;:::o;39038:141::-;39087:4;39110:3;39102:11;;39133:3;39130:1;39123:14;39167:4;39164:1;39154:18;39146:26;;39038:141;;;:::o;39185:98::-;39236:6;39270:5;39264:12;39254:22;;39185:98;;;:::o;39289:99::-;39341:6;39375:5;39369:12;39359:22;;39289:99;;;:::o;39394:168::-;39477:11;39511:6;39506:3;39499:19;39551:4;39546:3;39542:14;39527:29;;39394:168;;;;:::o;39568:147::-;39669:11;39706:3;39691:18;;39568:147;;;;:::o;39721:169::-;39805:11;39839:6;39834:3;39827:19;39879:4;39874:3;39870:14;39855:29;;39721:169;;;;:::o;39896:148::-;39998:11;40035:3;40020:18;;39896:148;;;;:::o;40050:305::-;40090:3;40109:20;40127:1;40109:20;:::i;:::-;40104:25;;40143:20;40161:1;40143:20;:::i;:::-;40138:25;;40297:1;40229:66;40225:74;40222:1;40219:81;40216:107;;;40303:18;;:::i;:::-;40216:107;40347:1;40344;40340:9;40333:16;;40050:305;;;;:::o;40361:254::-;40400:3;40419:19;40436:1;40419:19;:::i;:::-;40414:24;;40452:19;40469:1;40452:19;:::i;:::-;40447:24;;40557:1;40537:18;40533:26;40530:1;40527:33;40524:59;;;40563:18;;:::i;:::-;40524:59;40607:1;40604;40600:9;40593:16;;40361:254;;;;:::o;40621:185::-;40661:1;40678:20;40696:1;40678:20;:::i;:::-;40673:25;;40712:20;40730:1;40712:20;:::i;:::-;40707:25;;40751:1;40741:35;;40756:18;;:::i;:::-;40741:35;40798:1;40795;40791:9;40786:14;;40621:185;;;;:::o;40812:182::-;40851:1;40868:19;40885:1;40868:19;:::i;:::-;40863:24;;40901:19;40918:1;40901:19;:::i;:::-;40896:24;;40939:1;40929:35;;40944:18;;:::i;:::-;40929:35;40986:1;40983;40979:9;40974:14;;40812:182;;;;:::o;41000:348::-;41040:7;41063:20;41081:1;41063:20;:::i;:::-;41058:25;;41097:20;41115:1;41097:20;:::i;:::-;41092:25;;41285:1;41217:66;41213:74;41210:1;41207:81;41202:1;41195:9;41188:17;41184:105;41181:131;;;41292:18;;:::i;:::-;41181:131;41340:1;41337;41333:9;41322:20;;41000:348;;;;:::o;41354:297::-;41393:7;41416:19;41433:1;41416:19;:::i;:::-;41411:24;;41449:19;41466:1;41449:19;:::i;:::-;41444:24;;41588:1;41568:18;41564:26;41561:1;41558:33;41553:1;41546:9;41539:17;41535:57;41532:83;;;41595:18;;:::i;:::-;41532:83;41643:1;41640;41636:9;41625:20;;41354:297;;;;:::o;41657:191::-;41697:4;41717:20;41735:1;41717:20;:::i;:::-;41712:25;;41751:20;41769:1;41751:20;:::i;:::-;41746:25;;41790:1;41787;41784:8;41781:34;;;41795:18;;:::i;:::-;41781:34;41840:1;41837;41833:9;41825:17;;41657:191;;;;:::o;41854:188::-;41893:4;41913:19;41930:1;41913:19;:::i;:::-;41908:24;;41946:19;41963:1;41946:19;:::i;:::-;41941:24;;41984:1;41981;41978:8;41975:34;;;41989:18;;:::i;:::-;41975:34;42034:1;42031;42027:9;42019:17;;41854:188;;;;:::o;42048:96::-;42085:7;42114:24;42132:5;42114:24;:::i;:::-;42103:35;;42048:96;;;:::o;42150:90::-;42184:7;42227:5;42220:13;42213:21;42202:32;;42150:90;;;:::o;42246:149::-;42282:7;42322:66;42315:5;42311:78;42300:89;;42246:149;;;:::o;42401:126::-;42438:7;42478:42;42471:5;42467:54;42456:65;;42401:126;;;:::o;42533:77::-;42570:7;42599:5;42588:16;;42533:77;;;:::o;42616:101::-;42652:7;42692:18;42685:5;42681:30;42670:41;;42616:101;;;:::o;42723:154::-;42807:6;42802:3;42797;42784:30;42869:1;42860:6;42855:3;42851:16;42844:27;42723:154;;;:::o;42883:307::-;42951:1;42961:113;42975:6;42972:1;42969:13;42961:113;;;43060:1;43055:3;43051:11;43045:18;43041:1;43036:3;43032:11;43025:39;42997:2;42994:1;42990:10;42985:15;;42961:113;;;43092:6;43089:1;43086:13;43083:101;;;43172:1;43163:6;43158:3;43154:16;43147:27;43083:101;42932:258;42883:307;;;:::o;43196:320::-;43240:6;43277:1;43271:4;43267:12;43257:22;;43324:1;43318:4;43314:12;43345:18;43335:81;;43401:4;43393:6;43389:17;43379:27;;43335:81;43463:2;43455:6;43452:14;43432:18;43429:38;43426:84;;;43482:18;;:::i;:::-;43426:84;43247:269;43196:320;;;:::o;43522:281::-;43605:27;43627:4;43605:27;:::i;:::-;43597:6;43593:40;43735:6;43723:10;43720:22;43699:18;43687:10;43684:34;43681:62;43678:88;;;43746:18;;:::i;:::-;43678:88;43786:10;43782:2;43775:22;43565:238;43522:281;;:::o;43809:233::-;43848:3;43871:24;43889:5;43871:24;:::i;:::-;43862:33;;43917:66;43910:5;43907:77;43904:103;;;43987:18;;:::i;:::-;43904:103;44034:1;44027:5;44023:13;44016:20;;43809:233;;;:::o;44048:183::-;44086:3;44109:23;44126:5;44109:23;:::i;:::-;44100:32;;44154:18;44147:5;44144:29;44141:55;;;44176:18;;:::i;:::-;44141:55;44223:1;44216:5;44212:13;44205:20;;44048:183;;;:::o;44237:176::-;44269:1;44286:20;44304:1;44286:20;:::i;:::-;44281:25;;44320:20;44338:1;44320:20;:::i;:::-;44315:25;;44359:1;44349:35;;44364:18;;:::i;:::-;44349:35;44405:1;44402;44398:9;44393:14;;44237:176;;;;:::o;44419:180::-;44467:77;44464:1;44457:88;44564:4;44561:1;44554:15;44588:4;44585:1;44578:15;44605:180;44653:77;44650:1;44643:88;44750:4;44747:1;44740:15;44774:4;44771:1;44764:15;44791:180;44839:77;44836:1;44829:88;44936:4;44933:1;44926:15;44960:4;44957:1;44950:15;44977:180;45025:77;45022:1;45015:88;45122:4;45119:1;45112:15;45146:4;45143:1;45136:15;45163:180;45211:77;45208:1;45201:88;45308:4;45305:1;45298:15;45332:4;45329:1;45322:15;45349:180;45397:77;45394:1;45387:88;45494:4;45491:1;45484:15;45518:4;45515:1;45508:15;45535:117;45644:1;45641;45634:12;45658:117;45767:1;45764;45757:12;45781:117;45890:1;45887;45880:12;45904:117;46013:1;46010;46003:12;46027:102;46068:6;46119:2;46115:7;46110:2;46103:5;46099:14;46095:28;46085:38;;46027:102;;;:::o;46135:164::-;46275:16;46271:1;46263:6;46259:14;46252:40;46135:164;:::o;46305:225::-;46445:34;46441:1;46433:6;46429:14;46422:58;46514:8;46509:2;46501:6;46497:15;46490:33;46305:225;:::o;46536:169::-;46676:21;46672:1;46664:6;46660:14;46653:45;46536:169;:::o;46711:175::-;46851:27;46847:1;46839:6;46835:14;46828:51;46711:175;:::o;46892:164::-;47032:16;47028:1;47020:6;47016:14;47009:40;46892:164;:::o;47062:163::-;47202:15;47198:1;47190:6;47186:14;47179:39;47062:163;:::o;47231:225::-;47371:34;47367:1;47359:6;47355:14;47348:58;47440:8;47435:2;47427:6;47423:15;47416:33;47231:225;:::o;47462:160::-;47602:12;47598:1;47590:6;47586:14;47579:36;47462:160;:::o;47628:158::-;47768:10;47764:1;47756:6;47752:14;47745:34;47628:158;:::o;47792:168::-;47932:20;47928:1;47920:6;47916:14;47909:44;47792:168;:::o;47966:182::-;48106:34;48102:1;48094:6;48090:14;48083:58;47966:182;:::o;48154:162::-;48294:14;48290:1;48282:6;48278:14;48271:38;48154:162;:::o;48322:163::-;48462:15;48458:1;48450:6;48446:14;48439:39;48322:163;:::o;48491:167::-;48631:19;48627:1;48619:6;48615:14;48608:43;48491:167;:::o;48664:158::-;48804:10;48800:1;48792:6;48788:14;48781:34;48664:158;:::o;48828:114::-;;:::o;48948:160::-;49088:12;49084:1;49076:6;49072:14;49065:36;48948:160;:::o;49114:165::-;49254:17;49250:1;49242:6;49238:14;49231:41;49114:165;:::o;49285:179::-;49425:31;49421:1;49413:6;49409:14;49402:55;49285:179;:::o;49470:162::-;49610:14;49606:1;49598:6;49594:14;49587:38;49470:162;:::o;49638:229::-;49778:34;49774:1;49766:6;49762:14;49755:58;49847:12;49842:2;49834:6;49830:15;49823:37;49638:229;:::o;49873:160::-;50013:12;50009:1;50001:6;49997:14;49990:36;49873:160;:::o;50039:181::-;50179:33;50175:1;50167:6;50163:14;50156:57;50039:181;:::o;50226:165::-;50366:17;50362:1;50354:6;50350:14;50343:41;50226:165;:::o;50397:122::-;50470:24;50488:5;50470:24;:::i;:::-;50463:5;50460:35;50450:63;;50509:1;50506;50499:12;50450:63;50397:122;:::o;50525:116::-;50595:21;50610:5;50595:21;:::i;:::-;50588:5;50585:32;50575:60;;50631:1;50628;50621:12;50575:60;50525:116;:::o;50647:120::-;50719:23;50736:5;50719:23;:::i;:::-;50712:5;50709:34;50699:62;;50757:1;50754;50747:12;50699:62;50647:120;:::o;50773:113::-;50860:1;50853:5;50850:12;50840:40;;50876:1;50873;50866:12;50840:40;50773:113;:::o;50892:122::-;50965:24;50983:5;50965:24;:::i;:::-;50958:5;50955:35;50945:63;;51004:1;51001;50994:12;50945:63;50892:122;:::o;51020:120::-;51092:23;51109:5;51092:23;:::i;:::-;51085:5;51082:34;51072:62;;51130:1;51127;51120:12;51072:62;51020:120;:::o

Swarm Source

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