ETH Price: $2,501.29 (+0.66%)

Token

Shell (SHELL)
 

Overview

Max Total Supply

1,256,750 SHELL

Holders

47

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
28,000 SHELL

Value
$0.00
0xa4c7873A7F75D054A2d7720d2C00cF998147B2d6
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Shell

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 2023-03-21
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// 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/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

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

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

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

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

// 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/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: contracts/shell.sol


pragma solidity ^0.8.7;





interface IStaking is IERC721Enumerable {
    function amountOfTurtlesStaked(address owner)
        external
        view
        returns (uint256);
}

error NotOwner();
error AlreadyStaking();

contract Shell is ERC20Burnable, Ownable {
    uint256 public constant MAX_SUPPLY = 26_406_000;
    uint256 internal constant EMISSIONS_RATE = 23148140000000;

    address deadAddress = 0x000000000000000000000000000000000000dEaD;

    bytes32 private root;

    address private terraCrateAddress;
    address private oldAddress;
    address private stakingAddress;
    address private terrapinsAddress;

    struct QuestData {
        uint256 questTimeStamp;
        bool isQuesting;
        bool questFound;
        uint256 questPack;
        uint256[] questInventory;
    }

    struct Stake {
        uint96 tokenIdTimeStamp;
        address staker;
    }

    mapping(address => QuestData) public addressToQuests;

    mapping(address => bool) public walletClaimed;

    mapping(uint256 => Stake) public tokenIdToStake;

    event stake(address indexed owner, uint256 indexed tokenId);
    event unstake(address indexed owner, uint256 indexed tokenId);
    
    uint256 public totalStakingSupply = 0;

    constructor(bytes32 _root, address _terraCrate, address _old, address _staking) ERC20("Shell", "SHELL") {
        root = _root;
        terraCrateAddress = _terraCrate;
        oldAddress = _old;
        stakingAddress = _staking;
    }

    //////////////////////////////////////////////////
    ///              Part I: Claim                ///
    ////////////////////////////////////////////////
    
    function claim(bytes32[] memory proof) external {
        require(!walletClaimed[msg.sender], "wallet claimed.");
        require(isValid(proof, keccak256(abi.encodePacked(msg.sender))), "Not a part of Allowlist");
        
        uint256 amount = 
            IERC721Enumerable(terraCrateAddress).balanceOf(msg.sender) * 1000 ether;

        if (block.timestamp < 1679778000) {
            amount += (IERC721Enumerable(oldAddress).balanceOf(msg.sender) * 250 ether ) + 
                (IStaking(stakingAddress).amountOfTurtlesStaked(msg.sender) * 1000 ether);
        }

        walletClaimed[msg.sender] = true;

        _safeMint(msg.sender, amount);
    }

    function isValid(bytes32[] memory proof, bytes32 leaf) internal view returns (bool) {
        return MerkleProof.verify(proof, root, leaf);
    }

    function _safeMint(address to, uint256 amount) internal {
        uint256 newSupply = totalSupply() + amount;
        require(newSupply <= MAX_SUPPLY * 1 ether, "Max Supply.");
        _mint(to, amount);
    }

    function setClaimAddresses(
        address _terraCrate,
        address _old,
        address _staking
        ) external onlyOwner { 
        terraCrateAddress = _terraCrate;
        oldAddress = _old;
        stakingAddress = _staking;
    }
    
    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner{
        root = _merkleRoot;
    }

    //////////////////////////////////////////////////
    ///              Part II: Stake               ///
    ////////////////////////////////////////////////

    function stakeById(uint256[] calldata tokenIds) external {
        uint256 length = tokenIds.length;
        for (uint256 i; i < length; ) {
            uint256 id = tokenIds[i];
            if (IERC721Enumerable(terrapinsAddress).ownerOf(id) != msg.sender) revert NotOwner();
            Stake storage data = tokenIdToStake[id];
            if (data.staker == msg.sender) revert AlreadyStaking();
            
            data.tokenIdTimeStamp = uint96(block.timestamp);
            data.staker = msg.sender;
            
            unchecked {
              ++i;
            }
            emit stake(msg.sender, id);
        }
        totalStakingSupply += length;
    }

    function unStakeById(uint256[] calldata tokenIds) external {
        uint256 totalShell = 0;
        uint256 length = tokenIds.length;
        for (uint256 i = 0; i < length; i++) {
            uint256 id = tokenIds[i];
            Stake storage data = tokenIdToStake[id];
            require(
                data.staker == msg.sender,
                "Message Sender was not original staker!"
            );

            totalShell =
                totalShell +
                ((block.timestamp - data.tokenIdTimeStamp) *
                    EMISSIONS_RATE);

            data.staker = deadAddress;

            emit unstake(msg.sender, id);
        }
        totalStakingSupply -= length;

        _safeMint(msg.sender, totalShell);
    }

    function claimAll(uint256[] calldata tokenIds) external {
        uint256 totalShell = 0;

        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 id = tokenIds[i];
            Stake storage data = tokenIdToStake[id];
            require(
                data.staker == msg.sender,
                "Token is not claimable by you!"
            );

            totalShell =
                totalShell +
                ((block.timestamp - data.tokenIdTimeStamp) *
                    EMISSIONS_RATE);

            data.tokenIdTimeStamp = uint96(block.timestamp);
        }

        _safeMint(msg.sender, totalShell);
    }

    function getOwnerRewards(address owner, uint256[] memory tokenIds) public view returns (uint256) {
        uint256 totalShell = 0;

        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 id = tokenIds[i];
            Stake memory data = tokenIdToStake[id];
            require(
                data.staker != deadAddress &&
                data.staker == owner,
                "Token is not staked!"
            );
            
            totalShell =
                totalShell +
                ((block.timestamp - data.tokenIdTimeStamp) *
                    EMISSIONS_RATE);
        }

        return totalShell;
    }

    function getRewardsByTokenId(uint256 tokenId) public view returns (uint256) {
        Stake memory data = tokenIdToStake[tokenId];
        require(
            data.staker != deadAddress,
            "Token is not staked!"
        );

        uint256 secondsStaked = block.timestamp - data.tokenIdTimeStamp;

        return secondsStaked * EMISSIONS_RATE;
    }

    function getStaker(uint256 tokenId) public view returns (address) {
        Stake memory data = tokenIdToStake[tokenId];
        return data.staker;
    }

    function setTerraAddress(address _terrapins) external onlyOwner{
        terrapinsAddress = _terrapins;
    }

    //////////////////////////////////////////////////
    ///              Part III: Quest              ///
    ////////////////////////////////////////////////

    function startQuesting(uint256 bag) external {
        QuestData storage data = addressToQuests[msg.sender];
        require(!data.isQuesting, "You are questing.");
        require(bag > 0 && bag <= 3, "Does not exists");

        uint256 amount = getQuestPack(bag);
        
        data.questTimeStamp = block.timestamp + 10800;
        data.isQuesting = true;
        data.questFound = false;
        data.questPack = bag;

        transfer(deadAddress, amount);
    }

    function revealItem() public {
        QuestData storage data = addressToQuests[msg.sender];
        require(data.isQuesting, "You are not questing at the moment.");
        require(block.timestamp >= data.questTimeStamp, "still Questing");
        require(!data.questFound, "Item has been revealed.");
    
        data.questFound = true;

        uint256 random = uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, msg.sender))) % 100 + 1;
        uint256[] memory probabilities = getQuestPackProb(data.questPack);

        if (random <= probabilities[0]) {
            data.questInventory.push(1);
        } else if (random <= probabilities[0] + probabilities[1]) {
            data.questInventory.push(2);
        } else if (random <= probabilities[0] + probabilities[1] + probabilities[2]) {
            data.questInventory.push(3);
        } else if (random <= probabilities[0] + probabilities[1] + probabilities[2] + probabilities[3]) {
            data.questInventory.push(4);
        } else {
            data.questInventory.push(5);
        }

        data.isQuesting = false;
    }

    function sellAll() public {
        QuestData memory data = addressToQuests[msg.sender];
        require(data.questInventory.length > 0, "zero inventory");

        uint256[] memory inventory = data.questInventory;
        uint256 totalSHELL = 0;
        uint256 tax = 1 ether;
        
        for (uint i = 0; i < inventory.length; i++) {
            if (inventory[i] == 1) { // Gem
                totalSHELL = totalSHELL + 100 ether;
            } else if (inventory[i] == 2) { // Gold
                totalSHELL = totalSHELL + 85 ether;
            } else if (inventory[i] == 3) { // Silver
                totalSHELL = totalSHELL + 65 ether;
            } else if (inventory[i] == 4) { // Stone
                totalSHELL = totalSHELL + 25 ether;
            } else if (inventory[i] == 5) { // Wood
                totalSHELL = totalSHELL + 10 ether;
            } else if (inventory[i] == 6) { // Ring
                totalSHELL = totalSHELL + 280 ether;
            } else if (inventory[i] == 7) { // Gold Chain
                totalSHELL = totalSHELL + 210 ether;
            } else if (inventory[i] == 8) { // Silver Chain
                totalSHELL = totalSHELL + 160 ether;
            } else if (inventory[i] == 9) { // Axe
                totalSHELL = totalSHELL + 110 ether;
            }
            
            removeItemFromInventory(msg.sender, inventory[i]);
        }

        _safeMint(msg.sender, totalSHELL - tax);
    }

    function CraftTool(uint256 craftItem) public {
        QuestData storage data = addressToQuests[msg.sender];
        require(data.questInventory.length > 0, "zero inventory");
        require(craftItem > 0 && craftItem <= 4, "Invalid craft item");

        uint256[] memory requiredItems;
        uint256 item;
        if (craftItem == 1) {
            require(countItem(1) >= 2, "Not enought material");
            requiredItems = new uint256[](2);
            requiredItems[0] = 1;
            requiredItems[1] = 1;

            item = 6;
        } else if (craftItem == 2) {
            require(countItem(2) >= 2, "Not enought material");
            requiredItems = new uint256[](2);
            requiredItems[0] = 2;
            requiredItems[1] = 2;
            item = 7;
        } else if (craftItem == 3) {
            require(countItem(3) >= 2, "Not enought material");
            requiredItems = new uint256[](2);
            requiredItems[0] = 3;
            requiredItems[1] = 3;
            item = 8;
        } else if (craftItem == 4) {
            require(countItem(4) >= 2, "Not enought material");
            require(countItem(5) >= 3, "Not enought material");
            requiredItems = new uint256[](5);
            requiredItems[0] = 4;
            requiredItems[1] = 4;
            requiredItems[2] = 5;
            requiredItems[3] = 5;
            requiredItems[4] = 5;
            item = 9;
        }

        for (uint256 i = 0; i < requiredItems.length; i++) {
            removeItemFromInventory(msg.sender, requiredItems[i]);
        }

        data.questInventory.push(item);

        transfer(deadAddress, 2 ether);
    }

    function getQuestPackProb(uint256 _questPack) internal pure returns (uint256[] memory) {
        uint256[] memory probabilities = new uint256[](5);

        if (_questPack == 1) {
            probabilities[0] = 3; 
            probabilities[1] = 6; 
            probabilities[2] = 10; 
            probabilities[3] = 25;
            probabilities[4] = 56; 
        } else if (_questPack == 2) {
            probabilities[0] = 4; 
            probabilities[1] = 7; 
            probabilities[2] = 15;
            probabilities[3] = 30;
            probabilities[4] = 44;
        } else if (_questPack == 3) {
            probabilities[0] = 5;
            probabilities[1] = 8;
            probabilities[2] = 18;
            probabilities[3] = 33;
            probabilities[4] = 36;
        }

        return probabilities;
    }

    function getQuestPack(uint256 bag) internal pure returns (uint256 amountToBurn) {
        if (bag == 1) {
            amountToBurn = 8 ether;
        } else if (bag == 2) {
            amountToBurn = 15 ether;
        } else {
            amountToBurn = 20 ether;
        }
        return amountToBurn;
    }

    function countItem(uint256 itemId) internal view returns (uint256) {
        QuestData memory data = addressToQuests[msg.sender];
        uint256[] memory inventory = data.questInventory;
        uint256 count = 0;
        
        for (uint256 i = 0; i < inventory.length; i++) {
            if (inventory[i] == itemId) {
                count++;
            }
        }
        return count;
    }

    function removeItem(address staker, uint256 index) internal {
        QuestData storage data = addressToQuests[staker];
        uint256[] storage inventory = data.questInventory;
        if (index >= inventory.length) return;

        for (uint256 i = index; i < inventory.length - 1; i++) {
            inventory[i] = inventory[i + 1];
        }
        inventory.pop();
    }

    function removeItemFromInventory(address staker, uint256 itemId) internal {
        QuestData memory data = addressToQuests[staker];
        uint256[] memory inventory = data.questInventory;
        for (uint256 i = 0; i < inventory.length; i++) {
            if (inventory[i] == itemId) {
                //This is the tokenId to remove;
                removeItem(staker, i);
                return; 
            }
        }
    }

    function getInventory(address quester) public view returns (uint256[] memory) {
        QuestData memory data = addressToQuests[quester];
        return data.questInventory;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"},{"internalType":"address","name":"_terraCrate","type":"address"},{"internalType":"address","name":"_old","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyStaking","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstake","type":"event"},{"inputs":[{"internalType":"uint256","name":"craftItem","type":"uint256"}],"name":"CraftTool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToQuests","outputs":[{"internalType":"uint256","name":"questTimeStamp","type":"uint256"},{"internalType":"bool","name":"isQuesting","type":"bool"},{"internalType":"bool","name":"questFound","type":"bool"},{"internalType":"uint256","name":"questPack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"quester","type":"address"}],"name":"getInventory","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"getOwnerRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRewardsByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_terraCrate","type":"address"},{"internalType":"address","name":"_old","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setClaimAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_terrapins","type":"address"}],"name":"setTerraAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bag","type":"uint256"}],"name":"startQuesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToStake","outputs":[{"internalType":"uint96","name":"tokenIdTimeStamp","type":"uint96"},{"internalType":"address","name":"staker","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unStakeById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405261dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f553480156200005957600080fd5b5060405162005bca38038062005bca83398181016040528101906200007f9190620003bf565b6040518060400160405280600581526020017f5368656c6c0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5348454c4c000000000000000000000000000000000000000000000000000000815250816003908051906020019062000103929190620002e1565b5080600490805190602001906200011c929190620002e1565b5050506200013f620001336200021360201b60201c565b6200021b60201b60201c565b8360078190555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050506200050d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ef906200046f565b90600052602060002090601f0160209004810192826200031357600085556200035f565b82601f106200032e57805160ff19168380011785556200035f565b828001600101855582156200035f579182015b828111156200035e57825182559160200191906001019062000341565b5b5090506200036e919062000372565b5090565b5b808211156200038d57600081600090555060010162000373565b5090565b600081519050620003a281620004d9565b92915050565b600081519050620003b981620004f3565b92915050565b60008060008060808587031215620003dc57620003db620004d4565b5b6000620003ec87828801620003a8565b9450506020620003ff8782880162000391565b9350506040620004128782880162000391565b9250506060620004258782880162000391565b91505092959194509250565b60006200043e826200044f565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048857607f821691505b602082108114156200049f576200049e620004a5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620004e48162000431565b8114620004f057600080fd5b50565b620004fe8162000445565b81146200050a57600080fd5b50565b6156ad806200051d6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80638b87c54411610125578063c25d8f4d116100ad578063e3c998fe1161007c578063e3c998fe1461065e578063e8b4c7d41461068e578063f244b84214610698578063f2fde38b146106b6578063f9b21507146106d25761021c565b8063c25d8f4d146105c6578063d71aa1b0146105f6578063da62488314610612578063dd62ed3e1461062e5761021c565b8063a3b1e2b2116100f4578063a3b1e2b214610512578063a457c2d71461052e578063a9059cbb1461055e578063b25d9f3a1461058e578063b391c508146105aa5761021c565b80638b87c544146104765780638da5cb5b146104a65780638f0be822146104c457806395d89b41146104f45761021c565b80633557e6be116101a857806370a082311161017757806370a08231146103e8578063715018a61461041857806379cc6790146104225780637cb647591461043e5780638a94937c1461045a5761021c565b80633557e6be1461033b578063395093511461036c57806342966c681461039c578063515ec105146103b85761021c565b806323b872dd116101ef57806323b872dd1461029757806328c77820146102c7578063313ce567146102e3578063327ee21f1461030157806332cb6b0c1461031d5761021c565b806306fdde0314610221578063095ea7b31461023f57806316e457f01461026f57806318160ddd14610279575b600080fd5b610229610705565b60405161023691906147a4565b60405180910390f35b610259600480360381019061025491906140d2565b610797565b6040516102669190614789565b60405180910390f35b6102776107ba565b005b610281610ba2565b60405161028e9190614b06565b60405180910390f35b6102b160048036038101906102ac9190614023565b610bac565b6040516102be9190614789565b60405180910390f35b6102e160048036038101906102dc919061415b565b610bdb565b005b6102eb610d5d565b6040516102f89190614b66565b60405180910390f35b61031b600480360381019061031691906141d5565b610d66565b005b61032561135f565b6040516103329190614b06565b60405180910390f35b610355600480360381019061035091906141d5565b611367565b604051610363929190614b81565b60405180910390f35b610386600480360381019061038191906140d2565b6113c3565b6040516103939190614789565b60405180910390f35b6103b660048036038101906103b191906141d5565b6113fa565b005b6103d260048036038101906103cd91906141d5565b61140e565b6040516103df9190614b06565b60405180910390f35b61040260048036038101906103fd9190613f36565b611597565b60405161040f9190614b06565b60405180910390f35b6104206115df565b005b61043c600480360381019061043791906140d2565b6115f3565b005b610458600480360381019061045391906141a8565b611613565b005b610474600480360381019061046f9190613fd0565b611625565b005b610490600480360381019061048b9190613f36565b6116f5565b60405161049d9190614767565b60405180910390f35b6104ae6117f4565b6040516104bb919061474c565b60405180910390f35b6104de60048036038101906104d99190614076565b61181e565b6040516104eb9190614b06565b60405180910390f35b6104fc611a32565b60405161050991906147a4565b60405180910390f35b61052c60048036038101906105279190613f36565b611ac4565b005b610548600480360381019061054391906140d2565b611b10565b6040516105559190614789565b60405180910390f35b610578600480360381019061057391906140d2565b611b87565b6040516105859190614789565b60405180910390f35b6105a860048036038101906105a3919061415b565b611baa565b005b6105c460048036038101906105bf9190614112565b611e71565b005b6105e060048036038101906105db9190613f36565b612238565b6040516105ed9190614789565b60405180910390f35b610610600480360381019061060b919061415b565b612258565b005b61062c600480360381019061062791906141d5565b61246f565b005b61064860048036038101906106439190613f90565b6125ec565b6040516106559190614b06565b60405180910390f35b610678600480360381019061067391906141d5565b612673565b604051610685919061474c565b60405180910390f35b610696612737565b005b6106a0612b5e565b6040516106ad9190614b06565b60405180910390f35b6106d060048036038101906106cb9190613f36565b612b64565b005b6106ec60048036038101906106e79190613f36565b612be8565b6040516106fc9493929190614b21565b60405180910390f35b60606003805461071490614e0a565b80601f016020809104026020016040519081016040528092919081815260200182805461074090614e0a565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050905090565b6000806107a2612c32565b90506107af818585612c3a565b600191505092915050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff16151515158152602001600282015481526020016003820180548060200260200160405190810160405280929190818152602001828054801561089f57602002820191906000526020600020905b81548152602001906001019080831161088b575b50505050508152505090506000816080015151116108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990614866565b60405180910390fd5b600081608001519050600080670de0b6b3a7640000905060005b8351811015610b8657600184828151811061092a57610929614fd1565b5b602002602001015114156109545768056bc75e2d631000008361094d9190614c7c565b9250610b4f565b600284828151811061096957610968614fd1565b5b602002602001015114156109935768049b9ca9a6943400008361098c9190614c7c565b9250610b4e565b60038482815181106109a8576109a7614fd1565b5b602002602001015114156109d2576803860e639d80640000836109cb9190614c7c565b9250610b4d565b60048482815181106109e7576109e6614fd1565b5b60200260200101511415610a115768015af1d78b58c4000083610a0a9190614c7c565b9250610b4c565b6005848281518110610a2657610a25614fd1565b5b60200260200101511415610a4f57678ac7230489e8000083610a489190614c7c565b9250610b4b565b6006848281518110610a6457610a63614fd1565b5b60200260200101511415610a8e57680f2dc7d47f1560000083610a879190614c7c565b9250610b4a565b6007848281518110610aa357610aa2614fd1565b5b60200260200101511415610acd57680b6255df5f5008000083610ac69190614c7c565b9250610b49565b6008848281518110610ae257610ae1614fd1565b5b60200260200101511415610b0c576808ac7230489e80000083610b059190614c7c565b9250610b48565b6009848281518110610b2157610b20614fd1565b5b60200260200101511415610b47576805f68e8131ecf8000083610b449190614c7c565b92505b5b5b5b5b5b5b5b5b610b7333858381518110610b6657610b65614fd1565b5b6020026020010151612e05565b8080610b7e90614e6d565b91505061090c565b50610b9c338284610b979190614d2c565b612f59565b50505050565b6000600254905090565b600080610bb7612c32565b9050610bc4858285612fd9565b610bcf858585613065565b60019150509392505050565b6000805b83839050811015610d4d576000848483818110610bff57610bfe614fd1565b5b9050602002013590506000600e600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff1681600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614906565b60405180910390fd5b65150d98a973008160000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1642610cee9190614d2c565b610cf89190614cd2565b84610d039190614c7c565b9350428160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050508080610d4590614e6d565b915050610bdf565b50610d583382612f59565b505050565b60006012905090565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816003018054905011610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90614866565b60405180910390fd5b600082118015610e04575060048211155b610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90614a86565b60405180910390fd5b606060006001841415610f36576002610e5c60016132dd565b1015610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490614926565b60405180910390fd5b600267ffffffffffffffff811115610eb857610eb7615000565b5b604051908082528060200260200182016040528015610ee65781602001602082028036833780820191505090505b509150600182600081518110610eff57610efe614fd1565b5b602002602001018181525050600182600181518110610f2157610f20614fd1565b5b602002602001018181525050600690506112b5565b6002841415611025576002610f4b60026132dd565b1015610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614926565b60405180910390fd5b600267ffffffffffffffff811115610fa757610fa6615000565b5b604051908082528060200260200182016040528015610fd55781602001602082028036833780820191505090505b509150600282600081518110610fee57610fed614fd1565b5b6020026020010181815250506002826001815181106110105761100f614fd1565b5b602002602001018181525050600790506112b4565b600384141561111457600261103a60036132dd565b101561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290614926565b60405180910390fd5b600267ffffffffffffffff81111561109657611095615000565b5b6040519080825280602002602001820160405280156110c45781602001602082028036833780820191505090505b5091506003826000815181106110dd576110dc614fd1565b5b6020026020010181815250506003826001815181106110ff576110fe614fd1565b5b602002602001018181525050600890506112b3565b60048414156112b257600261112960046132dd565b101561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190614926565b60405180910390fd5b600361117660056132dd565b10156111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90614926565b60405180910390fd5b600567ffffffffffffffff8111156111d2576111d1615000565b5b6040519080825280602002602001820160405280156112005781602001602082028036833780820191505090505b50915060048260008151811061121957611218614fd1565b5b60200260200101818152505060048260018151811061123b5761123a614fd1565b5b60200260200101818152505060058260028151811061125d5761125c614fd1565b5b60200260200101818152505060058260038151811061127f5761127e614fd1565b5b6020026020010181815250506005826004815181106112a1576112a0614fd1565b5b602002602001018181525050600990505b5b5b5b60005b82518110156112f8576112e5338483815181106112d8576112d7614fd1565b5b6020026020010151612e05565b80806112f090614e6d565b9150506112b8565b5082600301819080600181540180825580915050600190039060005260206000200160009091909190915055611358600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16671bc16d674ec80000611b87565b5050505050565b630192ec7081565b600e6020528060005260406000206000915090508060000160009054906101000a90046bffffffffffffffffffffffff169080600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000806113ce612c32565b90506113ef8185856113e085896125ec565b6113ea9190614c7c565b612c3a565b600191505092915050565b61140b611405612c32565b82613434565b50565b600080600e60008481526020019081526020016000206040518060400160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16141561155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190614aa6565b60405180910390fd5b600081600001516bffffffffffffffffffffffff164261157a9190614d2c565b905065150d98a973008161158e9190614cd2565b92505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e7613602565b6115f16000613680565b565b611605826115ff612c32565b83612fd9565b61160f8282613434565b5050565b61161b613602565b8060078190555050565b61162d613602565b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60606000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382018054806020026020016040519081016040528092919081815260200182805480156117dc57602002820191906000526020600020905b8154815260200190600101908083116117c8575b50505050508152505090508060800151915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000905060005b8351811015611a2757600084828151811061184657611845614fd1565b5b602002602001015190506000600e60008381526020019081526020016000206040518060400160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161415801561199757508673ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16145b6119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90614aa6565b60405180910390fd5b65150d98a9730081600001516bffffffffffffffffffffffff16426119fb9190614d2c565b611a059190614cd2565b84611a109190614c7c565b935050508080611a1f90614e6d565b915050611828565b508091505092915050565b606060048054611a4190614e0a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6d90614e0a565b8015611aba5780601f10611a8f57610100808354040283529160200191611aba565b820191906000526020600020905b815481529060010190602001808311611a9d57829003601f168201915b5050505050905090565b611acc613602565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611b1b612c32565b90506000611b2982866125ec565b905083811015611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614ac6565b60405180910390fd5b611b7b8286868403612c3a565b60019250505092915050565b600080611b92612c32565b9050611b9f818585613065565b600191505092915050565b600082829050905060005b81811015611e52576000848483818110611bd257611bd1614fd1565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611c4d9190614b06565b60206040518083038186803b158015611c6557600080fd5b505afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190613f63565b73ffffffffffffffffffffffffffffffffffffffff1614611cea576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600e600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff1681600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d8b576040517f8b8e783000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055503381600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826001019250813373ffffffffffffffffffffffffffffffffffffffff167fadc9772e9f3b2218b39abb39e4dd00e4a7f4ca0809c2c3fd73a7011defd8a83f60405160405180910390a35050611bb5565b5080600f6000828254611e659190614c7c565b92505081905550505050565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614806565b60405180910390fd5b611f2e8133604051602001611f1391906146f4565b60405160208183030381529060405280519060200120613746565b611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614946565b60405180910390fd5b6000683635c9adc5dea00000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611fd4919061474c565b60206040518083038186803b158015611fec57600080fd5b505afa158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190614202565b61202e9190614cd2565b905063641f60d04210156121d257683635c9adc5dea00000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8df0d35336040518263ffffffff1660e01b81526004016120a1919061474c565b60206040518083038186803b1580156120b957600080fd5b505afa1580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f19190614202565b6120fb9190614cd2565b680d8d726b7177a80000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612160919061474c565b60206040518083038186803b15801561217857600080fd5b505afa15801561218c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b09190614202565b6121ba9190614cd2565b6121c49190614c7c565b816121cf9190614c7c565b90505b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506122343382612f59565b5050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008083839050905060005b8181101561244557600085858381811061228157612280614fd1565b5b9050602002013590506000600e600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff1681600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614986565b60405180910390fd5b65150d98a973008160000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16426123709190614d2c565b61237a9190614cd2565b856123859190614c7c565b9450600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550813373ffffffffffffffffffffffffffffffffffffffff167fc2a672e0cc64044b86cd2af30dd1307e8b224ab9891986004368ab62b69715e460405160405180910390a35050808061243d90614e6d565b915050612264565b5080600f60008282546124589190614d2c565b925050819055506124693383612f59565b50505050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff1615612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90614a66565b60405180910390fd5b600082118015612515575060038211155b612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254b90614886565b60405180910390fd5b600061255f8361375d565b9050612a304261256f9190614c7c565b826000018190555060018260010160006101000a81548160ff02191690831515021790555060008260010160016101000a81548160ff0219169083151502179055508282600201819055506125e6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611b87565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600e60008481526020019081526020016000206040518060400160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508060200151915050919050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff166127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906148e6565b60405180910390fd5b8060000154421015612812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612809906149c6565b60405180910390fd5b8060010160019054906101000a900460ff1615612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90614a26565b60405180910390fd5b60018160010160016101000a81548160ff02191690831515021790555060006001606442443360405160200161289c9392919061470f565b6040516020818303038152906040528051906020012060001c6128bf9190614ee4565b6128c99190614c7c565b905060006128da83600201546137a4565b9050806000815181106128f0576128ef614fd1565b5b6020026020010151821161292f578260030160019080600181540180825580915050600190039060005260206000200160009091909190915055612b3c565b8060018151811061294357612942614fd1565b5b60200260200101518160008151811061295f5761295e614fd1565b5b60200260200101516129719190614c7c565b82116129a8578260030160029080600181540180825580915050600190039060005260206000200160009091909190915055612b3b565b806002815181106129bc576129bb614fd1565b5b6020026020010151816001815181106129d8576129d7614fd1565b5b6020026020010151826000815181106129f4576129f3614fd1565b5b6020026020010151612a069190614c7c565b612a109190614c7c565b8211612a47578260030160039080600181540180825580915050600190039060005260206000200160009091909190915055612b3a565b80600381518110612a5b57612a5a614fd1565b5b602002602001015181600281518110612a7757612a76614fd1565b5b602002602001015182600181518110612a9357612a92614fd1565b5b602002602001015183600081518110612aaf57612aae614fd1565b5b6020026020010151612ac19190614c7c565b612acb9190614c7c565b612ad59190614c7c565b8211612b0c578260030160049080600181540180825580915050600190039060005260206000200160009091909190915055612b39565b82600301600590806001815401808255809150506001900390600052602060002001600090919091909150555b5b5b5b60008360010160006101000a81548160ff021916908315150217905550505050565b600f5481565b612b6c613602565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614826565b60405180910390fd5b612be581613680565b50565b600c6020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900460ff16908060020154905084565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190614846565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612df89190614b06565b60405180910390a3505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff161515151581526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015612eea57602002820191906000526020600020905b815481526020019060010190808311612ed6575b505050505081525050905060008160800151905060005b8151811015612f515783828281518110612f1e57612f1d614fd1565b5b60200260200101511415612f3e57612f368582613a23565b505050612f55565b8080612f4990614e6d565b915050612f01565b5050505b5050565b600081612f64610ba2565b612f6e9190614c7c565b9050670de0b6b3a7640000630192ec70612f889190614cd2565b811115612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190614a46565b60405180910390fd5b612fd48383613b2b565b505050565b6000612fe584846125ec565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461305f5781811015613051576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613048906148a6565b60405180910390fd5b61305e8484848403612c3a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cc906149e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313c906147c6565b60405180910390fd5b613150838383613c82565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cd906148c6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c49190614b06565b60405180910390a36132d7848484613c87565b50505050565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382018054806020026020016040519081016040528092919081815260200182805480156133c357602002820191906000526020600020905b8154815260200190600101908083116133af575b50505050508152505090506000816080015190506000805b825181101561342857858382815181106133f8576133f7614fd1565b5b6020026020010151141561341557818061341190614e6d565b9250505b808061342090614e6d565b9150506133db565b50809350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349b906149a6565b60405180910390fd5b6134b082600083613c82565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d906147e6565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135e99190614b06565b60405180910390a36135fd83600084613c87565b505050565b61360a612c32565b73ffffffffffffffffffffffffffffffffffffffff166136286117f4565b73ffffffffffffffffffffffffffffffffffffffff161461367e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367590614966565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006137558360075484613c8c565b905092915050565b6000600182141561377857676f05b59d3b200000905061379f565b60028214156137915767d02ab486cedc0000905061379e565b6801158e460913d0000090505b5b919050565b60606000600567ffffffffffffffff8111156137c3576137c2615000565b5b6040519080825280602002602001820160405280156137f15781602001602082028036833780820191505090505b50905060018314156138ac5760038160008151811061381357613812614fd1565b5b60200260200101818152505060068160018151811061383557613834614fd1565b5b602002602001018181525050600a8160028151811061385757613856614fd1565b5b60200260200101818152505060198160038151811061387957613878614fd1565b5b60200260200101818152505060388160048151811061389b5761389a614fd1565b5b602002602001018181525050613a1a565b6002831415613964576004816000815181106138cb576138ca614fd1565b5b6020026020010181815250506007816001815181106138ed576138ec614fd1565b5b602002602001018181525050600f8160028151811061390f5761390e614fd1565b5b602002602001018181525050601e8160038151811061393157613930614fd1565b5b602002602001018181525050602c8160048151811061395357613952614fd1565b5b602002602001018181525050613a19565b6003831415613a185760058160008151811061398357613982614fd1565b5b6020026020010181815250506008816001815181106139a5576139a4614fd1565b5b6020026020010181815250506012816002815181106139c7576139c6614fd1565b5b6020026020010181815250506021816003815181106139e9576139e8614fd1565b5b602002602001018181525050602481600481518110613a0b57613a0a614fd1565b5b6020026020010181815250505b5b5b80915050919050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600301905080805490508310613a80575050613b27565b60008390505b60018280549050613a979190614d2c565b811015613afc5781600182613aac9190614c7c565b81548110613abd57613abc614fd1565b5b9060005260206000200154828281548110613adb57613ada614fd1565b5b90600052602060002001819055508080613af490614e6d565b915050613a86565b5080805480613b0e57613b0d614fa2565b5b6001900381819060005260206000200160009055905550505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9290614ae6565b60405180910390fd5b613ba760008383613c82565b8060026000828254613bb99190614c7c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c6a9190614b06565b60405180910390a3613c7e60008383613c87565b5050565b505050565b505050565b600082613c998584613ca3565b1490509392505050565b60008082905060005b8451811015613cee57613cd982868381518110613ccc57613ccb614fd1565b5b6020026020010151613cf9565b91508080613ce690614e6d565b915050613cac565b508091505092915050565b6000818310613d1157613d0c8284613d24565b613d1c565b613d1b8383613d24565b5b905092915050565b600082600052816020526040600020905092915050565b6000613d4e613d4984614bcf565b614baa565b90508083825260208201905082856020860282011115613d7157613d70615039565b5b60005b85811015613da15781613d878882613ef7565b845260208401935060208301925050600181019050613d74565b5050509392505050565b6000613dbe613db984614bfb565b614baa565b90508083825260208201905082856020860282011115613de157613de0615039565b5b60005b85811015613e115781613df78882613f0c565b845260208401935060208301925050600181019050613de4565b5050509392505050565b600081359050613e2a81615632565b92915050565b600081519050613e3f81615632565b92915050565b600082601f830112613e5a57613e59615034565b5b8135613e6a848260208601613d3b565b91505092915050565b60008083601f840112613e8957613e88615034565b5b8235905067ffffffffffffffff811115613ea657613ea561502f565b5b602083019150836020820283011115613ec257613ec1615039565b5b9250929050565b600082601f830112613ede57613edd615034565b5b8135613eee848260208601613dab565b91505092915050565b600081359050613f0681615649565b92915050565b600081359050613f1b81615660565b92915050565b600081519050613f3081615660565b92915050565b600060208284031215613f4c57613f4b615043565b5b6000613f5a84828501613e1b565b91505092915050565b600060208284031215613f7957613f78615043565b5b6000613f8784828501613e30565b91505092915050565b60008060408385031215613fa757613fa6615043565b5b6000613fb585828601613e1b565b9250506020613fc685828601613e1b565b9150509250929050565b600080600060608486031215613fe957613fe8615043565b5b6000613ff786828701613e1b565b935050602061400886828701613e1b565b925050604061401986828701613e1b565b9150509250925092565b60008060006060848603121561403c5761403b615043565b5b600061404a86828701613e1b565b935050602061405b86828701613e1b565b925050604061406c86828701613f0c565b9150509250925092565b6000806040838503121561408d5761408c615043565b5b600061409b85828601613e1b565b925050602083013567ffffffffffffffff8111156140bc576140bb61503e565b5b6140c885828601613ec9565b9150509250929050565b600080604083850312156140e9576140e8615043565b5b60006140f785828601613e1b565b925050602061410885828601613f0c565b9150509250929050565b60006020828403121561412857614127615043565b5b600082013567ffffffffffffffff8111156141465761414561503e565b5b61415284828501613e45565b91505092915050565b6000806020838503121561417257614171615043565b5b600083013567ffffffffffffffff8111156141905761418f61503e565b5b61419c85828601613e73565b92509250509250929050565b6000602082840312156141be576141bd615043565b5b60006141cc84828501613ef7565b91505092915050565b6000602082840312156141eb576141ea615043565b5b60006141f984828501613f0c565b91505092915050565b60006020828403121561421857614217615043565b5b600061422684828501613f21565b91505092915050565b600061423b83836146a1565b60208301905092915050565b61425081614d60565b82525050565b61426761426282614d60565b614eb6565b82525050565b600061427882614c37565b6142828185614c5a565b935061428d83614c27565b8060005b838110156142be5781516142a5888261422f565b97506142b083614c4d565b925050600181019050614291565b5085935050505092915050565b6142d481614d72565b82525050565b60006142e582614c42565b6142ef8185614c6b565b93506142ff818560208601614dd7565b61430881615048565b840191505092915050565b6000614320602383614c6b565b915061432b82615066565b604082019050919050565b6000614343602283614c6b565b915061434e826150b5565b604082019050919050565b6000614366600f83614c6b565b915061437182615104565b602082019050919050565b6000614389602683614c6b565b91506143948261512d565b604082019050919050565b60006143ac602283614c6b565b91506143b78261517c565b604082019050919050565b60006143cf600e83614c6b565b91506143da826151cb565b602082019050919050565b60006143f2600f83614c6b565b91506143fd826151f4565b602082019050919050565b6000614415601d83614c6b565b91506144208261521d565b602082019050919050565b6000614438602683614c6b565b915061444382615246565b604082019050919050565b600061445b602383614c6b565b915061446682615295565b604082019050919050565b600061447e601e83614c6b565b9150614489826152e4565b602082019050919050565b60006144a1601483614c6b565b91506144ac8261530d565b602082019050919050565b60006144c4601783614c6b565b91506144cf82615336565b602082019050919050565b60006144e7602083614c6b565b91506144f28261535f565b602082019050919050565b600061450a602783614c6b565b915061451582615388565b604082019050919050565b600061452d602183614c6b565b9150614538826153d7565b604082019050919050565b6000614550600e83614c6b565b915061455b82615426565b602082019050919050565b6000614573602583614c6b565b915061457e8261544f565b604082019050919050565b6000614596602483614c6b565b91506145a18261549e565b604082019050919050565b60006145b9601783614c6b565b91506145c4826154ed565b602082019050919050565b60006145dc600b83614c6b565b91506145e782615516565b602082019050919050565b60006145ff601183614c6b565b915061460a8261553f565b602082019050919050565b6000614622601283614c6b565b915061462d82615568565b602082019050919050565b6000614645601483614c6b565b915061465082615591565b602082019050919050565b6000614668602583614c6b565b9150614673826155ba565b604082019050919050565b600061468b601f83614c6b565b915061469682615609565b602082019050919050565b6146aa81614da8565b82525050565b6146b981614da8565b82525050565b6146d06146cb82614da8565b614eda565b82525050565b6146df81614db2565b82525050565b6146ee81614dbf565b82525050565b60006147008284614256565b60148201915081905092915050565b600061471b82866146bf565b60208201915061472b82856146bf565b60208201915061473b8284614256565b601482019150819050949350505050565b60006020820190506147616000830184614247565b92915050565b60006020820190508181036000830152614781818461426d565b905092915050565b600060208201905061479e60008301846142cb565b92915050565b600060208201905081810360008301526147be81846142da565b905092915050565b600060208201905081810360008301526147df81614313565b9050919050565b600060208201905081810360008301526147ff81614336565b9050919050565b6000602082019050818103600083015261481f81614359565b9050919050565b6000602082019050818103600083015261483f8161437c565b9050919050565b6000602082019050818103600083015261485f8161439f565b9050919050565b6000602082019050818103600083015261487f816143c2565b9050919050565b6000602082019050818103600083015261489f816143e5565b9050919050565b600060208201905081810360008301526148bf81614408565b9050919050565b600060208201905081810360008301526148df8161442b565b9050919050565b600060208201905081810360008301526148ff8161444e565b9050919050565b6000602082019050818103600083015261491f81614471565b9050919050565b6000602082019050818103600083015261493f81614494565b9050919050565b6000602082019050818103600083015261495f816144b7565b9050919050565b6000602082019050818103600083015261497f816144da565b9050919050565b6000602082019050818103600083015261499f816144fd565b9050919050565b600060208201905081810360008301526149bf81614520565b9050919050565b600060208201905081810360008301526149df81614543565b9050919050565b600060208201905081810360008301526149ff81614566565b9050919050565b60006020820190508181036000830152614a1f81614589565b9050919050565b60006020820190508181036000830152614a3f816145ac565b9050919050565b60006020820190508181036000830152614a5f816145cf565b9050919050565b60006020820190508181036000830152614a7f816145f2565b9050919050565b60006020820190508181036000830152614a9f81614615565b9050919050565b60006020820190508181036000830152614abf81614638565b9050919050565b60006020820190508181036000830152614adf8161465b565b9050919050565b60006020820190508181036000830152614aff8161467e565b9050919050565b6000602082019050614b1b60008301846146b0565b92915050565b6000608082019050614b3660008301876146b0565b614b4360208301866142cb565b614b5060408301856142cb565b614b5d60608301846146b0565b95945050505050565b6000602082019050614b7b60008301846146d6565b92915050565b6000604082019050614b9660008301856146e5565b614ba36020830184614247565b9392505050565b6000614bb4614bc5565b9050614bc08282614e3c565b919050565b6000604051905090565b600067ffffffffffffffff821115614bea57614be9615000565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c1657614c15615000565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c8782614da8565b9150614c9283614da8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cc757614cc6614f15565b5b828201905092915050565b6000614cdd82614da8565b9150614ce883614da8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d2157614d20614f15565b5b828202905092915050565b6000614d3782614da8565b9150614d4283614da8565b925082821015614d5557614d54614f15565b5b828203905092915050565b6000614d6b82614d88565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b60005b83811015614df5578082015181840152602081019050614dda565b83811115614e04576000848401525b50505050565b60006002820490506001821680614e2257607f821691505b60208210811415614e3657614e35614f73565b5b50919050565b614e4582615048565b810181811067ffffffffffffffff82111715614e6457614e63615000565b5b80604052505050565b6000614e7882614da8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eab57614eaa614f15565b5b600182019050919050565b6000614ec182614ec8565b9050919050565b6000614ed382615059565b9050919050565b6000819050919050565b6000614eef82614da8565b9150614efa83614da8565b925082614f0a57614f09614f44565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f77616c6c657420636c61696d65642e0000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7a65726f20696e76656e746f7279000000000000000000000000000000000000600082015250565b7f446f6573206e6f74206578697374730000000000000000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f74207175657374696e6720617420746865206d6f6d6560008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206973206e6f7420636c61696d61626c6520627920796f75210000600082015250565b7f4e6f7420656e6f75676874206d6174657269616c000000000000000000000000600082015250565b7f4e6f7420612070617274206f6620416c6c6f776c697374000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6573736167652053656e64657220776173206e6f74206f726967696e616c2060008201527f7374616b65722100000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f7374696c6c205175657374696e67000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4974656d20686173206265656e2072657665616c65642e000000000000000000600082015250565b7f4d617820537570706c792e000000000000000000000000000000000000000000600082015250565b7f596f7520617265207175657374696e672e000000000000000000000000000000600082015250565b7f496e76616c6964206372616674206974656d0000000000000000000000000000600082015250565b7f546f6b656e206973206e6f74207374616b656421000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61563b81614d60565b811461564657600080fd5b50565b61565281614d7e565b811461565d57600080fd5b50565b61566981614da8565b811461567457600080fd5b5056fea2646970667358221220a696efd79da3ec7b66491ed797ee1972d0bbf57cbf8b0b26170540673dfe725c64736f6c6343000807003369cf7eb63c9e6b0cd44599da9ca5f5d73f0e26035ecb74f810624d95d8b4080f0000000000000000000000009e32e984f96a2b82ec98d7df3b420e58149add1000000000000000000000000059c0e4b889f4c036dd0d6d759c7b37cf91f3ec010000000000000000000000008b2fda65cb4609a5f60c0a14c1ae33791a3d56ec

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80638b87c54411610125578063c25d8f4d116100ad578063e3c998fe1161007c578063e3c998fe1461065e578063e8b4c7d41461068e578063f244b84214610698578063f2fde38b146106b6578063f9b21507146106d25761021c565b8063c25d8f4d146105c6578063d71aa1b0146105f6578063da62488314610612578063dd62ed3e1461062e5761021c565b8063a3b1e2b2116100f4578063a3b1e2b214610512578063a457c2d71461052e578063a9059cbb1461055e578063b25d9f3a1461058e578063b391c508146105aa5761021c565b80638b87c544146104765780638da5cb5b146104a65780638f0be822146104c457806395d89b41146104f45761021c565b80633557e6be116101a857806370a082311161017757806370a08231146103e8578063715018a61461041857806379cc6790146104225780637cb647591461043e5780638a94937c1461045a5761021c565b80633557e6be1461033b578063395093511461036c57806342966c681461039c578063515ec105146103b85761021c565b806323b872dd116101ef57806323b872dd1461029757806328c77820146102c7578063313ce567146102e3578063327ee21f1461030157806332cb6b0c1461031d5761021c565b806306fdde0314610221578063095ea7b31461023f57806316e457f01461026f57806318160ddd14610279575b600080fd5b610229610705565b60405161023691906147a4565b60405180910390f35b610259600480360381019061025491906140d2565b610797565b6040516102669190614789565b60405180910390f35b6102776107ba565b005b610281610ba2565b60405161028e9190614b06565b60405180910390f35b6102b160048036038101906102ac9190614023565b610bac565b6040516102be9190614789565b60405180910390f35b6102e160048036038101906102dc919061415b565b610bdb565b005b6102eb610d5d565b6040516102f89190614b66565b60405180910390f35b61031b600480360381019061031691906141d5565b610d66565b005b61032561135f565b6040516103329190614b06565b60405180910390f35b610355600480360381019061035091906141d5565b611367565b604051610363929190614b81565b60405180910390f35b610386600480360381019061038191906140d2565b6113c3565b6040516103939190614789565b60405180910390f35b6103b660048036038101906103b191906141d5565b6113fa565b005b6103d260048036038101906103cd91906141d5565b61140e565b6040516103df9190614b06565b60405180910390f35b61040260048036038101906103fd9190613f36565b611597565b60405161040f9190614b06565b60405180910390f35b6104206115df565b005b61043c600480360381019061043791906140d2565b6115f3565b005b610458600480360381019061045391906141a8565b611613565b005b610474600480360381019061046f9190613fd0565b611625565b005b610490600480360381019061048b9190613f36565b6116f5565b60405161049d9190614767565b60405180910390f35b6104ae6117f4565b6040516104bb919061474c565b60405180910390f35b6104de60048036038101906104d99190614076565b61181e565b6040516104eb9190614b06565b60405180910390f35b6104fc611a32565b60405161050991906147a4565b60405180910390f35b61052c60048036038101906105279190613f36565b611ac4565b005b610548600480360381019061054391906140d2565b611b10565b6040516105559190614789565b60405180910390f35b610578600480360381019061057391906140d2565b611b87565b6040516105859190614789565b60405180910390f35b6105a860048036038101906105a3919061415b565b611baa565b005b6105c460048036038101906105bf9190614112565b611e71565b005b6105e060048036038101906105db9190613f36565b612238565b6040516105ed9190614789565b60405180910390f35b610610600480360381019061060b919061415b565b612258565b005b61062c600480360381019061062791906141d5565b61246f565b005b61064860048036038101906106439190613f90565b6125ec565b6040516106559190614b06565b60405180910390f35b610678600480360381019061067391906141d5565b612673565b604051610685919061474c565b60405180910390f35b610696612737565b005b6106a0612b5e565b6040516106ad9190614b06565b60405180910390f35b6106d060048036038101906106cb9190613f36565b612b64565b005b6106ec60048036038101906106e79190613f36565b612be8565b6040516106fc9493929190614b21565b60405180910390f35b60606003805461071490614e0a565b80601f016020809104026020016040519081016040528092919081815260200182805461074090614e0a565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050905090565b6000806107a2612c32565b90506107af818585612c3a565b600191505092915050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff16151515158152602001600282015481526020016003820180548060200260200160405190810160405280929190818152602001828054801561089f57602002820191906000526020600020905b81548152602001906001019080831161088b575b50505050508152505090506000816080015151116108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990614866565b60405180910390fd5b600081608001519050600080670de0b6b3a7640000905060005b8351811015610b8657600184828151811061092a57610929614fd1565b5b602002602001015114156109545768056bc75e2d631000008361094d9190614c7c565b9250610b4f565b600284828151811061096957610968614fd1565b5b602002602001015114156109935768049b9ca9a6943400008361098c9190614c7c565b9250610b4e565b60038482815181106109a8576109a7614fd1565b5b602002602001015114156109d2576803860e639d80640000836109cb9190614c7c565b9250610b4d565b60048482815181106109e7576109e6614fd1565b5b60200260200101511415610a115768015af1d78b58c4000083610a0a9190614c7c565b9250610b4c565b6005848281518110610a2657610a25614fd1565b5b60200260200101511415610a4f57678ac7230489e8000083610a489190614c7c565b9250610b4b565b6006848281518110610a6457610a63614fd1565b5b60200260200101511415610a8e57680f2dc7d47f1560000083610a879190614c7c565b9250610b4a565b6007848281518110610aa357610aa2614fd1565b5b60200260200101511415610acd57680b6255df5f5008000083610ac69190614c7c565b9250610b49565b6008848281518110610ae257610ae1614fd1565b5b60200260200101511415610b0c576808ac7230489e80000083610b059190614c7c565b9250610b48565b6009848281518110610b2157610b20614fd1565b5b60200260200101511415610b47576805f68e8131ecf8000083610b449190614c7c565b92505b5b5b5b5b5b5b5b5b610b7333858381518110610b6657610b65614fd1565b5b6020026020010151612e05565b8080610b7e90614e6d565b91505061090c565b50610b9c338284610b979190614d2c565b612f59565b50505050565b6000600254905090565b600080610bb7612c32565b9050610bc4858285612fd9565b610bcf858585613065565b60019150509392505050565b6000805b83839050811015610d4d576000848483818110610bff57610bfe614fd1565b5b9050602002013590506000600e600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff1681600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890614906565b60405180910390fd5b65150d98a973008160000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1642610cee9190614d2c565b610cf89190614cd2565b84610d039190614c7c565b9350428160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050508080610d4590614e6d565b915050610bdf565b50610d583382612f59565b505050565b60006012905090565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816003018054905011610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90614866565b60405180910390fd5b600082118015610e04575060048211155b610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90614a86565b60405180910390fd5b606060006001841415610f36576002610e5c60016132dd565b1015610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490614926565b60405180910390fd5b600267ffffffffffffffff811115610eb857610eb7615000565b5b604051908082528060200260200182016040528015610ee65781602001602082028036833780820191505090505b509150600182600081518110610eff57610efe614fd1565b5b602002602001018181525050600182600181518110610f2157610f20614fd1565b5b602002602001018181525050600690506112b5565b6002841415611025576002610f4b60026132dd565b1015610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614926565b60405180910390fd5b600267ffffffffffffffff811115610fa757610fa6615000565b5b604051908082528060200260200182016040528015610fd55781602001602082028036833780820191505090505b509150600282600081518110610fee57610fed614fd1565b5b6020026020010181815250506002826001815181106110105761100f614fd1565b5b602002602001018181525050600790506112b4565b600384141561111457600261103a60036132dd565b101561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290614926565b60405180910390fd5b600267ffffffffffffffff81111561109657611095615000565b5b6040519080825280602002602001820160405280156110c45781602001602082028036833780820191505090505b5091506003826000815181106110dd576110dc614fd1565b5b6020026020010181815250506003826001815181106110ff576110fe614fd1565b5b602002602001018181525050600890506112b3565b60048414156112b257600261112960046132dd565b101561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190614926565b60405180910390fd5b600361117660056132dd565b10156111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90614926565b60405180910390fd5b600567ffffffffffffffff8111156111d2576111d1615000565b5b6040519080825280602002602001820160405280156112005781602001602082028036833780820191505090505b50915060048260008151811061121957611218614fd1565b5b60200260200101818152505060048260018151811061123b5761123a614fd1565b5b60200260200101818152505060058260028151811061125d5761125c614fd1565b5b60200260200101818152505060058260038151811061127f5761127e614fd1565b5b6020026020010181815250506005826004815181106112a1576112a0614fd1565b5b602002602001018181525050600990505b5b5b5b60005b82518110156112f8576112e5338483815181106112d8576112d7614fd1565b5b6020026020010151612e05565b80806112f090614e6d565b9150506112b8565b5082600301819080600181540180825580915050600190039060005260206000200160009091909190915055611358600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16671bc16d674ec80000611b87565b5050505050565b630192ec7081565b600e6020528060005260406000206000915090508060000160009054906101000a90046bffffffffffffffffffffffff169080600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000806113ce612c32565b90506113ef8185856113e085896125ec565b6113ea9190614c7c565b612c3a565b600191505092915050565b61140b611405612c32565b82613434565b50565b600080600e60008481526020019081526020016000206040518060400160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16141561155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190614aa6565b60405180910390fd5b600081600001516bffffffffffffffffffffffff164261157a9190614d2c565b905065150d98a973008161158e9190614cd2565b92505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e7613602565b6115f16000613680565b565b611605826115ff612c32565b83612fd9565b61160f8282613434565b5050565b61161b613602565b8060078190555050565b61162d613602565b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60606000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382018054806020026020016040519081016040528092919081815260200182805480156117dc57602002820191906000526020600020905b8154815260200190600101908083116117c8575b50505050508152505090508060800151915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000905060005b8351811015611a2757600084828151811061184657611845614fd1565b5b602002602001015190506000600e60008381526020019081526020016000206040518060400160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff161415801561199757508673ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16145b6119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90614aa6565b60405180910390fd5b65150d98a9730081600001516bffffffffffffffffffffffff16426119fb9190614d2c565b611a059190614cd2565b84611a109190614c7c565b935050508080611a1f90614e6d565b915050611828565b508091505092915050565b606060048054611a4190614e0a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6d90614e0a565b8015611aba5780601f10611a8f57610100808354040283529160200191611aba565b820191906000526020600020905b815481529060010190602001808311611a9d57829003601f168201915b5050505050905090565b611acc613602565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611b1b612c32565b90506000611b2982866125ec565b905083811015611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614ac6565b60405180910390fd5b611b7b8286868403612c3a565b60019250505092915050565b600080611b92612c32565b9050611b9f818585613065565b600191505092915050565b600082829050905060005b81811015611e52576000848483818110611bd257611bd1614fd1565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611c4d9190614b06565b60206040518083038186803b158015611c6557600080fd5b505afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190613f63565b73ffffffffffffffffffffffffffffffffffffffff1614611cea576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600e600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff1681600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d8b576040517f8b8e783000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055503381600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826001019250813373ffffffffffffffffffffffffffffffffffffffff167fadc9772e9f3b2218b39abb39e4dd00e4a7f4ca0809c2c3fd73a7011defd8a83f60405160405180910390a35050611bb5565b5080600f6000828254611e659190614c7c565b92505081905550505050565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614806565b60405180910390fd5b611f2e8133604051602001611f1391906146f4565b60405160208183030381529060405280519060200120613746565b611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614946565b60405180910390fd5b6000683635c9adc5dea00000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611fd4919061474c565b60206040518083038186803b158015611fec57600080fd5b505afa158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190614202565b61202e9190614cd2565b905063641f60d04210156121d257683635c9adc5dea00000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8df0d35336040518263ffffffff1660e01b81526004016120a1919061474c565b60206040518083038186803b1580156120b957600080fd5b505afa1580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f19190614202565b6120fb9190614cd2565b680d8d726b7177a80000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612160919061474c565b60206040518083038186803b15801561217857600080fd5b505afa15801561218c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b09190614202565b6121ba9190614cd2565b6121c49190614c7c565b816121cf9190614c7c565b90505b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506122343382612f59565b5050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60008083839050905060005b8181101561244557600085858381811061228157612280614fd1565b5b9050602002013590506000600e600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff1681600001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614986565b60405180910390fd5b65150d98a973008160000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16426123709190614d2c565b61237a9190614cd2565b856123859190614c7c565b9450600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550813373ffffffffffffffffffffffffffffffffffffffff167fc2a672e0cc64044b86cd2af30dd1307e8b224ab9891986004368ab62b69715e460405160405180910390a35050808061243d90614e6d565b915050612264565b5080600f60008282546124589190614d2c565b925050819055506124693383612f59565b50505050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff1615612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90614a66565b60405180910390fd5b600082118015612515575060038211155b612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254b90614886565b60405180910390fd5b600061255f8361375d565b9050612a304261256f9190614c7c565b826000018190555060018260010160006101000a81548160ff02191690831515021790555060008260010160016101000a81548160ff0219169083151502179055508282600201819055506125e6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611b87565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600e60008481526020019081526020016000206040518060400160405290816000820160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160008201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508060200151915050919050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060010160009054906101000a900460ff166127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c2906148e6565b60405180910390fd5b8060000154421015612812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612809906149c6565b60405180910390fd5b8060010160019054906101000a900460ff1615612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90614a26565b60405180910390fd5b60018160010160016101000a81548160ff02191690831515021790555060006001606442443360405160200161289c9392919061470f565b6040516020818303038152906040528051906020012060001c6128bf9190614ee4565b6128c99190614c7c565b905060006128da83600201546137a4565b9050806000815181106128f0576128ef614fd1565b5b6020026020010151821161292f578260030160019080600181540180825580915050600190039060005260206000200160009091909190915055612b3c565b8060018151811061294357612942614fd1565b5b60200260200101518160008151811061295f5761295e614fd1565b5b60200260200101516129719190614c7c565b82116129a8578260030160029080600181540180825580915050600190039060005260206000200160009091909190915055612b3b565b806002815181106129bc576129bb614fd1565b5b6020026020010151816001815181106129d8576129d7614fd1565b5b6020026020010151826000815181106129f4576129f3614fd1565b5b6020026020010151612a069190614c7c565b612a109190614c7c565b8211612a47578260030160039080600181540180825580915050600190039060005260206000200160009091909190915055612b3a565b80600381518110612a5b57612a5a614fd1565b5b602002602001015181600281518110612a7757612a76614fd1565b5b602002602001015182600181518110612a9357612a92614fd1565b5b602002602001015183600081518110612aaf57612aae614fd1565b5b6020026020010151612ac19190614c7c565b612acb9190614c7c565b612ad59190614c7c565b8211612b0c578260030160049080600181540180825580915050600190039060005260206000200160009091909190915055612b39565b82600301600590806001815401808255809150506001900390600052602060002001600090919091909150555b5b5b5b60008360010160006101000a81548160ff021916908315150217905550505050565b600f5481565b612b6c613602565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614826565b60405180910390fd5b612be581613680565b50565b600c6020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900460ff16908060020154905084565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190614846565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612df89190614b06565b60405180910390a3505050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff161515151581526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015612eea57602002820191906000526020600020905b815481526020019060010190808311612ed6575b505050505081525050905060008160800151905060005b8151811015612f515783828281518110612f1e57612f1d614fd1565b5b60200260200101511415612f3e57612f368582613a23565b505050612f55565b8080612f4990614e6d565b915050612f01565b5050505b5050565b600081612f64610ba2565b612f6e9190614c7c565b9050670de0b6b3a7640000630192ec70612f889190614cd2565b811115612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190614a46565b60405180910390fd5b612fd48383613b2b565b505050565b6000612fe584846125ec565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461305f5781811015613051576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613048906148a6565b60405180910390fd5b61305e8484848403612c3a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cc906149e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313c906147c6565b60405180910390fd5b613150838383613c82565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cd906148c6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c49190614b06565b60405180910390a36132d7848484613c87565b50505050565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382018054806020026020016040519081016040528092919081815260200182805480156133c357602002820191906000526020600020905b8154815260200190600101908083116133af575b50505050508152505090506000816080015190506000805b825181101561342857858382815181106133f8576133f7614fd1565b5b6020026020010151141561341557818061341190614e6d565b9250505b808061342090614e6d565b9150506133db565b50809350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349b906149a6565b60405180910390fd5b6134b082600083613c82565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d906147e6565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135e99190614b06565b60405180910390a36135fd83600084613c87565b505050565b61360a612c32565b73ffffffffffffffffffffffffffffffffffffffff166136286117f4565b73ffffffffffffffffffffffffffffffffffffffff161461367e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367590614966565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006137558360075484613c8c565b905092915050565b6000600182141561377857676f05b59d3b200000905061379f565b60028214156137915767d02ab486cedc0000905061379e565b6801158e460913d0000090505b5b919050565b60606000600567ffffffffffffffff8111156137c3576137c2615000565b5b6040519080825280602002602001820160405280156137f15781602001602082028036833780820191505090505b50905060018314156138ac5760038160008151811061381357613812614fd1565b5b60200260200101818152505060068160018151811061383557613834614fd1565b5b602002602001018181525050600a8160028151811061385757613856614fd1565b5b60200260200101818152505060198160038151811061387957613878614fd1565b5b60200260200101818152505060388160048151811061389b5761389a614fd1565b5b602002602001018181525050613a1a565b6002831415613964576004816000815181106138cb576138ca614fd1565b5b6020026020010181815250506007816001815181106138ed576138ec614fd1565b5b602002602001018181525050600f8160028151811061390f5761390e614fd1565b5b602002602001018181525050601e8160038151811061393157613930614fd1565b5b602002602001018181525050602c8160048151811061395357613952614fd1565b5b602002602001018181525050613a19565b6003831415613a185760058160008151811061398357613982614fd1565b5b6020026020010181815250506008816001815181106139a5576139a4614fd1565b5b6020026020010181815250506012816002815181106139c7576139c6614fd1565b5b6020026020010181815250506021816003815181106139e9576139e8614fd1565b5b602002602001018181525050602481600481518110613a0b57613a0a614fd1565b5b6020026020010181815250505b5b5b80915050919050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600301905080805490508310613a80575050613b27565b60008390505b60018280549050613a979190614d2c565b811015613afc5781600182613aac9190614c7c565b81548110613abd57613abc614fd1565b5b9060005260206000200154828281548110613adb57613ada614fd1565b5b90600052602060002001819055508080613af490614e6d565b915050613a86565b5080805480613b0e57613b0d614fa2565b5b6001900381819060005260206000200160009055905550505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9290614ae6565b60405180910390fd5b613ba760008383613c82565b8060026000828254613bb99190614c7c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c6a9190614b06565b60405180910390a3613c7e60008383613c87565b5050565b505050565b505050565b600082613c998584613ca3565b1490509392505050565b60008082905060005b8451811015613cee57613cd982868381518110613ccc57613ccb614fd1565b5b6020026020010151613cf9565b91508080613ce690614e6d565b915050613cac565b508091505092915050565b6000818310613d1157613d0c8284613d24565b613d1c565b613d1b8383613d24565b5b905092915050565b600082600052816020526040600020905092915050565b6000613d4e613d4984614bcf565b614baa565b90508083825260208201905082856020860282011115613d7157613d70615039565b5b60005b85811015613da15781613d878882613ef7565b845260208401935060208301925050600181019050613d74565b5050509392505050565b6000613dbe613db984614bfb565b614baa565b90508083825260208201905082856020860282011115613de157613de0615039565b5b60005b85811015613e115781613df78882613f0c565b845260208401935060208301925050600181019050613de4565b5050509392505050565b600081359050613e2a81615632565b92915050565b600081519050613e3f81615632565b92915050565b600082601f830112613e5a57613e59615034565b5b8135613e6a848260208601613d3b565b91505092915050565b60008083601f840112613e8957613e88615034565b5b8235905067ffffffffffffffff811115613ea657613ea561502f565b5b602083019150836020820283011115613ec257613ec1615039565b5b9250929050565b600082601f830112613ede57613edd615034565b5b8135613eee848260208601613dab565b91505092915050565b600081359050613f0681615649565b92915050565b600081359050613f1b81615660565b92915050565b600081519050613f3081615660565b92915050565b600060208284031215613f4c57613f4b615043565b5b6000613f5a84828501613e1b565b91505092915050565b600060208284031215613f7957613f78615043565b5b6000613f8784828501613e30565b91505092915050565b60008060408385031215613fa757613fa6615043565b5b6000613fb585828601613e1b565b9250506020613fc685828601613e1b565b9150509250929050565b600080600060608486031215613fe957613fe8615043565b5b6000613ff786828701613e1b565b935050602061400886828701613e1b565b925050604061401986828701613e1b565b9150509250925092565b60008060006060848603121561403c5761403b615043565b5b600061404a86828701613e1b565b935050602061405b86828701613e1b565b925050604061406c86828701613f0c565b9150509250925092565b6000806040838503121561408d5761408c615043565b5b600061409b85828601613e1b565b925050602083013567ffffffffffffffff8111156140bc576140bb61503e565b5b6140c885828601613ec9565b9150509250929050565b600080604083850312156140e9576140e8615043565b5b60006140f785828601613e1b565b925050602061410885828601613f0c565b9150509250929050565b60006020828403121561412857614127615043565b5b600082013567ffffffffffffffff8111156141465761414561503e565b5b61415284828501613e45565b91505092915050565b6000806020838503121561417257614171615043565b5b600083013567ffffffffffffffff8111156141905761418f61503e565b5b61419c85828601613e73565b92509250509250929050565b6000602082840312156141be576141bd615043565b5b60006141cc84828501613ef7565b91505092915050565b6000602082840312156141eb576141ea615043565b5b60006141f984828501613f0c565b91505092915050565b60006020828403121561421857614217615043565b5b600061422684828501613f21565b91505092915050565b600061423b83836146a1565b60208301905092915050565b61425081614d60565b82525050565b61426761426282614d60565b614eb6565b82525050565b600061427882614c37565b6142828185614c5a565b935061428d83614c27565b8060005b838110156142be5781516142a5888261422f565b97506142b083614c4d565b925050600181019050614291565b5085935050505092915050565b6142d481614d72565b82525050565b60006142e582614c42565b6142ef8185614c6b565b93506142ff818560208601614dd7565b61430881615048565b840191505092915050565b6000614320602383614c6b565b915061432b82615066565b604082019050919050565b6000614343602283614c6b565b915061434e826150b5565b604082019050919050565b6000614366600f83614c6b565b915061437182615104565b602082019050919050565b6000614389602683614c6b565b91506143948261512d565b604082019050919050565b60006143ac602283614c6b565b91506143b78261517c565b604082019050919050565b60006143cf600e83614c6b565b91506143da826151cb565b602082019050919050565b60006143f2600f83614c6b565b91506143fd826151f4565b602082019050919050565b6000614415601d83614c6b565b91506144208261521d565b602082019050919050565b6000614438602683614c6b565b915061444382615246565b604082019050919050565b600061445b602383614c6b565b915061446682615295565b604082019050919050565b600061447e601e83614c6b565b9150614489826152e4565b602082019050919050565b60006144a1601483614c6b565b91506144ac8261530d565b602082019050919050565b60006144c4601783614c6b565b91506144cf82615336565b602082019050919050565b60006144e7602083614c6b565b91506144f28261535f565b602082019050919050565b600061450a602783614c6b565b915061451582615388565b604082019050919050565b600061452d602183614c6b565b9150614538826153d7565b604082019050919050565b6000614550600e83614c6b565b915061455b82615426565b602082019050919050565b6000614573602583614c6b565b915061457e8261544f565b604082019050919050565b6000614596602483614c6b565b91506145a18261549e565b604082019050919050565b60006145b9601783614c6b565b91506145c4826154ed565b602082019050919050565b60006145dc600b83614c6b565b91506145e782615516565b602082019050919050565b60006145ff601183614c6b565b915061460a8261553f565b602082019050919050565b6000614622601283614c6b565b915061462d82615568565b602082019050919050565b6000614645601483614c6b565b915061465082615591565b602082019050919050565b6000614668602583614c6b565b9150614673826155ba565b604082019050919050565b600061468b601f83614c6b565b915061469682615609565b602082019050919050565b6146aa81614da8565b82525050565b6146b981614da8565b82525050565b6146d06146cb82614da8565b614eda565b82525050565b6146df81614db2565b82525050565b6146ee81614dbf565b82525050565b60006147008284614256565b60148201915081905092915050565b600061471b82866146bf565b60208201915061472b82856146bf565b60208201915061473b8284614256565b601482019150819050949350505050565b60006020820190506147616000830184614247565b92915050565b60006020820190508181036000830152614781818461426d565b905092915050565b600060208201905061479e60008301846142cb565b92915050565b600060208201905081810360008301526147be81846142da565b905092915050565b600060208201905081810360008301526147df81614313565b9050919050565b600060208201905081810360008301526147ff81614336565b9050919050565b6000602082019050818103600083015261481f81614359565b9050919050565b6000602082019050818103600083015261483f8161437c565b9050919050565b6000602082019050818103600083015261485f8161439f565b9050919050565b6000602082019050818103600083015261487f816143c2565b9050919050565b6000602082019050818103600083015261489f816143e5565b9050919050565b600060208201905081810360008301526148bf81614408565b9050919050565b600060208201905081810360008301526148df8161442b565b9050919050565b600060208201905081810360008301526148ff8161444e565b9050919050565b6000602082019050818103600083015261491f81614471565b9050919050565b6000602082019050818103600083015261493f81614494565b9050919050565b6000602082019050818103600083015261495f816144b7565b9050919050565b6000602082019050818103600083015261497f816144da565b9050919050565b6000602082019050818103600083015261499f816144fd565b9050919050565b600060208201905081810360008301526149bf81614520565b9050919050565b600060208201905081810360008301526149df81614543565b9050919050565b600060208201905081810360008301526149ff81614566565b9050919050565b60006020820190508181036000830152614a1f81614589565b9050919050565b60006020820190508181036000830152614a3f816145ac565b9050919050565b60006020820190508181036000830152614a5f816145cf565b9050919050565b60006020820190508181036000830152614a7f816145f2565b9050919050565b60006020820190508181036000830152614a9f81614615565b9050919050565b60006020820190508181036000830152614abf81614638565b9050919050565b60006020820190508181036000830152614adf8161465b565b9050919050565b60006020820190508181036000830152614aff8161467e565b9050919050565b6000602082019050614b1b60008301846146b0565b92915050565b6000608082019050614b3660008301876146b0565b614b4360208301866142cb565b614b5060408301856142cb565b614b5d60608301846146b0565b95945050505050565b6000602082019050614b7b60008301846146d6565b92915050565b6000604082019050614b9660008301856146e5565b614ba36020830184614247565b9392505050565b6000614bb4614bc5565b9050614bc08282614e3c565b919050565b6000604051905090565b600067ffffffffffffffff821115614bea57614be9615000565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c1657614c15615000565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c8782614da8565b9150614c9283614da8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cc757614cc6614f15565b5b828201905092915050565b6000614cdd82614da8565b9150614ce883614da8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d2157614d20614f15565b5b828202905092915050565b6000614d3782614da8565b9150614d4283614da8565b925082821015614d5557614d54614f15565b5b828203905092915050565b6000614d6b82614d88565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b60005b83811015614df5578082015181840152602081019050614dda565b83811115614e04576000848401525b50505050565b60006002820490506001821680614e2257607f821691505b60208210811415614e3657614e35614f73565b5b50919050565b614e4582615048565b810181811067ffffffffffffffff82111715614e6457614e63615000565b5b80604052505050565b6000614e7882614da8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eab57614eaa614f15565b5b600182019050919050565b6000614ec182614ec8565b9050919050565b6000614ed382615059565b9050919050565b6000819050919050565b6000614eef82614da8565b9150614efa83614da8565b925082614f0a57614f09614f44565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f77616c6c657420636c61696d65642e0000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7a65726f20696e76656e746f7279000000000000000000000000000000000000600082015250565b7f446f6573206e6f74206578697374730000000000000000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f74207175657374696e6720617420746865206d6f6d6560008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e206973206e6f7420636c61696d61626c6520627920796f75210000600082015250565b7f4e6f7420656e6f75676874206d6174657269616c000000000000000000000000600082015250565b7f4e6f7420612070617274206f6620416c6c6f776c697374000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6573736167652053656e64657220776173206e6f74206f726967696e616c2060008201527f7374616b65722100000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f7374696c6c205175657374696e67000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4974656d20686173206265656e2072657665616c65642e000000000000000000600082015250565b7f4d617820537570706c792e000000000000000000000000000000000000000000600082015250565b7f596f7520617265207175657374696e672e000000000000000000000000000000600082015250565b7f496e76616c6964206372616674206974656d0000000000000000000000000000600082015250565b7f546f6b656e206973206e6f74207374616b656421000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61563b81614d60565b811461564657600080fd5b50565b61565281614d7e565b811461565d57600080fd5b50565b61566981614da8565b811461567457600080fd5b5056fea2646970667358221220a696efd79da3ec7b66491ed797ee1972d0bbf57cbf8b0b26170540673dfe725c64736f6c63430008070033

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

69cf7eb63c9e6b0cd44599da9ca5f5d73f0e26035ecb74f810624d95d8b4080f0000000000000000000000009e32e984f96a2b82ec98d7df3b420e58149add1000000000000000000000000059c0e4b889f4c036dd0d6d759c7b37cf91f3ec010000000000000000000000008b2fda65cb4609a5f60c0a14c1ae33791a3d56ec

-----Decoded View---------------
Arg [0] : _root (bytes32): 0x69cf7eb63c9e6b0cd44599da9ca5f5d73f0e26035ecb74f810624d95d8b4080f
Arg [1] : _terraCrate (address): 0x9E32E984F96a2B82EC98D7Df3b420e58149adD10
Arg [2] : _old (address): 0x59C0e4b889F4c036DD0D6d759c7B37cF91f3eC01
Arg [3] : _staking (address): 0x8B2FdA65Cb4609a5f60c0a14C1ae33791A3d56EC

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 69cf7eb63c9e6b0cd44599da9ca5f5d73f0e26035ecb74f810624d95d8b4080f
Arg [1] : 0000000000000000000000009e32e984f96a2b82ec98d7df3b420e58149add10
Arg [2] : 00000000000000000000000059c0e4b889f4c036dd0d6d759c7b37cf91f3ec01
Arg [3] : 0000000000000000000000008b2fda65cb4609a5f60c0a14c1ae33791a3d56ec


Deployed Bytecode Sourcemap

38672:14169:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26046:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28397:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47014:1478;;;:::i;:::-;;27166:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29178:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43209:660;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27008:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48500:1700;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38720:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29882:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37817:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44549:371;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27337:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19471:103;;;:::i;:::-;;38227:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41463:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41199:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52654:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18823:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43877:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26265:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45093:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30623:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27670:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41737:690;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40139:676;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39423:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42435:766;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45379:484;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27926:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44928:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45871:1135;;;:::i;:::-;;39673:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19729:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39362:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;26046:100;26100:13;26133:5;26126:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26046:100;:::o;28397:201::-;28480:4;28497:13;28513:12;:10;:12::i;:::-;28497:28;;28536:32;28545:5;28552:7;28561:6;28536:8;:32::i;:::-;28586:4;28579:11;;;28397:201;;;;:::o;47014:1478::-;47051:21;47075:15;:27;47091:10;47075:27;;;;;;;;;;;;;;;47051:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47150:1;47121:4;:19;;;:26;:30;47113:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;47183:26;47212:4;:19;;;47183:48;;47242:18;47275:11;47289:7;47275:21;;47322:6;47317:1116;47338:9;:16;47334:1;:20;47317:1116;;;47396:1;47380:9;47390:1;47380:12;;;;;;;;:::i;:::-;;;;;;;;:17;47376:968;;;47451:9;47438:10;:22;;;;:::i;:::-;47425:35;;47376:968;;;47502:1;47486:9;47496:1;47486:12;;;;;;;;:::i;:::-;;;;;;;;:17;47482:862;;;47558:8;47545:10;:21;;;;:::i;:::-;47532:34;;47482:862;;;47608:1;47592:9;47602:1;47592:12;;;;;;;;:::i;:::-;;;;;;;;:17;47588:756;;;47666:8;47653:10;:21;;;;:::i;:::-;47640:34;;47588:756;;;47716:1;47700:9;47710:1;47700:12;;;;;;;;:::i;:::-;;;;;;;;:17;47696:648;;;47773:8;47760:10;:21;;;;:::i;:::-;47747:34;;47696:648;;;47823:1;47807:9;47817:1;47807:12;;;;;;;;:::i;:::-;;;;;;;;:17;47803:541;;;47879:8;47866:10;:21;;;;:::i;:::-;47853:34;;47803:541;;;47929:1;47913:9;47923:1;47913:12;;;;;;;;:::i;:::-;;;;;;;;:17;47909:435;;;47985:9;47972:10;:22;;;;:::i;:::-;47959:35;;47909:435;;;48036:1;48020:9;48030:1;48020:12;;;;;;;;:::i;:::-;;;;;;;;:17;48016:328;;;48098:9;48085:10;:22;;;;:::i;:::-;48072:35;;48016:328;;;48149:1;48133:9;48143:1;48133:12;;;;;;;;:::i;:::-;;;;;;;;:17;48129:215;;;48213:9;48200:10;:22;;;;:::i;:::-;48187:35;;48129:215;;;48264:1;48248:9;48258:1;48248:12;;;;;;;;:::i;:::-;;;;;;;;:17;48244:100;;;48319:9;48306:10;:22;;;;:::i;:::-;48293:35;;48244:100;48129:215;48016:328;47909:435;47803:541;47696:648;47588:756;47482:862;47376:968;48372:49;48396:10;48408:9;48418:1;48408:12;;;;;;;;:::i;:::-;;;;;;;;48372:23;:49::i;:::-;47356:3;;;;;:::i;:::-;;;;47317:1116;;;;48445:39;48455:10;48480:3;48467:10;:16;;;;:::i;:::-;48445:9;:39::i;:::-;47040:1452;;;;47014:1478::o;27166:108::-;27227:7;27254:12;;27247:19;;27166:108;:::o;29178:295::-;29309:4;29326:15;29344:12;:10;:12::i;:::-;29326:30;;29367:38;29383:4;29389:7;29398:6;29367:15;:38::i;:::-;29416:27;29426:4;29432:2;29436:6;29416:9;:27::i;:::-;29461:4;29454:11;;;29178:295;;;;;:::o;43209:660::-;43276:18;43316:9;43311:505;43335:8;;:15;;43331:1;:19;43311:505;;;43372:10;43385:8;;43394:1;43385:11;;;;;;;:::i;:::-;;;;;;;;43372:24;;43411:18;43432:14;:18;43447:2;43432:18;;;;;;;;;;;43411:39;;43506:10;43491:25;;:4;:11;;;;;;;;;;;;:25;;;43465:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;38817:14;43679:4;:21;;;;;;;;;;;;43661:39;;:15;:39;;;;:::i;:::-;43660:79;;;;:::i;:::-;43629:10;:111;;;;:::i;:::-;43599:141;;43788:15;43757:4;:21;;;:47;;;;;;;;;;;;;;;;;;43357:459;;43352:3;;;;;:::i;:::-;;;;43311:505;;;;43828:33;43838:10;43850;43828:9;:33::i;:::-;43265:604;43209:660;;:::o;27008:93::-;27066:5;27091:2;27084:9;;27008:93;:::o;48500:1700::-;48556:22;48581:15;:27;48597:10;48581:27;;;;;;;;;;;;;;;48556:52;;48656:1;48627:4;:19;;:26;;;;:30;48619:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48707:1;48695:9;:13;:31;;;;;48725:1;48712:9;:14;;48695:31;48687:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48762:30;48803:12;48843:1;48830:9;:14;48826:1138;;;48885:1;48869:12;48879:1;48869:9;:12::i;:::-;:17;;48861:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48956:1;48942:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48926:32;;48992:1;48973:13;48987:1;48973:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49027:1;49008:13;49022:1;49008:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49052:1;49045:8;;48826:1138;;;49088:1;49075:9;:14;49071:893;;;49130:1;49114:12;49124:1;49114:9;:12::i;:::-;:17;;49106:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;49201:1;49187:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49171:32;;49237:1;49218:13;49232:1;49218:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49272:1;49253:13;49267:1;49253:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49295:1;49288:8;;49071:893;;;49331:1;49318:9;:14;49314:650;;;49373:1;49357:12;49367:1;49357:9;:12::i;:::-;:17;;49349:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;49444:1;49430:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49414:32;;49480:1;49461:13;49475:1;49461:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49515:1;49496:13;49510:1;49496:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49538:1;49531:8;;49314:650;;;49574:1;49561:9;:14;49557:407;;;49616:1;49600:12;49610:1;49600:9;:12::i;:::-;:17;;49592:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;49681:1;49665:12;49675:1;49665:9;:12::i;:::-;:17;;49657:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;49752:1;49738:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49722:32;;49788:1;49769:13;49783:1;49769:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49823:1;49804:13;49818:1;49804:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49858:1;49839:13;49853:1;49839:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49893:1;49874:13;49888:1;49874:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49928:1;49909:13;49923:1;49909:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;49951:1;49944:8;;49557:407;49314:650;49071:893;48826:1138;49981:9;49976:131;50000:13;:20;49996:1;:24;49976:131;;;50042:53;50066:10;50078:13;50092:1;50078:16;;;;;;;;:::i;:::-;;;;;;;;50042:23;:53::i;:::-;50022:3;;;;;:::i;:::-;;;;49976:131;;;;50119:4;:19;;50144:4;50119:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50162;50171:11;;;;;;;;;;;50184:7;50162:8;:30::i;:::-;;48545:1655;;;48500:1700;:::o;38720:47::-;38757:10;38720:47;:::o;39477:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29882:238::-;29970:4;29987:13;30003:12;:10;:12::i;:::-;29987:28;;30026:64;30035:5;30042:7;30079:10;30051:25;30061:5;30068:7;30051:9;:25::i;:::-;:38;;;;:::i;:::-;30026:8;:64::i;:::-;30108:4;30101:11;;;29882:238;;;;:::o;37817:91::-;37873:27;37879:12;:10;:12::i;:::-;37893:6;37873:5;:27::i;:::-;37817:91;:::o;44549:371::-;44616:7;44636:17;44656:14;:23;44671:7;44656:23;;;;;;;;;;;44636:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44727:11;;;;;;;;;;;44712:26;;:4;:11;;;:26;;;;44690:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;44799:21;44841:4;:21;;;44823:39;;:15;:39;;;;:::i;:::-;44799:63;;38817:14;44882:13;:30;;;;:::i;:::-;44875:37;;;;44549:371;;;:::o;27337:127::-;27411:7;27438:9;:18;27448:7;27438:18;;;;;;;;;;;;;;;;27431:25;;27337:127;;;:::o;19471:103::-;18709:13;:11;:13::i;:::-;19536:30:::1;19563:1;19536:18;:30::i;:::-;19471:103::o:0;38227:164::-;38304:46;38320:7;38329:12;:10;:12::i;:::-;38343:6;38304:15;:46::i;:::-;38361:22;38367:7;38376:6;38361:5;:22::i;:::-;38227:164;;:::o;41463:99::-;18709:13;:11;:13::i;:::-;41543:11:::1;41536:4;:18;;;;41463:99:::0;:::o;41199:252::-;18709:13;:11;:13::i;:::-;41368:11:::1;41348:17;;:31;;;;;;;;;;;;;;;;;;41403:4;41390:10;;:17;;;;;;;;;;;;;;;;;;41435:8;41418:14;;:25;;;;;;;;;;;;;;;;;;41199:252:::0;;;:::o;52654:182::-;52714:16;52743:21;52767:15;:24;52783:7;52767:24;;;;;;;;;;;;;;;52743:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52809:4;:19;;;52802:26;;;52654:182;;;:::o;18823:87::-;18869:7;18896:6;;;;;;;;;;;18889:13;;18823:87;:::o;43877:664::-;43965:7;43985:18;44006:1;43985:22;;44025:9;44020:484;44044:8;:15;44040:1;:19;44020:484;;;44081:10;44094:8;44103:1;44094:11;;;;;;;;:::i;:::-;;;;;;;;44081:24;;44120:17;44140:14;:18;44155:2;44140:18;;;;;;;;;;;44120:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44214:11;;;;;;;;;;;44199:26;;:4;:11;;;:26;;;;:67;;;;;44261:5;44246:20;;:4;:11;;;:20;;;44199:67;44173:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;38817:14;44431:4;:21;;;44413:39;;:15;:39;;;;:::i;:::-;44412:79;;;;:::i;:::-;44381:10;:111;;;;:::i;:::-;44351:141;;44066:438;;44061:3;;;;;:::i;:::-;;;;44020:484;;;;44523:10;44516:17;;;43877:664;;;;:::o;26265:104::-;26321:13;26354:7;26347:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26265:104;:::o;45093:111::-;18709:13;:11;:13::i;:::-;45186:10:::1;45167:16;;:29;;;;;;;;;;;;;;;;;;45093:111:::0;:::o;30623:436::-;30716:4;30733:13;30749:12;:10;:12::i;:::-;30733:28;;30772:24;30799:25;30809:5;30816:7;30799:9;:25::i;:::-;30772:52;;30863:15;30843:16;:35;;30835:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30956:60;30965:5;30972:7;31000:15;30981:16;:34;30956:8;:60::i;:::-;31047:4;31040:11;;;;30623:436;;;;:::o;27670:193::-;27749:4;27766:13;27782:12;:10;:12::i;:::-;27766:28;;27805;27815:5;27822:2;27826:6;27805:9;:28::i;:::-;27851:4;27844:11;;;27670:193;;;;:::o;41737:690::-;41805:14;41822:8;;:15;;41805:32;;41853:9;41848:533;41868:6;41864:1;:10;41848:533;;;41893:10;41906:8;;41915:1;41906:11;;;;;;;:::i;:::-;;;;;;;;41893:24;;41987:10;41936:61;;41954:16;;;;;;;;;;;41936:43;;;41980:2;41936:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;41932:84;;42006:10;;;;;;;;;;;;;;41932:84;42031:18;42052:14;:18;42067:2;42052:18;;;;;;;;;;;42031:39;;42104:10;42089:25;;:4;:11;;;;;;;;;;;;:25;;;42085:54;;;42123:16;;;;;;;;;;;;;;42085:54;42199:15;42168:4;:21;;;:47;;;;;;;;;;;;;;;;;;42244:10;42230:4;:11;;;:24;;;;;;;;;;;;;;;;;;42310:3;;;;;42366:2;42354:10;42348:21;;;;;;;;;;;;41878:503;;41848:533;;;;42413:6;42391:18;;:28;;;;;;;:::i;:::-;;;;;;;;41794:633;41737:690;;:::o;40139:676::-;40207:13;:25;40221:10;40207:25;;;;;;;;;;;;;;;;;;;;;;;;;40206:26;40198:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40271:55;40279:5;40313:10;40296:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;40286:39;;;;;;40271:7;:55::i;:::-;40263:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;40375:14;40467:10;40424:17;;;;;;;;;;;40406:46;;;40453:10;40406:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;;;:::i;:::-;40375:102;;40512:10;40494:15;:28;40490:231;;;40698:10;40646:14;;;;;;;;;;;40637:46;;;40684:10;40637:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;;;:::i;:::-;40604:9;40568:10;;;;;;;;;;;40550:39;;;40590:10;40550:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;;;:::i;:::-;40549:160;;;;:::i;:::-;40539:170;;;;;:::i;:::-;;;40490:231;40761:4;40733:13;:25;40747:10;40733:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;40778:29;40788:10;40800:6;40778:9;:29::i;:::-;40187:628;40139:676;:::o;39423:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;42435:766::-;42505:18;42538:14;42555:8;;:15;;42538:32;;42586:9;42581:528;42605:6;42601:1;:10;42581:528;;;42633:10;42646:8;;42655:1;42646:11;;;;;;;:::i;:::-;;;;;;;;42633:24;;42672:18;42693:14;:18;42708:2;42693:18;;;;;;;;;;;42672:39;;42767:10;42752:25;;:4;:11;;;;;;;;;;;;:25;;;42726:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;38817:14;42949:4;:21;;;;;;;;;;;;42931:39;;:15;:39;;;;:::i;:::-;42930:79;;;;:::i;:::-;42899:10;:111;;;;:::i;:::-;42869:141;;43041:11;;;;;;;;;;;43027:4;:11;;;:25;;;;;;;;;;;;;;;;;;43094:2;43082:10;43074:23;;;;;;;;;;;;42618:491;;42613:3;;;;;:::i;:::-;;;;42581:528;;;;43141:6;43119:18;;:28;;;;;;;:::i;:::-;;;;;;;;43160:33;43170:10;43182;43160:9;:33::i;:::-;42494:707;;42435:766;;:::o;45379:484::-;45435:22;45460:15;:27;45476:10;45460:27;;;;;;;;;;;;;;;45435:52;;45507:4;:15;;;;;;;;;;;;45506:16;45498:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;45569:1;45563:3;:7;:19;;;;;45581:1;45574:3;:8;;45563:19;45555:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45615:14;45632:17;45645:3;45632:12;:17::i;:::-;45615:34;;45710:5;45692:15;:23;;;;:::i;:::-;45670:4;:19;;:45;;;;45744:4;45726;:15;;;:22;;;;;;;;;;;;;;;;;;45777:5;45759:4;:15;;;:23;;;;;;;;;;;;;;;;;;45810:3;45793:4;:14;;:20;;;;45826:29;45835:11;;;;;;;;;;;45848:6;45826:8;:29::i;:::-;;45424:439;;45379:484;:::o;27926:151::-;28015:7;28042:11;:18;28054:5;28042:18;;;;;;;;;;;;;;;:27;28061:7;28042:27;;;;;;;;;;;;;;;;28035:34;;27926:151;;;;:::o;44928:157::-;44985:7;45005:17;45025:14;:23;45040:7;45025:23;;;;;;;;;;;45005:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45066:4;:11;;;45059:18;;;44928:157;;;:::o;45871:1135::-;45911:22;45936:15;:27;45952:10;45936:27;;;;;;;;;;;;;;;45911:52;;45982:4;:15;;;;;;;;;;;;45974:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46075:4;:19;;;46056:15;:38;;46048:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;46133:4;:15;;;;;;;;;;;;46132:16;46124:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;46211:4;46193;:15;;;:22;;;;;;;;;;;;;;;;;;46228:14;46337:1;46331:3;46280:15;46297:16;46315:10;46263:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46253:74;;;;;;46245:83;;:89;;;;:::i;:::-;:93;;;;:::i;:::-;46228:110;;46349:30;46382:32;46399:4;:14;;;46382:16;:32::i;:::-;46349:65;;46441:13;46455:1;46441:16;;;;;;;;:::i;:::-;;;;;;;;46431:6;:26;46427:536;;46474:4;:19;;46499:1;46474:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46427:536;;;46552:13;46566:1;46552:16;;;;;;;;:::i;:::-;;;;;;;;46533:13;46547:1;46533:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;46523:6;:45;46519:444;;46585:4;:19;;46610:1;46585:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46519:444;;;46682:13;46696:1;46682:16;;;;;;;;:::i;:::-;;;;;;;;46663:13;46677:1;46663:16;;;;;;;;:::i;:::-;;;;;;;;46644:13;46658:1;46644:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:54;;;;:::i;:::-;46634:6;:64;46630:333;;46715:4;:19;;46740:1;46715:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46630:333;;;46831:13;46845:1;46831:16;;;;;;;;:::i;:::-;;;;;;;;46812:13;46826:1;46812:16;;;;;;;;:::i;:::-;;;;;;;;46793:13;46807:1;46793:16;;;;;;;;:::i;:::-;;;;;;;;46774:13;46788:1;46774:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:54;;;;:::i;:::-;:73;;;;:::i;:::-;46764:6;:83;46760:203;;46864:4;:19;;46889:1;46864:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46760:203;;;46924:4;:19;;46949:1;46924:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46760:203;46630:333;46519:444;46427:536;46993:5;46975:4;:15;;;:23;;;;;;;;;;;;;;;;;;45900:1106;;;45871:1135::o;39673:37::-;;;;:::o;19729:201::-;18709:13;:11;:13::i;:::-;19838:1:::1;19818:22;;:8;:22;;;;19810:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19894:28;19913:8;19894:18;:28::i;:::-;19729:201:::0;:::o;39362:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17374:98::-;17427:7;17454:10;17447:17;;17374:98;:::o;34650:380::-;34803:1;34786:19;;:5;:19;;;;34778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34884:1;34865:21;;:7;:21;;;;34857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34968:6;34938:11;:18;34950:5;34938:18;;;;;;;;;;;;;;;:27;34957:7;34938:27;;;;;;;;;;;;;;;:36;;;;35006:7;34990:32;;34999:5;34990:32;;;35015:6;34990:32;;;;;;:::i;:::-;;;;;;;;34650:380;;;:::o;52204:442::-;52289:21;52313:15;:23;52329:6;52313:23;;;;;;;;;;;;;;;52289:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52347:26;52376:4;:19;;;52347:48;;52411:9;52406:233;52430:9;:16;52426:1;:20;52406:233;;;52488:6;52472:9;52482:1;52472:12;;;;;;;;:::i;:::-;;;;;;;;:22;52468:160;;;52565:21;52576:6;52584:1;52565:10;:21::i;:::-;52605:7;;;;;52468:160;52448:3;;;;;:::i;:::-;;;;52406:233;;;;52278:368;;52204:442;;;:::o;40978:213::-;41045:17;41081:6;41065:13;:11;:13::i;:::-;:22;;;;:::i;:::-;41045:42;;41132:7;38757:10;41119:20;;;;:::i;:::-;41106:9;:33;;41098:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41166:17;41172:2;41176:6;41166:5;:17::i;:::-;41034:157;40978:213;;:::o;35321:453::-;35456:24;35483:25;35493:5;35500:7;35483:9;:25::i;:::-;35456:52;;35543:17;35523:16;:37;35519:248;;35605:6;35585:16;:26;;35577:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35689:51;35698:5;35705:7;35733:6;35714:16;:25;35689:8;:51::i;:::-;35519:248;35445:329;35321:453;;;:::o;31529:840::-;31676:1;31660:18;;:4;:18;;;;31652:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31753:1;31739:16;;:2;:16;;;;31731:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31808:38;31829:4;31835:2;31839:6;31808:20;:38::i;:::-;31859:19;31881:9;:15;31891:4;31881:15;;;;;;;;;;;;;;;;31859:37;;31930:6;31915:11;:21;;31907:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32047:6;32033:11;:20;32015:9;:15;32025:4;32015:15;;;;;;;;;;;;;;;:38;;;;32250:6;32233:9;:13;32243:2;32233:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;32300:2;32285:26;;32294:4;32285:26;;;32304:6;32285:26;;;;;;:::i;:::-;;;;;;;;32324:37;32344:4;32350:2;32354:6;32324:19;:37::i;:::-;31641:728;31529:840;;;:::o;51392:410::-;51450:7;51470:21;51494:15;:27;51510:10;51494:27;;;;;;;;;;;;;;;51470:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51532:26;51561:4;:19;;;51532:48;;51591:13;51634:9;51629:143;51653:9;:16;51649:1;:20;51629:143;;;51711:6;51695:9;51705:1;51695:12;;;;;;;;:::i;:::-;;;;;;;;:22;51691:70;;;51738:7;;;;;:::i;:::-;;;;51691:70;51671:3;;;;;:::i;:::-;;;;51629:143;;;;51789:5;51782:12;;;;;51392:410;;;:::o;33537:675::-;33640:1;33621:21;;:7;:21;;;;33613:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33693:49;33714:7;33731:1;33735:6;33693:20;:49::i;:::-;33755:22;33780:9;:18;33790:7;33780:18;;;;;;;;;;;;;;;;33755:43;;33835:6;33817:14;:24;;33809:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33954:6;33937:14;:23;33916:9;:18;33926:7;33916:18;;;;;;;;;;;;;;;:44;;;;34071:6;34055:12;;:22;;;;;;;;;;;34132:1;34106:37;;34115:7;34106:37;;;34136:6;34106:37;;;;;;:::i;:::-;;;;;;;;34156:48;34176:7;34193:1;34197:6;34156:19;:48::i;:::-;33602:610;33537:675;;:::o;18988:132::-;19063:12;:10;:12::i;:::-;19052:23;;:7;:5;:7::i;:::-;:23;;;19044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18988:132::o;20090:191::-;20164:16;20183:6;;;;;;;;;;;20164:25;;20209:8;20200:6;;:17;;;;;;;;;;;;;;;;;;20264:8;20233:40;;20254:8;20233:40;;;;;;;;;;;;20153:128;20090:191;:::o;40823:147::-;40901:4;40925:37;40944:5;40951:4;;40957;40925:18;:37::i;:::-;40918:44;;40823:147;;;;:::o;51067:317::-;51125:20;51169:1;51162:3;:8;51158:189;;;51202:7;51187:22;;51158:189;;;51238:1;51231:3;:8;51227:120;;;51271:8;51256:23;;51227:120;;;51327:8;51312:23;;51227:120;51158:189;51067:317;;;:::o;50208:851::-;50277:16;50306:30;50353:1;50339:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50306:49;;50386:1;50372:10;:15;50368:651;;;50423:1;50404:13;50418:1;50404:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;50459:1;50440:13;50454:1;50440:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;50495:2;50476:13;50490:1;50476:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50532:2;50513:13;50527:1;50513:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50568:2;50549:13;50563:1;50549:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50368:651;;;50607:1;50593:10;:15;50589:430;;;50644:1;50625:13;50639:1;50625:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;50680:1;50661:13;50675:1;50661:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;50716:2;50697:13;50711:1;50697:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50752:2;50733:13;50747:1;50733:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50788:2;50769:13;50783:1;50769:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50589:430;;;50826:1;50812:10;:15;50808:211;;;50863:1;50844:13;50858:1;50844:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;50898:1;50879:13;50893:1;50879:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;50933:2;50914:13;50928:1;50914:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50969:2;50950:13;50964:1;50950:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;51005:2;50986:13;51000:1;50986:16;;;;;;;;:::i;:::-;;;;;;;:21;;;;;50808:211;50589:430;50368:651;51038:13;51031:20;;;50208:851;;;:::o;51810:386::-;51881:22;51906:15;:23;51922:6;51906:23;;;;;;;;;;;;;;;51881:48;;51940:27;51970:4;:19;;51940:49;;52013:9;:16;;;;52004:5;:25;52000:38;;52031:7;;;;52000:38;52055:9;52067:5;52055:17;;52050:113;52097:1;52078:9;:16;;;;:20;;;;:::i;:::-;52074:1;:24;52050:113;;;52135:9;52149:1;52145;:5;;;;:::i;:::-;52135:16;;;;;;;;:::i;:::-;;;;;;;;;;52120:9;52130:1;52120:12;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;52100:3;;;;;:::i;:::-;;;;52050:113;;;;52173:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51870:326;;51810:386;;;:::o;32656:548::-;32759:1;32740:21;;:7;:21;;;;32732:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32810:49;32839:1;32843:7;32852:6;32810:20;:49::i;:::-;32888:6;32872:12;;:22;;;;;;;:::i;:::-;;;;;;;;33065:6;33043:9;:18;33053:7;33043:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;33119:7;33098:37;;33115:1;33098:37;;;33128:6;33098:37;;;;;;:::i;:::-;;;;;;;;33148:48;33176:1;33180:7;33189:6;33148:19;:48::i;:::-;32656:548;;:::o;36374:125::-;;;;:::o;37103:124::-;;;;:::o;1255:190::-;1380:4;1433;1404:25;1417:5;1424:4;1404:12;:25::i;:::-;:33;1397:40;;1255:190;;;;;:::o;2122:296::-;2205:7;2225:20;2248:4;2225:27;;2268:9;2263:118;2287:5;:12;2283:1;:16;2263:118;;;2336:33;2346:12;2360:5;2366:1;2360:8;;;;;;;;:::i;:::-;;;;;;;;2336:9;:33::i;:::-;2321:48;;2301:3;;;;;:::i;:::-;;;;2263:118;;;;2398:12;2391:19;;;2122:296;;;;:::o;9162:149::-;9225:7;9256:1;9252;:5;:51;;9283:20;9298:1;9301;9283:14;:20::i;:::-;9252:51;;;9260:20;9275:1;9278;9260:14;:20::i;:::-;9252:51;9245:58;;9162:149;;;;:::o;9319:268::-;9387:13;9494:1;9488:4;9481:15;9523:1;9517:4;9510:15;9564:4;9558;9548:21;9539:30;;9319:268;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:139::-;1543:5;1581:6;1568:20;1559:29;;1597:33;1624:5;1597:33;:::i;:::-;1497:139;;;;:::o;1642:143::-;1699:5;1730:6;1724:13;1715:22;;1746:33;1773:5;1746:33;:::i;:::-;1642:143;;;;:::o;1808:370::-;1879:5;1928:3;1921:4;1913:6;1909:17;1905:27;1895:122;;1936:79;;:::i;:::-;1895:122;2053:6;2040:20;2078:94;2168:3;2160:6;2153:4;2145:6;2141:17;2078:94;:::i;:::-;2069:103;;1885:293;1808:370;;;;:::o;2201:568::-;2274:8;2284:6;2334:3;2327:4;2319:6;2315:17;2311:27;2301:122;;2342:79;;:::i;:::-;2301:122;2455:6;2442:20;2432:30;;2485:18;2477:6;2474:30;2471:117;;;2507:79;;:::i;:::-;2471:117;2621:4;2613:6;2609:17;2597:29;;2675:3;2667:4;2659:6;2655:17;2645:8;2641:32;2638:41;2635:128;;;2682:79;;:::i;:::-;2635:128;2201:568;;;;;:::o;2792:370::-;2863:5;2912:3;2905:4;2897:6;2893:17;2889:27;2879:122;;2920:79;;:::i;:::-;2879:122;3037:6;3024:20;3062:94;3152:3;3144:6;3137:4;3129:6;3125:17;3062:94;:::i;:::-;3053:103;;2869:293;2792:370;;;;:::o;3168:139::-;3214:5;3252:6;3239:20;3230:29;;3268:33;3295:5;3268:33;:::i;:::-;3168:139;;;;:::o;3313:::-;3359:5;3397:6;3384:20;3375:29;;3413:33;3440:5;3413:33;:::i;:::-;3313:139;;;;:::o;3458:143::-;3515:5;3546:6;3540:13;3531:22;;3562:33;3589:5;3562:33;:::i;:::-;3458:143;;;;:::o;3607:329::-;3666:6;3715:2;3703:9;3694:7;3690:23;3686:32;3683:119;;;3721:79;;:::i;:::-;3683:119;3841:1;3866:53;3911:7;3902:6;3891:9;3887:22;3866:53;:::i;:::-;3856:63;;3812:117;3607:329;;;;:::o;3942:351::-;4012:6;4061:2;4049:9;4040:7;4036:23;4032:32;4029:119;;;4067:79;;:::i;:::-;4029:119;4187:1;4212:64;4268:7;4259:6;4248:9;4244:22;4212:64;:::i;:::-;4202:74;;4158:128;3942:351;;;;:::o;4299:474::-;4367:6;4375;4424:2;4412:9;4403:7;4399:23;4395:32;4392:119;;;4430:79;;:::i;:::-;4392:119;4550:1;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4521:117;4677:2;4703:53;4748:7;4739:6;4728:9;4724:22;4703:53;:::i;:::-;4693:63;;4648:118;4299:474;;;;;:::o;4779:619::-;4856:6;4864;4872;4921:2;4909:9;4900:7;4896:23;4892:32;4889:119;;;4927:79;;:::i;:::-;4889:119;5047:1;5072:53;5117:7;5108:6;5097:9;5093:22;5072:53;:::i;:::-;5062:63;;5018:117;5174:2;5200:53;5245:7;5236:6;5225:9;5221:22;5200:53;:::i;:::-;5190:63;;5145:118;5302:2;5328:53;5373:7;5364:6;5353:9;5349:22;5328:53;:::i;:::-;5318:63;;5273:118;4779:619;;;;;:::o;5404:::-;5481:6;5489;5497;5546:2;5534:9;5525:7;5521:23;5517:32;5514:119;;;5552:79;;:::i;:::-;5514:119;5672:1;5697:53;5742:7;5733:6;5722:9;5718:22;5697:53;:::i;:::-;5687:63;;5643:117;5799:2;5825:53;5870:7;5861:6;5850:9;5846:22;5825:53;:::i;:::-;5815:63;;5770:118;5927:2;5953:53;5998:7;5989:6;5978:9;5974:22;5953:53;:::i;:::-;5943:63;;5898:118;5404:619;;;;;:::o;6029:684::-;6122:6;6130;6179:2;6167:9;6158:7;6154:23;6150:32;6147:119;;;6185:79;;:::i;:::-;6147:119;6305:1;6330:53;6375:7;6366:6;6355:9;6351:22;6330:53;:::i;:::-;6320:63;;6276:117;6460:2;6449:9;6445:18;6432:32;6491:18;6483:6;6480:30;6477:117;;;6513:79;;:::i;:::-;6477:117;6618:78;6688:7;6679:6;6668:9;6664:22;6618:78;:::i;:::-;6608:88;;6403:303;6029:684;;;;;:::o;6719:474::-;6787:6;6795;6844:2;6832:9;6823:7;6819:23;6815:32;6812:119;;;6850:79;;:::i;:::-;6812:119;6970:1;6995:53;7040:7;7031:6;7020:9;7016:22;6995:53;:::i;:::-;6985:63;;6941:117;7097:2;7123:53;7168:7;7159:6;7148:9;7144:22;7123:53;:::i;:::-;7113:63;;7068:118;6719:474;;;;;:::o;7199:539::-;7283:6;7332:2;7320:9;7311:7;7307:23;7303:32;7300:119;;;7338:79;;:::i;:::-;7300:119;7486:1;7475:9;7471:17;7458:31;7516:18;7508:6;7505:30;7502:117;;;7538:79;;:::i;:::-;7502:117;7643:78;7713:7;7704:6;7693:9;7689:22;7643:78;:::i;:::-;7633:88;;7429:302;7199:539;;;;:::o;7744:559::-;7830:6;7838;7887:2;7875:9;7866:7;7862:23;7858:32;7855:119;;;7893:79;;:::i;:::-;7855:119;8041:1;8030:9;8026:17;8013:31;8071:18;8063:6;8060:30;8057:117;;;8093:79;;:::i;:::-;8057:117;8206:80;8278:7;8269:6;8258:9;8254:22;8206:80;:::i;:::-;8188:98;;;;7984:312;7744:559;;;;;:::o;8309:329::-;8368:6;8417:2;8405:9;8396:7;8392:23;8388:32;8385:119;;;8423:79;;:::i;:::-;8385:119;8543:1;8568:53;8613:7;8604:6;8593:9;8589:22;8568:53;:::i;:::-;8558:63;;8514:117;8309:329;;;;:::o;8644:::-;8703:6;8752:2;8740:9;8731:7;8727:23;8723:32;8720:119;;;8758:79;;:::i;:::-;8720:119;8878:1;8903:53;8948:7;8939:6;8928:9;8924:22;8903:53;:::i;:::-;8893:63;;8849:117;8644:329;;;;:::o;8979:351::-;9049:6;9098:2;9086:9;9077:7;9073:23;9069:32;9066:119;;;9104:79;;:::i;:::-;9066:119;9224:1;9249:64;9305:7;9296:6;9285:9;9281:22;9249:64;:::i;:::-;9239:74;;9195:128;8979:351;;;;:::o;9336:179::-;9405:10;9426:46;9468:3;9460:6;9426:46;:::i;:::-;9504:4;9499:3;9495:14;9481:28;;9336:179;;;;:::o;9521:118::-;9608:24;9626:5;9608:24;:::i;:::-;9603:3;9596:37;9521:118;;:::o;9645:157::-;9750:45;9770:24;9788:5;9770:24;:::i;:::-;9750:45;:::i;:::-;9745:3;9738:58;9645:157;;:::o;9838:732::-;9957:3;9986:54;10034:5;9986:54;:::i;:::-;10056:86;10135:6;10130:3;10056:86;:::i;:::-;10049:93;;10166:56;10216:5;10166:56;:::i;:::-;10245:7;10276:1;10261:284;10286:6;10283:1;10280:13;10261:284;;;10362:6;10356:13;10389:63;10448:3;10433:13;10389:63;:::i;:::-;10382:70;;10475:60;10528:6;10475:60;:::i;:::-;10465:70;;10321:224;10308:1;10305;10301:9;10296:14;;10261:284;;;10265:14;10561:3;10554:10;;9962:608;;;9838:732;;;;:::o;10576:109::-;10657:21;10672:5;10657:21;:::i;:::-;10652:3;10645:34;10576:109;;:::o;10691:364::-;10779:3;10807:39;10840:5;10807:39;:::i;:::-;10862:71;10926:6;10921:3;10862:71;:::i;:::-;10855:78;;10942:52;10987:6;10982:3;10975:4;10968:5;10964:16;10942:52;:::i;:::-;11019:29;11041:6;11019:29;:::i;:::-;11014:3;11010:39;11003:46;;10783:272;10691:364;;;;:::o;11061:366::-;11203:3;11224:67;11288:2;11283:3;11224:67;:::i;:::-;11217:74;;11300:93;11389:3;11300:93;:::i;:::-;11418:2;11413:3;11409:12;11402:19;;11061:366;;;:::o;11433:::-;11575:3;11596:67;11660:2;11655:3;11596:67;:::i;:::-;11589:74;;11672:93;11761:3;11672:93;:::i;:::-;11790:2;11785:3;11781:12;11774:19;;11433:366;;;:::o;11805:::-;11947:3;11968:67;12032:2;12027:3;11968:67;:::i;:::-;11961:74;;12044:93;12133:3;12044:93;:::i;:::-;12162:2;12157:3;12153:12;12146:19;;11805:366;;;:::o;12177:::-;12319:3;12340:67;12404:2;12399:3;12340:67;:::i;:::-;12333:74;;12416:93;12505:3;12416:93;:::i;:::-;12534:2;12529:3;12525:12;12518:19;;12177:366;;;:::o;12549:::-;12691:3;12712:67;12776:2;12771:3;12712:67;:::i;:::-;12705:74;;12788:93;12877:3;12788:93;:::i;:::-;12906:2;12901:3;12897:12;12890:19;;12549:366;;;:::o;12921:::-;13063:3;13084:67;13148:2;13143:3;13084:67;:::i;:::-;13077:74;;13160:93;13249:3;13160:93;:::i;:::-;13278:2;13273:3;13269:12;13262:19;;12921:366;;;:::o;13293:::-;13435:3;13456:67;13520:2;13515:3;13456:67;:::i;:::-;13449:74;;13532:93;13621:3;13532:93;:::i;:::-;13650:2;13645:3;13641:12;13634:19;;13293:366;;;:::o;13665:::-;13807:3;13828:67;13892:2;13887:3;13828:67;:::i;:::-;13821:74;;13904:93;13993:3;13904:93;:::i;:::-;14022:2;14017:3;14013:12;14006:19;;13665:366;;;:::o;14037:::-;14179:3;14200:67;14264:2;14259:3;14200:67;:::i;:::-;14193:74;;14276:93;14365:3;14276:93;:::i;:::-;14394:2;14389:3;14385:12;14378:19;;14037:366;;;:::o;14409:::-;14551:3;14572:67;14636:2;14631:3;14572:67;:::i;:::-;14565:74;;14648:93;14737:3;14648:93;:::i;:::-;14766:2;14761:3;14757:12;14750:19;;14409:366;;;:::o;14781:::-;14923:3;14944:67;15008:2;15003:3;14944:67;:::i;:::-;14937:74;;15020:93;15109:3;15020:93;:::i;:::-;15138:2;15133:3;15129:12;15122:19;;14781:366;;;:::o;15153:::-;15295:3;15316:67;15380:2;15375:3;15316:67;:::i;:::-;15309:74;;15392:93;15481:3;15392:93;:::i;:::-;15510:2;15505:3;15501:12;15494:19;;15153:366;;;:::o;15525:::-;15667:3;15688:67;15752:2;15747:3;15688:67;:::i;:::-;15681:74;;15764:93;15853:3;15764:93;:::i;:::-;15882:2;15877:3;15873:12;15866:19;;15525:366;;;:::o;15897:::-;16039:3;16060:67;16124:2;16119:3;16060:67;:::i;:::-;16053:74;;16136:93;16225:3;16136:93;:::i;:::-;16254:2;16249:3;16245:12;16238:19;;15897:366;;;:::o;16269:::-;16411:3;16432:67;16496:2;16491:3;16432:67;:::i;:::-;16425:74;;16508:93;16597:3;16508:93;:::i;:::-;16626:2;16621:3;16617:12;16610:19;;16269:366;;;:::o;16641:::-;16783:3;16804:67;16868:2;16863:3;16804:67;:::i;:::-;16797:74;;16880:93;16969:3;16880:93;:::i;:::-;16998:2;16993:3;16989:12;16982:19;;16641:366;;;:::o;17013:::-;17155:3;17176:67;17240:2;17235:3;17176:67;:::i;:::-;17169:74;;17252:93;17341:3;17252:93;:::i;:::-;17370:2;17365:3;17361:12;17354:19;;17013:366;;;:::o;17385:::-;17527:3;17548:67;17612:2;17607:3;17548:67;:::i;:::-;17541:74;;17624:93;17713:3;17624:93;:::i;:::-;17742:2;17737:3;17733:12;17726:19;;17385:366;;;:::o;17757:::-;17899:3;17920:67;17984:2;17979:3;17920:67;:::i;:::-;17913:74;;17996:93;18085:3;17996:93;:::i;:::-;18114:2;18109:3;18105:12;18098:19;;17757:366;;;:::o;18129:::-;18271:3;18292:67;18356:2;18351:3;18292:67;:::i;:::-;18285:74;;18368:93;18457:3;18368:93;:::i;:::-;18486:2;18481:3;18477:12;18470:19;;18129:366;;;:::o;18501:::-;18643:3;18664:67;18728:2;18723:3;18664:67;:::i;:::-;18657:74;;18740:93;18829:3;18740:93;:::i;:::-;18858:2;18853:3;18849:12;18842:19;;18501:366;;;:::o;18873:::-;19015:3;19036:67;19100:2;19095:3;19036:67;:::i;:::-;19029:74;;19112:93;19201:3;19112:93;:::i;:::-;19230:2;19225:3;19221:12;19214:19;;18873:366;;;:::o;19245:::-;19387:3;19408:67;19472:2;19467:3;19408:67;:::i;:::-;19401:74;;19484:93;19573:3;19484:93;:::i;:::-;19602:2;19597:3;19593:12;19586:19;;19245:366;;;:::o;19617:::-;19759:3;19780:67;19844:2;19839:3;19780:67;:::i;:::-;19773:74;;19856:93;19945:3;19856:93;:::i;:::-;19974:2;19969:3;19965:12;19958:19;;19617:366;;;:::o;19989:::-;20131:3;20152:67;20216:2;20211:3;20152:67;:::i;:::-;20145:74;;20228:93;20317:3;20228:93;:::i;:::-;20346:2;20341:3;20337:12;20330:19;;19989:366;;;:::o;20361:::-;20503:3;20524:67;20588:2;20583:3;20524:67;:::i;:::-;20517:74;;20600:93;20689:3;20600:93;:::i;:::-;20718:2;20713:3;20709:12;20702:19;;20361:366;;;:::o;20733:108::-;20810:24;20828:5;20810:24;:::i;:::-;20805:3;20798:37;20733:108;;:::o;20847:118::-;20934:24;20952:5;20934:24;:::i;:::-;20929:3;20922:37;20847:118;;:::o;20971:157::-;21076:45;21096:24;21114:5;21096:24;:::i;:::-;21076:45;:::i;:::-;21071:3;21064:58;20971:157;;:::o;21134:112::-;21217:22;21233:5;21217:22;:::i;:::-;21212:3;21205:35;21134:112;;:::o;21252:115::-;21337:23;21354:5;21337:23;:::i;:::-;21332:3;21325:36;21252:115;;:::o;21373:256::-;21485:3;21500:75;21571:3;21562:6;21500:75;:::i;:::-;21600:2;21595:3;21591:12;21584:19;;21620:3;21613:10;;21373:256;;;;:::o;21635:538::-;21803:3;21818:75;21889:3;21880:6;21818:75;:::i;:::-;21918:2;21913:3;21909:12;21902:19;;21931:75;22002:3;21993:6;21931:75;:::i;:::-;22031:2;22026:3;22022:12;22015:19;;22044:75;22115:3;22106:6;22044:75;:::i;:::-;22144:2;22139:3;22135:12;22128:19;;22164:3;22157:10;;21635:538;;;;;;:::o;22179:222::-;22272:4;22310:2;22299:9;22295:18;22287:26;;22323:71;22391:1;22380:9;22376:17;22367:6;22323:71;:::i;:::-;22179:222;;;;:::o;22407:373::-;22550:4;22588:2;22577:9;22573:18;22565:26;;22637:9;22631:4;22627:20;22623:1;22612:9;22608:17;22601:47;22665:108;22768:4;22759:6;22665:108;:::i;:::-;22657:116;;22407:373;;;;:::o;22786:210::-;22873:4;22911:2;22900:9;22896:18;22888:26;;22924:65;22986:1;22975:9;22971:17;22962:6;22924:65;:::i;:::-;22786:210;;;;:::o;23002:313::-;23115:4;23153:2;23142:9;23138:18;23130:26;;23202:9;23196:4;23192:20;23188:1;23177:9;23173:17;23166:47;23230:78;23303:4;23294:6;23230:78;:::i;:::-;23222:86;;23002:313;;;;:::o;23321:419::-;23487:4;23525:2;23514:9;23510:18;23502:26;;23574:9;23568:4;23564:20;23560:1;23549:9;23545:17;23538:47;23602:131;23728:4;23602:131;:::i;:::-;23594:139;;23321:419;;;:::o;23746:::-;23912:4;23950:2;23939:9;23935:18;23927:26;;23999:9;23993:4;23989:20;23985:1;23974:9;23970:17;23963:47;24027:131;24153:4;24027:131;:::i;:::-;24019:139;;23746:419;;;:::o;24171:::-;24337:4;24375:2;24364:9;24360:18;24352:26;;24424:9;24418:4;24414:20;24410:1;24399:9;24395:17;24388:47;24452:131;24578:4;24452:131;:::i;:::-;24444:139;;24171:419;;;:::o;24596:::-;24762:4;24800:2;24789:9;24785:18;24777:26;;24849:9;24843:4;24839:20;24835:1;24824:9;24820:17;24813:47;24877:131;25003:4;24877:131;:::i;:::-;24869:139;;24596:419;;;:::o;25021:::-;25187:4;25225:2;25214:9;25210:18;25202:26;;25274:9;25268:4;25264:20;25260:1;25249:9;25245:17;25238:47;25302:131;25428:4;25302:131;:::i;:::-;25294:139;;25021:419;;;:::o;25446:::-;25612:4;25650:2;25639:9;25635:18;25627:26;;25699:9;25693:4;25689:20;25685:1;25674:9;25670:17;25663:47;25727:131;25853:4;25727:131;:::i;:::-;25719:139;;25446:419;;;:::o;25871:::-;26037:4;26075:2;26064:9;26060:18;26052:26;;26124:9;26118:4;26114:20;26110:1;26099:9;26095:17;26088:47;26152:131;26278:4;26152:131;:::i;:::-;26144:139;;25871:419;;;:::o;26296:::-;26462:4;26500:2;26489:9;26485:18;26477:26;;26549:9;26543:4;26539:20;26535:1;26524:9;26520:17;26513:47;26577:131;26703:4;26577:131;:::i;:::-;26569:139;;26296:419;;;:::o;26721:::-;26887:4;26925:2;26914:9;26910:18;26902:26;;26974:9;26968:4;26964:20;26960:1;26949:9;26945:17;26938:47;27002:131;27128:4;27002:131;:::i;:::-;26994:139;;26721:419;;;:::o;27146:::-;27312:4;27350:2;27339:9;27335:18;27327:26;;27399:9;27393:4;27389:20;27385:1;27374:9;27370:17;27363:47;27427:131;27553:4;27427:131;:::i;:::-;27419:139;;27146:419;;;:::o;27571:::-;27737:4;27775:2;27764:9;27760:18;27752:26;;27824:9;27818:4;27814:20;27810:1;27799:9;27795:17;27788:47;27852:131;27978:4;27852:131;:::i;:::-;27844:139;;27571:419;;;:::o;27996:::-;28162:4;28200:2;28189:9;28185:18;28177:26;;28249:9;28243:4;28239:20;28235:1;28224:9;28220:17;28213:47;28277:131;28403:4;28277:131;:::i;:::-;28269:139;;27996:419;;;:::o;28421:::-;28587:4;28625:2;28614:9;28610:18;28602:26;;28674:9;28668:4;28664:20;28660:1;28649:9;28645:17;28638:47;28702:131;28828:4;28702:131;:::i;:::-;28694:139;;28421:419;;;:::o;28846:::-;29012:4;29050:2;29039:9;29035:18;29027:26;;29099:9;29093:4;29089:20;29085:1;29074:9;29070:17;29063:47;29127:131;29253:4;29127:131;:::i;:::-;29119:139;;28846:419;;;:::o;29271:::-;29437:4;29475:2;29464:9;29460:18;29452:26;;29524:9;29518:4;29514:20;29510:1;29499:9;29495:17;29488:47;29552:131;29678:4;29552:131;:::i;:::-;29544:139;;29271:419;;;:::o;29696:::-;29862:4;29900:2;29889:9;29885:18;29877:26;;29949:9;29943:4;29939:20;29935:1;29924:9;29920:17;29913:47;29977:131;30103:4;29977:131;:::i;:::-;29969:139;;29696:419;;;:::o;30121:::-;30287:4;30325:2;30314:9;30310:18;30302:26;;30374:9;30368:4;30364:20;30360:1;30349:9;30345:17;30338:47;30402:131;30528:4;30402:131;:::i;:::-;30394:139;;30121:419;;;:::o;30546:::-;30712:4;30750:2;30739:9;30735:18;30727:26;;30799:9;30793:4;30789:20;30785:1;30774:9;30770:17;30763:47;30827:131;30953:4;30827:131;:::i;:::-;30819:139;;30546:419;;;:::o;30971:::-;31137:4;31175:2;31164:9;31160:18;31152:26;;31224:9;31218:4;31214:20;31210:1;31199:9;31195:17;31188:47;31252:131;31378:4;31252:131;:::i;:::-;31244:139;;30971:419;;;:::o;31396:::-;31562:4;31600:2;31589:9;31585:18;31577:26;;31649:9;31643:4;31639:20;31635:1;31624:9;31620:17;31613:47;31677:131;31803:4;31677:131;:::i;:::-;31669:139;;31396:419;;;:::o;31821:::-;31987:4;32025:2;32014:9;32010:18;32002:26;;32074:9;32068:4;32064:20;32060:1;32049:9;32045:17;32038:47;32102:131;32228:4;32102:131;:::i;:::-;32094:139;;31821:419;;;:::o;32246:::-;32412:4;32450:2;32439:9;32435:18;32427:26;;32499:9;32493:4;32489:20;32485:1;32474:9;32470:17;32463:47;32527:131;32653:4;32527:131;:::i;:::-;32519:139;;32246:419;;;:::o;32671:::-;32837:4;32875:2;32864:9;32860:18;32852:26;;32924:9;32918:4;32914:20;32910:1;32899:9;32895:17;32888:47;32952:131;33078:4;32952:131;:::i;:::-;32944:139;;32671:419;;;:::o;33096:::-;33262:4;33300:2;33289:9;33285:18;33277:26;;33349:9;33343:4;33339:20;33335:1;33324:9;33320:17;33313:47;33377:131;33503:4;33377:131;:::i;:::-;33369:139;;33096:419;;;:::o;33521:::-;33687:4;33725:2;33714:9;33710:18;33702:26;;33774:9;33768:4;33764:20;33760:1;33749:9;33745:17;33738:47;33802:131;33928:4;33802:131;:::i;:::-;33794:139;;33521:419;;;:::o;33946:::-;34112:4;34150:2;34139:9;34135:18;34127:26;;34199:9;34193:4;34189:20;34185:1;34174:9;34170:17;34163:47;34227:131;34353:4;34227:131;:::i;:::-;34219:139;;33946:419;;;:::o;34371:222::-;34464:4;34502:2;34491:9;34487:18;34479:26;;34515:71;34583:1;34572:9;34568:17;34559:6;34515:71;:::i;:::-;34371:222;;;;:::o;34599:529::-;34764:4;34802:3;34791:9;34787:19;34779:27;;34816:71;34884:1;34873:9;34869:17;34860:6;34816:71;:::i;:::-;34897:66;34959:2;34948:9;34944:18;34935:6;34897:66;:::i;:::-;34973;35035:2;35024:9;35020:18;35011:6;34973:66;:::i;:::-;35049:72;35117:2;35106:9;35102:18;35093:6;35049:72;:::i;:::-;34599:529;;;;;;;:::o;35134:214::-;35223:4;35261:2;35250:9;35246:18;35238:26;;35274:67;35338:1;35327:9;35323:17;35314:6;35274:67;:::i;:::-;35134:214;;;;:::o;35354:328::-;35473:4;35511:2;35500:9;35496:18;35488:26;;35524:69;35590:1;35579:9;35575:17;35566:6;35524:69;:::i;:::-;35603:72;35671:2;35660:9;35656:18;35647:6;35603:72;:::i;:::-;35354:328;;;;;:::o;35688:129::-;35722:6;35749:20;;:::i;:::-;35739:30;;35778:33;35806:4;35798:6;35778:33;:::i;:::-;35688:129;;;:::o;35823:75::-;35856:6;35889:2;35883:9;35873:19;;35823:75;:::o;35904:311::-;35981:4;36071:18;36063:6;36060:30;36057:56;;;36093:18;;:::i;:::-;36057:56;36143:4;36135:6;36131:17;36123:25;;36203:4;36197;36193:15;36185:23;;35904:311;;;:::o;36221:::-;36298:4;36388:18;36380:6;36377:30;36374:56;;;36410:18;;:::i;:::-;36374:56;36460:4;36452:6;36448:17;36440:25;;36520:4;36514;36510:15;36502:23;;36221:311;;;:::o;36538:132::-;36605:4;36628:3;36620:11;;36658:4;36653:3;36649:14;36641:22;;36538:132;;;:::o;36676:114::-;36743:6;36777:5;36771:12;36761:22;;36676:114;;;:::o;36796:99::-;36848:6;36882:5;36876:12;36866:22;;36796:99;;;:::o;36901:113::-;36971:4;37003;36998:3;36994:14;36986:22;;36901:113;;;:::o;37020:184::-;37119:11;37153:6;37148:3;37141:19;37193:4;37188:3;37184:14;37169:29;;37020:184;;;;:::o;37210:169::-;37294:11;37328:6;37323:3;37316:19;37368:4;37363:3;37359:14;37344:29;;37210:169;;;;:::o;37385:305::-;37425:3;37444:20;37462:1;37444:20;:::i;:::-;37439:25;;37478:20;37496:1;37478:20;:::i;:::-;37473:25;;37632:1;37564:66;37560:74;37557:1;37554:81;37551:107;;;37638:18;;:::i;:::-;37551:107;37682:1;37679;37675:9;37668:16;;37385:305;;;;:::o;37696:348::-;37736:7;37759:20;37777:1;37759:20;:::i;:::-;37754:25;;37793:20;37811:1;37793:20;:::i;:::-;37788:25;;37981:1;37913:66;37909:74;37906:1;37903:81;37898:1;37891:9;37884:17;37880:105;37877:131;;;37988:18;;:::i;:::-;37877:131;38036:1;38033;38029:9;38018:20;;37696:348;;;;:::o;38050:191::-;38090:4;38110:20;38128:1;38110:20;:::i;:::-;38105:25;;38144:20;38162:1;38144:20;:::i;:::-;38139:25;;38183:1;38180;38177:8;38174:34;;;38188:18;;:::i;:::-;38174:34;38233:1;38230;38226:9;38218:17;;38050:191;;;;:::o;38247:96::-;38284:7;38313:24;38331:5;38313:24;:::i;:::-;38302:35;;38247:96;;;:::o;38349:90::-;38383:7;38426:5;38419:13;38412:21;38401:32;;38349:90;;;:::o;38445:77::-;38482:7;38511:5;38500:16;;38445:77;;;:::o;38528:126::-;38565:7;38605:42;38598:5;38594:54;38583:65;;38528:126;;;:::o;38660:77::-;38697:7;38726:5;38715:16;;38660:77;;;:::o;38743:86::-;38778:7;38818:4;38811:5;38807:16;38796:27;;38743:86;;;:::o;38835:109::-;38871:7;38911:26;38904:5;38900:38;38889:49;;38835:109;;;:::o;38950:307::-;39018:1;39028:113;39042:6;39039:1;39036:13;39028:113;;;39127:1;39122:3;39118:11;39112:18;39108:1;39103:3;39099:11;39092:39;39064:2;39061:1;39057:10;39052:15;;39028:113;;;39159:6;39156:1;39153:13;39150:101;;;39239:1;39230:6;39225:3;39221:16;39214:27;39150:101;38999:258;38950:307;;;:::o;39263:320::-;39307:6;39344:1;39338:4;39334:12;39324:22;;39391:1;39385:4;39381:12;39412:18;39402:81;;39468:4;39460:6;39456:17;39446:27;;39402:81;39530:2;39522:6;39519:14;39499:18;39496:38;39493:84;;;39549:18;;:::i;:::-;39493:84;39314:269;39263:320;;;:::o;39589:281::-;39672:27;39694:4;39672:27;:::i;:::-;39664:6;39660:40;39802:6;39790:10;39787:22;39766:18;39754:10;39751:34;39748:62;39745:88;;;39813:18;;:::i;:::-;39745:88;39853:10;39849:2;39842:22;39632:238;39589:281;;:::o;39876:233::-;39915:3;39938:24;39956:5;39938:24;:::i;:::-;39929:33;;39984:66;39977:5;39974:77;39971:103;;;40054:18;;:::i;:::-;39971:103;40101:1;40094:5;40090:13;40083:20;;39876:233;;;:::o;40115:100::-;40154:7;40183:26;40203:5;40183:26;:::i;:::-;40172:37;;40115:100;;;:::o;40221:94::-;40260:7;40289:20;40303:5;40289:20;:::i;:::-;40278:31;;40221:94;;;:::o;40321:79::-;40360:7;40389:5;40378:16;;40321:79;;;:::o;40406:176::-;40438:1;40455:20;40473:1;40455:20;:::i;:::-;40450:25;;40489:20;40507:1;40489:20;:::i;:::-;40484:25;;40528:1;40518:35;;40533:18;;:::i;:::-;40518:35;40574:1;40571;40567:9;40562:14;;40406:176;;;;:::o;40588:180::-;40636:77;40633:1;40626:88;40733:4;40730:1;40723:15;40757:4;40754:1;40747:15;40774:180;40822:77;40819:1;40812:88;40919:4;40916:1;40909:15;40943:4;40940:1;40933:15;40960:180;41008:77;41005:1;40998:88;41105:4;41102:1;41095:15;41129:4;41126:1;41119:15;41146:180;41194:77;41191:1;41184:88;41291:4;41288:1;41281:15;41315:4;41312:1;41305:15;41332:180;41380:77;41377:1;41370:88;41477:4;41474:1;41467:15;41501:4;41498:1;41491:15;41518:180;41566:77;41563:1;41556:88;41663:4;41660:1;41653:15;41687:4;41684:1;41677:15;41704:117;41813:1;41810;41803:12;41827:117;41936:1;41933;41926:12;41950:117;42059:1;42056;42049:12;42073:117;42182:1;42179;42172:12;42196:117;42305:1;42302;42295:12;42319:102;42360:6;42411:2;42407:7;42402:2;42395:5;42391:14;42387:28;42377:38;;42319:102;;;:::o;42427:94::-;42460:8;42508:5;42504:2;42500:14;42479:35;;42427:94;;;:::o;42527:222::-;42667:34;42663:1;42655:6;42651:14;42644:58;42736:5;42731:2;42723:6;42719:15;42712:30;42527:222;:::o;42755:221::-;42895:34;42891:1;42883:6;42879:14;42872:58;42964:4;42959:2;42951:6;42947:15;42940:29;42755:221;:::o;42982:165::-;43122:17;43118:1;43110:6;43106:14;43099:41;42982:165;:::o;43153:225::-;43293:34;43289:1;43281:6;43277:14;43270:58;43362:8;43357:2;43349:6;43345:15;43338:33;43153:225;:::o;43384:221::-;43524:34;43520:1;43512:6;43508:14;43501:58;43593:4;43588:2;43580:6;43576:15;43569:29;43384:221;:::o;43611:164::-;43751:16;43747:1;43739:6;43735:14;43728:40;43611:164;:::o;43781:165::-;43921:17;43917:1;43909:6;43905:14;43898:41;43781:165;:::o;43952:179::-;44092:31;44088:1;44080:6;44076:14;44069:55;43952:179;:::o;44137:225::-;44277:34;44273:1;44265:6;44261:14;44254:58;44346:8;44341:2;44333:6;44329:15;44322:33;44137:225;:::o;44368:222::-;44508:34;44504:1;44496:6;44492:14;44485:58;44577:5;44572:2;44564:6;44560:15;44553:30;44368:222;:::o;44596:180::-;44736:32;44732:1;44724:6;44720:14;44713:56;44596:180;:::o;44782:170::-;44922:22;44918:1;44910:6;44906:14;44899:46;44782:170;:::o;44958:173::-;45098:25;45094:1;45086:6;45082:14;45075:49;44958:173;:::o;45137:182::-;45277:34;45273:1;45265:6;45261:14;45254:58;45137:182;:::o;45325:226::-;45465:34;45461:1;45453:6;45449:14;45442:58;45534:9;45529:2;45521:6;45517:15;45510:34;45325:226;:::o;45557:220::-;45697:34;45693:1;45685:6;45681:14;45674:58;45766:3;45761:2;45753:6;45749:15;45742:28;45557:220;:::o;45783:164::-;45923:16;45919:1;45911:6;45907:14;45900:40;45783:164;:::o;45953:224::-;46093:34;46089:1;46081:6;46077:14;46070:58;46162:7;46157:2;46149:6;46145:15;46138:32;45953:224;:::o;46183:223::-;46323:34;46319:1;46311:6;46307:14;46300:58;46392:6;46387:2;46379:6;46375:15;46368:31;46183:223;:::o;46412:173::-;46552:25;46548:1;46540:6;46536:14;46529:49;46412:173;:::o;46591:161::-;46731:13;46727:1;46719:6;46715:14;46708:37;46591:161;:::o;46758:167::-;46898:19;46894:1;46886:6;46882:14;46875:43;46758:167;:::o;46931:168::-;47071:20;47067:1;47059:6;47055:14;47048:44;46931:168;:::o;47105:170::-;47245:22;47241:1;47233:6;47229:14;47222:46;47105:170;:::o;47281:224::-;47421:34;47417:1;47409:6;47405:14;47398:58;47490:7;47485:2;47477:6;47473:15;47466:32;47281:224;:::o;47511:181::-;47651:33;47647:1;47639:6;47635:14;47628:57;47511:181;:::o;47698:122::-;47771:24;47789:5;47771:24;:::i;:::-;47764:5;47761:35;47751:63;;47810:1;47807;47800:12;47751:63;47698:122;:::o;47826:::-;47899:24;47917:5;47899:24;:::i;:::-;47892:5;47889:35;47879:63;;47938:1;47935;47928:12;47879:63;47826:122;:::o;47954:::-;48027:24;48045:5;48027:24;:::i;:::-;48020:5;48017:35;48007:63;;48066:1;48063;48056:12;48007:63;47954:122;:::o

Swarm Source

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