ETH Price: $3,047.13 (-2.80%)

Token

COLORZ (COLORZ)
 

Overview

Max Total Supply

108 COLORZ

Holders

80

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
wahlaneh.eth
Balance
1 COLORZ
0x90e42fa8351e93fbad25dab071255156c430db33
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:
Colorz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
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 Returns the rebuilt hash obtained by traversing a Merklee 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++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

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

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

    /**
     * @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.
     * - `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 tokenId
    ) internal virtual {}
}

// File: contracts/colorz.sol



//          _             _            _             _            _            _         
//         /\ \           /\ \         _\ \          /\ \         /\ \        /\ \        
//        /  \ \         /  \ \       /\__ \        /  \ \       /  \ \      /  \ \       
//       / /\ \ \       / /\ \ \     / /_ \_\      / /\ \ \     / /\ \ \  __/ /\ \ \      
//      / / /\ \ \     / / /\ \ \   / / /\/_/     / / /\ \ \   / / /\ \_\/___/ /\ \ \     
//     / / /  \ \_\   / / /  \ \_\ / / /         / / /  \ \_\ / / /_/ / /\___\/ / / /     
//    / / /    \/_/  / / /   / / // / /         / / /   / / // / /__\/ /       / / /      
//   / / /          / / /   / / // / / ____    / / /   / / // / /_____/       / / /    _  
//  / / /________  / / /___/ / // /_/_/ ___/\ / / /___/ / // / /\ \ \         \ \ \__/\_\ 
// / / /_________\/ / /____\/ //_______/\__\// / /____\/ // / /  \ \ \         \ \___\/ / 
// \/____________/\/_________/ \_______\/    \/_________/ \/_/    \_\/          \/___/_/  
                                                                                       

pragma solidity >=0.7.0 <0.9.0;





contract Colorz is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  
  uint256 public cost = 0.07 ether;
  uint256 public maxSupply = 3700;
  uint256 public maxMintAmountPerTx = 10;
  uint256 public royalty = cost / 2;
  uint256 public royaltyCounter = 1;
  
  bool public paused = false;
  bool public revealed = false;

  address public shapezContract;
  
  bytes32 public freeMintMerkleRoot;

  mapping (address => bool) public adressesMintedFree;

  constructor() ERC721("COLORZ", "COLORZ") {
    setHiddenMetadataUri("https://evolutionz.mypinata.cloud/ipfs/Qma534fX2Uo4DJ3DfQpWMomr4KGByRezgpWrxtazPLy86r");
    setShapezContract(0x038BB7cD980A0803cb74F2fC9620981F846aE7b1);
    setFreeMintMerkleRoot(0xeeec3d571f72922f19f46be7c53551df289cb6ceeaba5910a50e51f93901e63c);

    _mintLoop(msg.sender, 85);    
  }

  modifier mintCompliance(uint256 _mintAmount) {
    if (msg.sender != owner()) {
     require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    }
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }


  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");

    IERC721 shapezToken = IERC721(shapezContract);
    address shapezTokenOwner;

    _mintLoop(msg.sender, _mintAmount);

    // pay royalty to Shapez token owner for each Colorz token mint
    if (royaltyCounter < 3501) {
      for (uint i = 0; i < _mintAmount; i++) {
        shapezTokenOwner = shapezToken.ownerOf(royaltyCounter);
        address payable _to = payable(shapezTokenOwner);
        (bool success, bytes memory data) = _to.call{value: royalty}("");
        require(success, "call failed");
        royaltyCounter++;
      }
    }
  }

  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

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

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw(uint256 _amount) public onlyOwner {
    (bool os, ) = payable(owner()).call{value: _amount }("");
    require(os);
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

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

    // free Mint function
  function freeMint (bytes32[] calldata _merkleProof) public payable mintCompliance(1) {
    address sender = msg.sender;
  
    require(!paused, "The contract is paused!");
    require(isValidFreeMint(_merkleProof), "Account is not whitelisted for free mint");
    require(adressesMintedFree[msg.sender] != true, "Account already received a free mint");

    _mintLoop(sender, 1);
    adressesMintedFree[msg.sender] = true;
  }


  // check if free mint wallet has is valid
  function isValidFreeMint(bytes32[] memory _merkleProof) public view returns (bool) {
        bytes32 freeLeaf = keccak256(abi.encodePacked(msg.sender));
         if (MerkleProof.verify( _merkleProof, freeMintMerkleRoot, freeLeaf)) {
           return true;
        }  else {
          return false;
        }
  }

  // sets the contract address to Roo Troop
  function setShapezContract(address _newAddress) public onlyOwner {
    shapezContract = _newAddress;
  }

  // sets new merkle Root for free Mint
  function setFreeMintMerkleRoot(bytes32 _newRoot) public onlyOwner {  
    freeMintMerkleRoot = _newRoot;
  }

  // receive fallback
  fallback() external payable {}
  receive () external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adressesMintedFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeMintMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isValidFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setFreeMintMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setShapezContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shapezContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260405180602001604052806000815250600890805190602001906200002b92919062000ac3565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200007992919062000ac3565b5066f8b0a10e470000600b55610e74600c55600a600d556002600b54620000a1919062000e21565b600e556001600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000ec57600080fd5b506040518060400160405280600681526020017f434f4c4f525a00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f434f4c4f525a000000000000000000000000000000000000000000000000000081525081600090805190602001906200017192919062000ac3565b5080600190805190602001906200018a92919062000ac3565b505050620001ad620001a16200024960201b60201c565b6200025160201b60201c565b620001d760405180608001604052806055815260200162006123605591396200031760201b60201c565b620001fc73038bb7cd980a0803cb74f2fc9620981f846ae7b1620003c260201b60201c565b620002307feeec3d571f72922f19f46be7c53551df289cb6ceeaba5910a50e51f93901e63c60001b6200049560201b60201c565b620002433360556200052e60201b60201c565b62001104565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003276200024960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200034d6200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039d9062000d75565b60405180910390fd5b80600a9080519060200190620003be92919062000ac3565b5050565b620003d26200024960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003f86200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004489062000d75565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620004a56200024960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004cb6200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051b9062000d75565b60405180910390fd5b8060118190555050565b60005b818110156200058f57620005516007620005be60201b6200255f1760201c565b62000579836200056d6007620005d460201b620025751760201c565b620005e260201b60201c565b8080620005869062000f2f565b91505062000531565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b620006048282604051806020016040528060008152506200060860201b60201c565b5050565b6200061a83836200067660201b60201c565b6200062f60008484846200087060201b60201c565b62000671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006689062000d0f565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e09062000d53565b60405180910390fd5b620006fa8162000a2a60201b60201c565b156200073d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007349062000d31565b60405180910390fd5b620007516000838362000a9660201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007a3919062000dc4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200086c6000838362000a9b60201b60201c565b5050565b60006200089e8473ffffffffffffffffffffffffffffffffffffffff1662000aa060201b620025831760201c565b1562000a1d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008d06200024960201b60201c565b8786866040518563ffffffff1660e01b8152600401620008f4949392919062000cbb565b602060405180830381600087803b1580156200090f57600080fd5b505af19250505080156200094357506040513d601f19601f8201168201806040525081019062000940919062000b8a565b60015b620009cc573d806000811462000976576040519150601f19603f3d011682016040523d82523d6000602084013e6200097b565b606091505b50600081511415620009c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bb9062000d0f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a22565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805462000ad19062000ef9565b90600052602060002090601f01602090048101928262000af5576000855562000b41565b82601f1062000b1057805160ff191683800117855562000b41565b8280016001018555821562000b41579182015b8281111562000b4057825182559160200191906001019062000b23565b5b50905062000b50919062000b54565b5090565b5b8082111562000b6f57600081600090555060010162000b55565b5090565b60008151905062000b8481620010ea565b92915050565b60006020828403121562000ba35762000ba26200100a565b5b600062000bb38482850162000b73565b91505092915050565b62000bc78162000e59565b82525050565b600062000bda8262000d97565b62000be6818562000da2565b935062000bf881856020860162000ec3565b62000c03816200100f565b840191505092915050565b600062000c1d60328362000db3565b915062000c2a8262001020565b604082019050919050565b600062000c44601c8362000db3565b915062000c51826200106f565b602082019050919050565b600062000c6b60208362000db3565b915062000c788262001098565b602082019050919050565b600062000c9260208362000db3565b915062000c9f82620010c1565b602082019050919050565b62000cb58162000eb9565b82525050565b600060808201905062000cd2600083018762000bbc565b62000ce1602083018662000bbc565b62000cf0604083018562000caa565b818103606083015262000d04818462000bcd565b905095945050505050565b6000602082019050818103600083015262000d2a8162000c0e565b9050919050565b6000602082019050818103600083015262000d4c8162000c35565b9050919050565b6000602082019050818103600083015262000d6e8162000c5c565b9050919050565b6000602082019050818103600083015262000d908162000c83565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000dd18262000eb9565b915062000dde8362000eb9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e165762000e1562000f7d565b5b828201905092915050565b600062000e2e8262000eb9565b915062000e3b8362000eb9565b92508262000e4e5762000e4d62000fac565b5b828204905092915050565b600062000e668262000e99565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000ee357808201518184015260208101905062000ec6565b8381111562000ef3576000848401525b50505050565b6000600282049050600182168062000f1257607f821691505b6020821081141562000f295762000f2862000fdb565b5b50919050565b600062000f3c8262000eb9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000f725762000f7162000f7d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620010f58162000e6d565b81146200110157600080fd5b50565b61500f80620011146000396000f3fe6080604052600436106102765760003560e01c806368963df01161014f578063a45ba8e7116100c1578063d5abeb011161007a578063d5abeb0114610950578063dde44b891461097b578063e0a80853146109a4578063e985e9c5146109cd578063efbd73f414610a0a578063f2fde38b14610a335761027d565b8063a45ba8e714610840578063a78bfec81461086b578063b071401b14610896578063b88d4fde146108bf578063bb115bc8146108e8578063c87b56dd146109135761027d565b806388d15d501161011357806388d15d501461075e5780638da5cb5b1461077a57806394354fd0146107a557806395d89b41146107d0578063a0712d68146107fb578063a22cb465146108175761027d565b806368963df0146106795780636917f0ce146106a457806370a08231146106e1578063715018a61461071e5780637ec4a659146107355761027d565b806329ee566c116101e85780634fdd43cb116101ac5780634fdd43cb1461056757806351830227146105905780635503a0e8146105bb5780635c975abb146105e657806362b99ad4146106115780636352211e1461063c5761027d565b806329ee566c146104845780632e1a7d4d146104af57806342842e0e146104d8578063438b63001461050157806344a0d68a1461053e5761027d565b806313faede61161023a57806313faede61461038a57806316ba10e0146103b557806316c38b3c146103de57806318160ddd146104075780631997d6c31461043257806323b872dd1461045b5761027d565b806301ffc9a71461027f578063065412f2146102bc57806306fdde03146102f9578063081812fc14610324578063095ea7b3146103615761027d565b3661027d57005b005b34801561028b57600080fd5b506102a660048036038101906102a191906139c5565b610a5c565b6040516102b39190614101565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de91906136e5565b610b3e565b6040516102f09190614101565b60405180910390f35b34801561030557600080fd5b5061030e610b5e565b60405161031b9190614137565b60405180910390f35b34801561033057600080fd5b5061034b60048036038101906103469190613a68565b610bf0565b6040516103589190614078565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613895565b610c75565b005b34801561039657600080fd5b5061039f610d8d565b6040516103ac9190614439565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190613a1f565b610d93565b005b3480156103ea57600080fd5b506104056004803603810190610400919061396b565b610e29565b005b34801561041357600080fd5b5061041c610ec2565b6040516104299190614439565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906136e5565b610ed3565b005b34801561046757600080fd5b50610482600480360381019061047d919061377f565b610f93565b005b34801561049057600080fd5b50610499610ff3565b6040516104a69190614439565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190613a68565b610ff9565b005b3480156104e457600080fd5b506104ff60048036038101906104fa919061377f565b6110f6565b005b34801561050d57600080fd5b50610528600480360381019061052391906136e5565b611116565b60405161053591906140df565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613a68565b611221565b005b34801561057357600080fd5b5061058e60048036038101906105899190613a1f565b6112a7565b005b34801561059c57600080fd5b506105a561133d565b6040516105b29190614101565b60405180910390f35b3480156105c757600080fd5b506105d0611350565b6040516105dd9190614137565b60405180910390f35b3480156105f257600080fd5b506105fb6113de565b6040516106089190614101565b60405180910390f35b34801561061d57600080fd5b506106266113f1565b6040516106339190614137565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613a68565b61147f565b6040516106709190614078565b60405180910390f35b34801561068557600080fd5b5061068e611531565b60405161069b919061411c565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613922565b611537565b6040516106d89190614101565b60405180910390f35b3480156106ed57600080fd5b50610708600480360381019061070391906136e5565b61158a565b6040516107159190614439565b60405180910390f35b34801561072a57600080fd5b50610733611642565b005b34801561074157600080fd5b5061075c60048036038101906107579190613a1f565b6116ca565b005b610778600480360381019061077391906138d5565b611760565b005b34801561078657600080fd5b5061078f611a22565b60405161079c9190614078565b60405180910390f35b3480156107b157600080fd5b506107ba611a4c565b6040516107c79190614439565b60405180910390f35b3480156107dc57600080fd5b506107e5611a52565b6040516107f29190614137565b60405180910390f35b61081560048036038101906108109190613a68565b611ae4565b005b34801561082357600080fd5b5061083e60048036038101906108399190613855565b611e2c565b005b34801561084c57600080fd5b50610855611e42565b6040516108629190614137565b60405180910390f35b34801561087757600080fd5b50610880611ed0565b60405161088d9190614078565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190613a68565b611ef6565b005b3480156108cb57600080fd5b506108e660048036038101906108e191906137d2565b611f7c565b005b3480156108f457600080fd5b506108fd611fde565b60405161090a9190614439565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613a68565b611fe4565b6040516109479190614137565b60405180910390f35b34801561095c57600080fd5b5061096561213d565b6040516109729190614439565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613998565b612143565b005b3480156109b057600080fd5b506109cb60048036038101906109c6919061396b565b6121c9565b005b3480156109d957600080fd5b506109f460048036038101906109ef919061373f565b612262565b604051610a019190614101565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c9190613a95565b6122f6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a5591906136e5565b612467565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b2757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b375750610b36826125a6565b5b9050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b606060008054610b6d90614778565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9990614778565b8015610be65780601f10610bbb57610100808354040283529160200191610be6565b820191906000526020600020905b815481529060010190602001808311610bc957829003601f168201915b5050505050905090565b6000610bfb82612610565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190614319565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c808261147f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce8906143b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d1061267c565b73ffffffffffffffffffffffffffffffffffffffff161480610d3f5750610d3e81610d3961267c565b612262565b5b610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590614259565b60405180910390fd5b610d888383612684565b505050565b600b5481565b610d9b61267c565b73ffffffffffffffffffffffffffffffffffffffff16610db9611a22565b73ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614339565b60405180910390fd5b8060099080519060200190610e259291906133db565b5050565b610e3161267c565b73ffffffffffffffffffffffffffffffffffffffff16610e4f611a22565b73ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90614339565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610ece6007612575565b905090565b610edb61267c565b73ffffffffffffffffffffffffffffffffffffffff16610ef9611a22565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690614339565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fa4610f9e61267c565b8261273d565b610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda906143f9565b60405180910390fd5b610fee83838361281b565b505050565b600e5481565b61100161267c565b73ffffffffffffffffffffffffffffffffffffffff1661101f611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614339565b60405180910390fd5b600061107f611a22565b73ffffffffffffffffffffffffffffffffffffffff16826040516110a290614063565b60006040518083038185875af1925050503d80600081146110df576040519150601f19603f3d011682016040523d82523d6000602084013e6110e4565b606091505b50509050806110f257600080fd5b5050565b61111183838360405180602001604052806000815250611f7c565b505050565b606060006111238361158a565b905060008167ffffffffffffffff81111561114157611140614935565b5b60405190808252806020026020018201604052801561116f5781602001602082028036833780820191505090505b50905060006001905060005b838110801561118c5750600c548211155b1561121557600061119c8361147f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120157828483815181106111e6576111e5614906565b5b60200260200101818152505081806111fd906147db565b9250505b828061120c906147db565b9350505061117b565b82945050505050919050565b61122961267c565b73ffffffffffffffffffffffffffffffffffffffff16611247611a22565b73ffffffffffffffffffffffffffffffffffffffff161461129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490614339565b60405180910390fd5b80600b8190555050565b6112af61267c565b73ffffffffffffffffffffffffffffffffffffffff166112cd611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90614339565b60405180910390fd5b80600a90805190602001906113399291906133db565b5050565b601060019054906101000a900460ff1681565b6009805461135d90614778565b80601f016020809104026020016040519081016040528092919081815260200182805461138990614778565b80156113d65780601f106113ab576101008083540402835291602001916113d6565b820191906000526020600020905b8154815290600101906020018083116113b957829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b600880546113fe90614778565b80601f016020809104026020016040519081016040528092919081815260200182805461142a90614778565b80156114775780601f1061144c57610100808354040283529160200191611477565b820191906000526020600020905b81548152906001019060200180831161145a57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614299565b60405180910390fd5b80915050919050565b60115481565b6000803360405160200161154b9190614017565b6040516020818303038152906040528051906020012090506115708360115483612a82565b1561157f576001915050611585565b60009150505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614279565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164a61267c565b73ffffffffffffffffffffffffffffffffffffffff16611668611a22565b73ffffffffffffffffffffffffffffffffffffffff16146116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614339565b60405180910390fd5b6116c86000612a99565b565b6116d261267c565b73ffffffffffffffffffffffffffffffffffffffff166116f0611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90614339565b60405180910390fd5b806008908051906020019061175c9291906133db565b5050565b600161176a611a22565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ee576000811180156117ae5750600d548111155b6117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906141d9565b60405180910390fd5b5b600c54816117fc6007612575565b61180691906145a3565b1115611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906143d9565b60405180910390fd5b6000339050601060009054906101000a900460ff161561189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614359565b60405180910390fd5b6118e6848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611537565b611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c906142f9565b60405180910390fd5b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906142b9565b60405180910390fd5b6119c4816001612b5f565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611a6190614778565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d90614778565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b5050505050905090565b80611aed611a22565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b7157600081118015611b315750600d548111155b611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906141d9565b60405180910390fd5b5b600c5481611b7f6007612575565b611b8991906145a3565b1115611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc1906143d9565b60405180910390fd5b601060009054906101000a900460ff1615611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190614359565b60405180910390fd5b81600b54611c28919061462a565b341015611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614419565b60405180910390fd5b6000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611c9d3385612b5f565b610dad600f541015611e265760005b84811015611e24578273ffffffffffffffffffffffffffffffffffffffff16636352211e600f546040518263ffffffff1660e01b8152600401611cef9190614439565b60206040518083038186803b158015611d0757600080fd5b505afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190613712565b915060008290506000808273ffffffffffffffffffffffffffffffffffffffff16600e54604051611d6f90614063565b60006040518083038185875af1925050503d8060008114611dac576040519150601f19603f3d011682016040523d82523d6000602084013e611db1565b606091505b509150915081611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded90614379565b60405180910390fd5b600f6000815480929190611e09906147db565b91905055505050508080611e1c906147db565b915050611cac565b505b50505050565b611e3e611e3761267c565b8383612b9f565b5050565b600a8054611e4f90614778565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7b90614778565b8015611ec85780601f10611e9d57610100808354040283529160200191611ec8565b820191906000526020600020905b815481529060010190602001808311611eab57829003601f168201915b505050505081565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611efe61267c565b73ffffffffffffffffffffffffffffffffffffffff16611f1c611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6990614339565b60405180910390fd5b80600d8190555050565b611f8d611f8761267c565b8361273d565b611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc3906143f9565b60405180910390fd5b611fd884848484612d0c565b50505050565b600f5481565b6060611fef82612610565b61202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614399565b60405180910390fd5b60001515601060019054906101000a900460ff16151514156120dc57600a805461205790614778565b80601f016020809104026020016040519081016040528092919081815260200182805461208390614778565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b50505050509050612138565b60006120e6612d68565b905060008151116121065760405180602001604052806000815250612134565b8061211084612dfa565b600960405160200161212493929190614032565b6040516020818303038152906040525b9150505b919050565b600c5481565b61214b61267c565b73ffffffffffffffffffffffffffffffffffffffff16612169611a22565b73ffffffffffffffffffffffffffffffffffffffff16146121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614339565b60405180910390fd5b8060118190555050565b6121d161267c565b73ffffffffffffffffffffffffffffffffffffffff166121ef611a22565b73ffffffffffffffffffffffffffffffffffffffff1614612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90614339565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816122ff611a22565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612383576000811180156123435750600d548111155b612382576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612379906141d9565b60405180910390fd5b5b600c54816123916007612575565b61239b91906145a3565b11156123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d3906143d9565b60405180910390fd5b6123e461267c565b73ffffffffffffffffffffffffffffffffffffffff16612402611a22565b73ffffffffffffffffffffffffffffffffffffffff1614612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614339565b60405180910390fd5b6124628284612b5f565b505050565b61246f61267c565b73ffffffffffffffffffffffffffffffffffffffff1661248d611a22565b73ffffffffffffffffffffffffffffffffffffffff16146124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614179565b60405180910390fd5b61255c81612a99565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126f78361147f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061274882612610565b612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e90614239565b60405180910390fd5b60006127928361147f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061280157508373ffffffffffffffffffffffffffffffffffffffff166127e984610bf0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061281257506128118185612262565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661283b8261147f565b73ffffffffffffffffffffffffffffffffffffffff1614612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614199565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f8906141f9565b60405180910390fd5b61290c838383612f5b565b612917600082612684565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129679190614684565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129be91906145a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a7d838383612f60565b505050565b600082612a8f8584612f65565b1490509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612b9a57612b74600761255f565b612b8783612b826007612575565b612fda565b8080612b92906147db565b915050612b62565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590614219565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cff9190614101565b60405180910390a3505050565b612d1784848461281b565b612d2384848484612ff8565b612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5990614159565b60405180910390fd5b50505050565b606060088054612d7790614778565b80601f0160208091040260200160405190810160405280929190818152602001828054612da390614778565b8015612df05780601f10612dc557610100808354040283529160200191612df0565b820191906000526020600020905b815481529060010190602001808311612dd357829003601f168201915b5050505050905090565b60606000821415612e42576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f56565b600082905060005b60008214612e74578080612e5d906147db565b915050600a82612e6d91906145f9565b9150612e4a565b60008167ffffffffffffffff811115612e9057612e8f614935565b5b6040519080825280601f01601f191660200182016040528015612ec25781602001600182028036833780820191505090505b5090505b60008514612f4f57600182612edb9190614684565b9150600a85612eea9190614848565b6030612ef691906145a3565b60f81b818381518110612f0c57612f0b614906565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f4891906145f9565b9450612ec6565b8093505050505b919050565b505050565b505050565b60008082905060005b8451811015612fcf576000858281518110612f8c57612f8b614906565b5b60200260200101519050808311612fae57612fa7838261318f565b9250612fbb565b612fb8818461318f565b92505b508080612fc7906147db565b915050612f6e565b508091505092915050565b612ff48282604051806020016040528060008152506131a6565b5050565b60006130198473ffffffffffffffffffffffffffffffffffffffff16612583565b15613182578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261304261267c565b8786866040518563ffffffff1660e01b81526004016130649493929190614093565b602060405180830381600087803b15801561307e57600080fd5b505af19250505080156130af57506040513d601f19601f820116820180604052508101906130ac91906139f2565b60015b613132573d80600081146130df576040519150601f19603f3d011682016040523d82523d6000602084013e6130e4565b606091505b5060008151141561312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190614159565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613187565b600190505b949350505050565b600082600052816020526040600020905092915050565b6131b08383613201565b6131bd6000848484612ff8565b6131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614159565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613268906142d9565b60405180910390fd5b61327a81612610565b156132ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b1906141b9565b60405180910390fd5b6132c660008383612f5b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461331691906145a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133d760008383612f60565b5050565b8280546133e790614778565b90600052602060002090601f0160209004810192826134095760008555613450565b82601f1061342257805160ff1916838001178555613450565b82800160010185558215613450579182015b8281111561344f578251825591602001919060010190613434565b5b50905061345d9190613461565b5090565b5b8082111561347a576000816000905550600101613462565b5090565b600061349161348c84614479565b614454565b905080838252602082019050828560208602820111156134b4576134b361496e565b5b60005b858110156134e457816134ca8882613635565b8452602084019350602083019250506001810190506134b7565b5050509392505050565b60006135016134fc846144a5565b614454565b90508281526020810184848401111561351d5761351c614973565b5b613528848285614736565b509392505050565b600061354361353e846144d6565b614454565b90508281526020810184848401111561355f5761355e614973565b5b61356a848285614736565b509392505050565b60008135905061358181614f66565b92915050565b60008151905061359681614f66565b92915050565b60008083601f8401126135b2576135b1614969565b5b8235905067ffffffffffffffff8111156135cf576135ce614964565b5b6020830191508360208202830111156135eb576135ea61496e565b5b9250929050565b600082601f83011261360757613606614969565b5b813561361784826020860161347e565b91505092915050565b60008135905061362f81614f7d565b92915050565b60008135905061364481614f94565b92915050565b60008135905061365981614fab565b92915050565b60008151905061366e81614fab565b92915050565b600082601f83011261368957613688614969565b5b81356136998482602086016134ee565b91505092915050565b600082601f8301126136b7576136b6614969565b5b81356136c7848260208601613530565b91505092915050565b6000813590506136df81614fc2565b92915050565b6000602082840312156136fb576136fa61497d565b5b600061370984828501613572565b91505092915050565b6000602082840312156137285761372761497d565b5b600061373684828501613587565b91505092915050565b600080604083850312156137565761375561497d565b5b600061376485828601613572565b925050602061377585828601613572565b9150509250929050565b6000806000606084860312156137985761379761497d565b5b60006137a686828701613572565b93505060206137b786828701613572565b92505060406137c8868287016136d0565b9150509250925092565b600080600080608085870312156137ec576137eb61497d565b5b60006137fa87828801613572565b945050602061380b87828801613572565b935050604061381c878288016136d0565b925050606085013567ffffffffffffffff81111561383d5761383c614978565b5b61384987828801613674565b91505092959194509250565b6000806040838503121561386c5761386b61497d565b5b600061387a85828601613572565b925050602061388b85828601613620565b9150509250929050565b600080604083850312156138ac576138ab61497d565b5b60006138ba85828601613572565b92505060206138cb858286016136d0565b9150509250929050565b600080602083850312156138ec576138eb61497d565b5b600083013567ffffffffffffffff81111561390a57613909614978565b5b6139168582860161359c565b92509250509250929050565b6000602082840312156139385761393761497d565b5b600082013567ffffffffffffffff81111561395657613955614978565b5b613962848285016135f2565b91505092915050565b6000602082840312156139815761398061497d565b5b600061398f84828501613620565b91505092915050565b6000602082840312156139ae576139ad61497d565b5b60006139bc84828501613635565b91505092915050565b6000602082840312156139db576139da61497d565b5b60006139e98482850161364a565b91505092915050565b600060208284031215613a0857613a0761497d565b5b6000613a168482850161365f565b91505092915050565b600060208284031215613a3557613a3461497d565b5b600082013567ffffffffffffffff811115613a5357613a52614978565b5b613a5f848285016136a2565b91505092915050565b600060208284031215613a7e57613a7d61497d565b5b6000613a8c848285016136d0565b91505092915050565b60008060408385031215613aac57613aab61497d565b5b6000613aba858286016136d0565b9250506020613acb85828601613572565b9150509250929050565b6000613ae18383613ff9565b60208301905092915050565b613af6816146b8565b82525050565b613b0d613b08826146b8565b614824565b82525050565b6000613b1e8261452c565b613b28818561455a565b9350613b3383614507565b8060005b83811015613b64578151613b4b8882613ad5565b9750613b568361454d565b925050600181019050613b37565b5085935050505092915050565b613b7a816146ca565b82525050565b613b89816146d6565b82525050565b6000613b9a82614537565b613ba4818561456b565b9350613bb4818560208601614745565b613bbd81614982565b840191505092915050565b6000613bd382614542565b613bdd8185614587565b9350613bed818560208601614745565b613bf681614982565b840191505092915050565b6000613c0c82614542565b613c168185614598565b9350613c26818560208601614745565b80840191505092915050565b60008154613c3f81614778565b613c498186614598565b94506001821660008114613c645760018114613c7557613ca8565b60ff19831686528186019350613ca8565b613c7e85614517565b60005b83811015613ca057815481890152600182019150602081019050613c81565b838801955050505b50505092915050565b6000613cbe603283614587565b9150613cc9826149a0565b604082019050919050565b6000613ce1602683614587565b9150613cec826149ef565b604082019050919050565b6000613d04602583614587565b9150613d0f82614a3e565b604082019050919050565b6000613d27601c83614587565b9150613d3282614a8d565b602082019050919050565b6000613d4a601483614587565b9150613d5582614ab6565b602082019050919050565b6000613d6d602483614587565b9150613d7882614adf565b604082019050919050565b6000613d90601983614587565b9150613d9b82614b2e565b602082019050919050565b6000613db3602c83614587565b9150613dbe82614b57565b604082019050919050565b6000613dd6603883614587565b9150613de182614ba6565b604082019050919050565b6000613df9602a83614587565b9150613e0482614bf5565b604082019050919050565b6000613e1c602983614587565b9150613e2782614c44565b604082019050919050565b6000613e3f602483614587565b9150613e4a82614c93565b604082019050919050565b6000613e62602083614587565b9150613e6d82614ce2565b602082019050919050565b6000613e85602883614587565b9150613e9082614d0b565b604082019050919050565b6000613ea8602c83614587565b9150613eb382614d5a565b604082019050919050565b6000613ecb602083614587565b9150613ed682614da9565b602082019050919050565b6000613eee601783614587565b9150613ef982614dd2565b602082019050919050565b6000613f11600b83614587565b9150613f1c82614dfb565b602082019050919050565b6000613f34602f83614587565b9150613f3f82614e24565b604082019050919050565b6000613f57602183614587565b9150613f6282614e73565b604082019050919050565b6000613f7a60008361457c565b9150613f8582614ec2565b600082019050919050565b6000613f9d601483614587565b9150613fa882614ec5565b602082019050919050565b6000613fc0603183614587565b9150613fcb82614eee565b604082019050919050565b6000613fe3601383614587565b9150613fee82614f3d565b602082019050919050565b6140028161472c565b82525050565b6140118161472c565b82525050565b60006140238284613afc565b60148201915081905092915050565b600061403e8286613c01565b915061404a8285613c01565b91506140568284613c32565b9150819050949350505050565b600061406e82613f6d565b9150819050919050565b600060208201905061408d6000830184613aed565b92915050565b60006080820190506140a86000830187613aed565b6140b56020830186613aed565b6140c26040830185614008565b81810360608301526140d48184613b8f565b905095945050505050565b600060208201905081810360008301526140f98184613b13565b905092915050565b60006020820190506141166000830184613b71565b92915050565b60006020820190506141316000830184613b80565b92915050565b600060208201905081810360008301526141518184613bc8565b905092915050565b6000602082019050818103600083015261417281613cb1565b9050919050565b6000602082019050818103600083015261419281613cd4565b9050919050565b600060208201905081810360008301526141b281613cf7565b9050919050565b600060208201905081810360008301526141d281613d1a565b9050919050565b600060208201905081810360008301526141f281613d3d565b9050919050565b6000602082019050818103600083015261421281613d60565b9050919050565b6000602082019050818103600083015261423281613d83565b9050919050565b6000602082019050818103600083015261425281613da6565b9050919050565b6000602082019050818103600083015261427281613dc9565b9050919050565b6000602082019050818103600083015261429281613dec565b9050919050565b600060208201905081810360008301526142b281613e0f565b9050919050565b600060208201905081810360008301526142d281613e32565b9050919050565b600060208201905081810360008301526142f281613e55565b9050919050565b6000602082019050818103600083015261431281613e78565b9050919050565b6000602082019050818103600083015261433281613e9b565b9050919050565b6000602082019050818103600083015261435281613ebe565b9050919050565b6000602082019050818103600083015261437281613ee1565b9050919050565b6000602082019050818103600083015261439281613f04565b9050919050565b600060208201905081810360008301526143b281613f27565b9050919050565b600060208201905081810360008301526143d281613f4a565b9050919050565b600060208201905081810360008301526143f281613f90565b9050919050565b6000602082019050818103600083015261441281613fb3565b9050919050565b6000602082019050818103600083015261443281613fd6565b9050919050565b600060208201905061444e6000830184614008565b92915050565b600061445e61446f565b905061446a82826147aa565b919050565b6000604051905090565b600067ffffffffffffffff82111561449457614493614935565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144c0576144bf614935565b5b6144c982614982565b9050602081019050919050565b600067ffffffffffffffff8211156144f1576144f0614935565b5b6144fa82614982565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145ae8261472c565b91506145b98361472c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145ee576145ed614879565b5b828201905092915050565b60006146048261472c565b915061460f8361472c565b92508261461f5761461e6148a8565b5b828204905092915050565b60006146358261472c565b91506146408361472c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561467957614678614879565b5b828202905092915050565b600061468f8261472c565b915061469a8361472c565b9250828210156146ad576146ac614879565b5b828203905092915050565b60006146c38261470c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614763578082015181840152602081019050614748565b83811115614772576000848401525b50505050565b6000600282049050600182168061479057607f821691505b602082108114156147a4576147a36148d7565b5b50919050565b6147b382614982565b810181811067ffffffffffffffff821117156147d2576147d1614935565b5b80604052505050565b60006147e68261472c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561481957614818614879565b5b600182019050919050565b600061482f82614836565b9050919050565b600061484182614993565b9050919050565b60006148538261472c565b915061485e8361472c565b92508261486e5761486d6148a8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420616c7265616479207265636569766564206120667265652060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4163636f756e74206973206e6f742077686974656c697374656420666f72206660008201527f726565206d696e74000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f63616c6c206661696c6564000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614f6f816146b8565b8114614f7a57600080fd5b50565b614f86816146ca565b8114614f9157600080fd5b50565b614f9d816146d6565b8114614fa857600080fd5b50565b614fb4816146e0565b8114614fbf57600080fd5b50565b614fcb8161472c565b8114614fd657600080fd5b5056fea26469706673582212209ac269b87a689c46d9f02abe7ea7a35eb8094ab2fcabf67367b2a015823d348764736f6c6343000807003368747470733a2f2f65766f6c7574696f6e7a2e6d7970696e6174612e636c6f75642f697066732f516d61353334665832556f34444a3344665170574d6f6d72344b47427952657a677057727874617a504c79383672

Deployed Bytecode

0x6080604052600436106102765760003560e01c806368963df01161014f578063a45ba8e7116100c1578063d5abeb011161007a578063d5abeb0114610950578063dde44b891461097b578063e0a80853146109a4578063e985e9c5146109cd578063efbd73f414610a0a578063f2fde38b14610a335761027d565b8063a45ba8e714610840578063a78bfec81461086b578063b071401b14610896578063b88d4fde146108bf578063bb115bc8146108e8578063c87b56dd146109135761027d565b806388d15d501161011357806388d15d501461075e5780638da5cb5b1461077a57806394354fd0146107a557806395d89b41146107d0578063a0712d68146107fb578063a22cb465146108175761027d565b806368963df0146106795780636917f0ce146106a457806370a08231146106e1578063715018a61461071e5780637ec4a659146107355761027d565b806329ee566c116101e85780634fdd43cb116101ac5780634fdd43cb1461056757806351830227146105905780635503a0e8146105bb5780635c975abb146105e657806362b99ad4146106115780636352211e1461063c5761027d565b806329ee566c146104845780632e1a7d4d146104af57806342842e0e146104d8578063438b63001461050157806344a0d68a1461053e5761027d565b806313faede61161023a57806313faede61461038a57806316ba10e0146103b557806316c38b3c146103de57806318160ddd146104075780631997d6c31461043257806323b872dd1461045b5761027d565b806301ffc9a71461027f578063065412f2146102bc57806306fdde03146102f9578063081812fc14610324578063095ea7b3146103615761027d565b3661027d57005b005b34801561028b57600080fd5b506102a660048036038101906102a191906139c5565b610a5c565b6040516102b39190614101565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de91906136e5565b610b3e565b6040516102f09190614101565b60405180910390f35b34801561030557600080fd5b5061030e610b5e565b60405161031b9190614137565b60405180910390f35b34801561033057600080fd5b5061034b60048036038101906103469190613a68565b610bf0565b6040516103589190614078565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613895565b610c75565b005b34801561039657600080fd5b5061039f610d8d565b6040516103ac9190614439565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190613a1f565b610d93565b005b3480156103ea57600080fd5b506104056004803603810190610400919061396b565b610e29565b005b34801561041357600080fd5b5061041c610ec2565b6040516104299190614439565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906136e5565b610ed3565b005b34801561046757600080fd5b50610482600480360381019061047d919061377f565b610f93565b005b34801561049057600080fd5b50610499610ff3565b6040516104a69190614439565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190613a68565b610ff9565b005b3480156104e457600080fd5b506104ff60048036038101906104fa919061377f565b6110f6565b005b34801561050d57600080fd5b50610528600480360381019061052391906136e5565b611116565b60405161053591906140df565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613a68565b611221565b005b34801561057357600080fd5b5061058e60048036038101906105899190613a1f565b6112a7565b005b34801561059c57600080fd5b506105a561133d565b6040516105b29190614101565b60405180910390f35b3480156105c757600080fd5b506105d0611350565b6040516105dd9190614137565b60405180910390f35b3480156105f257600080fd5b506105fb6113de565b6040516106089190614101565b60405180910390f35b34801561061d57600080fd5b506106266113f1565b6040516106339190614137565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613a68565b61147f565b6040516106709190614078565b60405180910390f35b34801561068557600080fd5b5061068e611531565b60405161069b919061411c565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613922565b611537565b6040516106d89190614101565b60405180910390f35b3480156106ed57600080fd5b50610708600480360381019061070391906136e5565b61158a565b6040516107159190614439565b60405180910390f35b34801561072a57600080fd5b50610733611642565b005b34801561074157600080fd5b5061075c60048036038101906107579190613a1f565b6116ca565b005b610778600480360381019061077391906138d5565b611760565b005b34801561078657600080fd5b5061078f611a22565b60405161079c9190614078565b60405180910390f35b3480156107b157600080fd5b506107ba611a4c565b6040516107c79190614439565b60405180910390f35b3480156107dc57600080fd5b506107e5611a52565b6040516107f29190614137565b60405180910390f35b61081560048036038101906108109190613a68565b611ae4565b005b34801561082357600080fd5b5061083e60048036038101906108399190613855565b611e2c565b005b34801561084c57600080fd5b50610855611e42565b6040516108629190614137565b60405180910390f35b34801561087757600080fd5b50610880611ed0565b60405161088d9190614078565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190613a68565b611ef6565b005b3480156108cb57600080fd5b506108e660048036038101906108e191906137d2565b611f7c565b005b3480156108f457600080fd5b506108fd611fde565b60405161090a9190614439565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613a68565b611fe4565b6040516109479190614137565b60405180910390f35b34801561095c57600080fd5b5061096561213d565b6040516109729190614439565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613998565b612143565b005b3480156109b057600080fd5b506109cb60048036038101906109c6919061396b565b6121c9565b005b3480156109d957600080fd5b506109f460048036038101906109ef919061373f565b612262565b604051610a019190614101565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c9190613a95565b6122f6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a5591906136e5565b612467565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b2757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b375750610b36826125a6565b5b9050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b606060008054610b6d90614778565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9990614778565b8015610be65780601f10610bbb57610100808354040283529160200191610be6565b820191906000526020600020905b815481529060010190602001808311610bc957829003601f168201915b5050505050905090565b6000610bfb82612610565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190614319565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c808261147f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce8906143b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d1061267c565b73ffffffffffffffffffffffffffffffffffffffff161480610d3f5750610d3e81610d3961267c565b612262565b5b610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590614259565b60405180910390fd5b610d888383612684565b505050565b600b5481565b610d9b61267c565b73ffffffffffffffffffffffffffffffffffffffff16610db9611a22565b73ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690614339565b60405180910390fd5b8060099080519060200190610e259291906133db565b5050565b610e3161267c565b73ffffffffffffffffffffffffffffffffffffffff16610e4f611a22565b73ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90614339565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610ece6007612575565b905090565b610edb61267c565b73ffffffffffffffffffffffffffffffffffffffff16610ef9611a22565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690614339565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fa4610f9e61267c565b8261273d565b610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda906143f9565b60405180910390fd5b610fee83838361281b565b505050565b600e5481565b61100161267c565b73ffffffffffffffffffffffffffffffffffffffff1661101f611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614339565b60405180910390fd5b600061107f611a22565b73ffffffffffffffffffffffffffffffffffffffff16826040516110a290614063565b60006040518083038185875af1925050503d80600081146110df576040519150601f19603f3d011682016040523d82523d6000602084013e6110e4565b606091505b50509050806110f257600080fd5b5050565b61111183838360405180602001604052806000815250611f7c565b505050565b606060006111238361158a565b905060008167ffffffffffffffff81111561114157611140614935565b5b60405190808252806020026020018201604052801561116f5781602001602082028036833780820191505090505b50905060006001905060005b838110801561118c5750600c548211155b1561121557600061119c8361147f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120157828483815181106111e6576111e5614906565b5b60200260200101818152505081806111fd906147db565b9250505b828061120c906147db565b9350505061117b565b82945050505050919050565b61122961267c565b73ffffffffffffffffffffffffffffffffffffffff16611247611a22565b73ffffffffffffffffffffffffffffffffffffffff161461129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490614339565b60405180910390fd5b80600b8190555050565b6112af61267c565b73ffffffffffffffffffffffffffffffffffffffff166112cd611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90614339565b60405180910390fd5b80600a90805190602001906113399291906133db565b5050565b601060019054906101000a900460ff1681565b6009805461135d90614778565b80601f016020809104026020016040519081016040528092919081815260200182805461138990614778565b80156113d65780601f106113ab576101008083540402835291602001916113d6565b820191906000526020600020905b8154815290600101906020018083116113b957829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b600880546113fe90614778565b80601f016020809104026020016040519081016040528092919081815260200182805461142a90614778565b80156114775780601f1061144c57610100808354040283529160200191611477565b820191906000526020600020905b81548152906001019060200180831161145a57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614299565b60405180910390fd5b80915050919050565b60115481565b6000803360405160200161154b9190614017565b6040516020818303038152906040528051906020012090506115708360115483612a82565b1561157f576001915050611585565b60009150505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614279565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164a61267c565b73ffffffffffffffffffffffffffffffffffffffff16611668611a22565b73ffffffffffffffffffffffffffffffffffffffff16146116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590614339565b60405180910390fd5b6116c86000612a99565b565b6116d261267c565b73ffffffffffffffffffffffffffffffffffffffff166116f0611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90614339565b60405180910390fd5b806008908051906020019061175c9291906133db565b5050565b600161176a611a22565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ee576000811180156117ae5750600d548111155b6117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906141d9565b60405180910390fd5b5b600c54816117fc6007612575565b61180691906145a3565b1115611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906143d9565b60405180910390fd5b6000339050601060009054906101000a900460ff161561189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189390614359565b60405180910390fd5b6118e6848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611537565b611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c906142f9565b60405180910390fd5b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906142b9565b60405180910390fd5b6119c4816001612b5f565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611a6190614778565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8d90614778565b8015611ada5780601f10611aaf57610100808354040283529160200191611ada565b820191906000526020600020905b815481529060010190602001808311611abd57829003601f168201915b5050505050905090565b80611aed611a22565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b7157600081118015611b315750600d548111155b611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906141d9565b60405180910390fd5b5b600c5481611b7f6007612575565b611b8991906145a3565b1115611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc1906143d9565b60405180910390fd5b601060009054906101000a900460ff1615611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190614359565b60405180910390fd5b81600b54611c28919061462a565b341015611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614419565b60405180910390fd5b6000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611c9d3385612b5f565b610dad600f541015611e265760005b84811015611e24578273ffffffffffffffffffffffffffffffffffffffff16636352211e600f546040518263ffffffff1660e01b8152600401611cef9190614439565b60206040518083038186803b158015611d0757600080fd5b505afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190613712565b915060008290506000808273ffffffffffffffffffffffffffffffffffffffff16600e54604051611d6f90614063565b60006040518083038185875af1925050503d8060008114611dac576040519150601f19603f3d011682016040523d82523d6000602084013e611db1565b606091505b509150915081611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded90614379565b60405180910390fd5b600f6000815480929190611e09906147db565b91905055505050508080611e1c906147db565b915050611cac565b505b50505050565b611e3e611e3761267c565b8383612b9f565b5050565b600a8054611e4f90614778565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7b90614778565b8015611ec85780601f10611e9d57610100808354040283529160200191611ec8565b820191906000526020600020905b815481529060010190602001808311611eab57829003601f168201915b505050505081565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611efe61267c565b73ffffffffffffffffffffffffffffffffffffffff16611f1c611a22565b73ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6990614339565b60405180910390fd5b80600d8190555050565b611f8d611f8761267c565b8361273d565b611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc3906143f9565b60405180910390fd5b611fd884848484612d0c565b50505050565b600f5481565b6060611fef82612610565b61202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614399565b60405180910390fd5b60001515601060019054906101000a900460ff16151514156120dc57600a805461205790614778565b80601f016020809104026020016040519081016040528092919081815260200182805461208390614778565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b50505050509050612138565b60006120e6612d68565b905060008151116121065760405180602001604052806000815250612134565b8061211084612dfa565b600960405160200161212493929190614032565b6040516020818303038152906040525b9150505b919050565b600c5481565b61214b61267c565b73ffffffffffffffffffffffffffffffffffffffff16612169611a22565b73ffffffffffffffffffffffffffffffffffffffff16146121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614339565b60405180910390fd5b8060118190555050565b6121d161267c565b73ffffffffffffffffffffffffffffffffffffffff166121ef611a22565b73ffffffffffffffffffffffffffffffffffffffff1614612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90614339565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816122ff611a22565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612383576000811180156123435750600d548111155b612382576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612379906141d9565b60405180910390fd5b5b600c54816123916007612575565b61239b91906145a3565b11156123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d3906143d9565b60405180910390fd5b6123e461267c565b73ffffffffffffffffffffffffffffffffffffffff16612402611a22565b73ffffffffffffffffffffffffffffffffffffffff1614612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614339565b60405180910390fd5b6124628284612b5f565b505050565b61246f61267c565b73ffffffffffffffffffffffffffffffffffffffff1661248d611a22565b73ffffffffffffffffffffffffffffffffffffffff16146124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614179565b60405180910390fd5b61255c81612a99565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126f78361147f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061274882612610565b612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e90614239565b60405180910390fd5b60006127928361147f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061280157508373ffffffffffffffffffffffffffffffffffffffff166127e984610bf0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061281257506128118185612262565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661283b8261147f565b73ffffffffffffffffffffffffffffffffffffffff1614612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614199565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f8906141f9565b60405180910390fd5b61290c838383612f5b565b612917600082612684565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129679190614684565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129be91906145a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a7d838383612f60565b505050565b600082612a8f8584612f65565b1490509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612b9a57612b74600761255f565b612b8783612b826007612575565b612fda565b8080612b92906147db565b915050612b62565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590614219565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cff9190614101565b60405180910390a3505050565b612d1784848461281b565b612d2384848484612ff8565b612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5990614159565b60405180910390fd5b50505050565b606060088054612d7790614778565b80601f0160208091040260200160405190810160405280929190818152602001828054612da390614778565b8015612df05780601f10612dc557610100808354040283529160200191612df0565b820191906000526020600020905b815481529060010190602001808311612dd357829003601f168201915b5050505050905090565b60606000821415612e42576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f56565b600082905060005b60008214612e74578080612e5d906147db565b915050600a82612e6d91906145f9565b9150612e4a565b60008167ffffffffffffffff811115612e9057612e8f614935565b5b6040519080825280601f01601f191660200182016040528015612ec25781602001600182028036833780820191505090505b5090505b60008514612f4f57600182612edb9190614684565b9150600a85612eea9190614848565b6030612ef691906145a3565b60f81b818381518110612f0c57612f0b614906565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f4891906145f9565b9450612ec6565b8093505050505b919050565b505050565b505050565b60008082905060005b8451811015612fcf576000858281518110612f8c57612f8b614906565b5b60200260200101519050808311612fae57612fa7838261318f565b9250612fbb565b612fb8818461318f565b92505b508080612fc7906147db565b915050612f6e565b508091505092915050565b612ff48282604051806020016040528060008152506131a6565b5050565b60006130198473ffffffffffffffffffffffffffffffffffffffff16612583565b15613182578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261304261267c565b8786866040518563ffffffff1660e01b81526004016130649493929190614093565b602060405180830381600087803b15801561307e57600080fd5b505af19250505080156130af57506040513d601f19601f820116820180604052508101906130ac91906139f2565b60015b613132573d80600081146130df576040519150601f19603f3d011682016040523d82523d6000602084013e6130e4565b606091505b5060008151141561312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190614159565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613187565b600190505b949350505050565b600082600052816020526040600020905092915050565b6131b08383613201565b6131bd6000848484612ff8565b6131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614159565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613268906142d9565b60405180910390fd5b61327a81612610565b156132ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b1906141b9565b60405180910390fd5b6132c660008383612f5b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461331691906145a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133d760008383612f60565b5050565b8280546133e790614778565b90600052602060002090601f0160209004810192826134095760008555613450565b82601f1061342257805160ff1916838001178555613450565b82800160010185558215613450579182015b8281111561344f578251825591602001919060010190613434565b5b50905061345d9190613461565b5090565b5b8082111561347a576000816000905550600101613462565b5090565b600061349161348c84614479565b614454565b905080838252602082019050828560208602820111156134b4576134b361496e565b5b60005b858110156134e457816134ca8882613635565b8452602084019350602083019250506001810190506134b7565b5050509392505050565b60006135016134fc846144a5565b614454565b90508281526020810184848401111561351d5761351c614973565b5b613528848285614736565b509392505050565b600061354361353e846144d6565b614454565b90508281526020810184848401111561355f5761355e614973565b5b61356a848285614736565b509392505050565b60008135905061358181614f66565b92915050565b60008151905061359681614f66565b92915050565b60008083601f8401126135b2576135b1614969565b5b8235905067ffffffffffffffff8111156135cf576135ce614964565b5b6020830191508360208202830111156135eb576135ea61496e565b5b9250929050565b600082601f83011261360757613606614969565b5b813561361784826020860161347e565b91505092915050565b60008135905061362f81614f7d565b92915050565b60008135905061364481614f94565b92915050565b60008135905061365981614fab565b92915050565b60008151905061366e81614fab565b92915050565b600082601f83011261368957613688614969565b5b81356136998482602086016134ee565b91505092915050565b600082601f8301126136b7576136b6614969565b5b81356136c7848260208601613530565b91505092915050565b6000813590506136df81614fc2565b92915050565b6000602082840312156136fb576136fa61497d565b5b600061370984828501613572565b91505092915050565b6000602082840312156137285761372761497d565b5b600061373684828501613587565b91505092915050565b600080604083850312156137565761375561497d565b5b600061376485828601613572565b925050602061377585828601613572565b9150509250929050565b6000806000606084860312156137985761379761497d565b5b60006137a686828701613572565b93505060206137b786828701613572565b92505060406137c8868287016136d0565b9150509250925092565b600080600080608085870312156137ec576137eb61497d565b5b60006137fa87828801613572565b945050602061380b87828801613572565b935050604061381c878288016136d0565b925050606085013567ffffffffffffffff81111561383d5761383c614978565b5b61384987828801613674565b91505092959194509250565b6000806040838503121561386c5761386b61497d565b5b600061387a85828601613572565b925050602061388b85828601613620565b9150509250929050565b600080604083850312156138ac576138ab61497d565b5b60006138ba85828601613572565b92505060206138cb858286016136d0565b9150509250929050565b600080602083850312156138ec576138eb61497d565b5b600083013567ffffffffffffffff81111561390a57613909614978565b5b6139168582860161359c565b92509250509250929050565b6000602082840312156139385761393761497d565b5b600082013567ffffffffffffffff81111561395657613955614978565b5b613962848285016135f2565b91505092915050565b6000602082840312156139815761398061497d565b5b600061398f84828501613620565b91505092915050565b6000602082840312156139ae576139ad61497d565b5b60006139bc84828501613635565b91505092915050565b6000602082840312156139db576139da61497d565b5b60006139e98482850161364a565b91505092915050565b600060208284031215613a0857613a0761497d565b5b6000613a168482850161365f565b91505092915050565b600060208284031215613a3557613a3461497d565b5b600082013567ffffffffffffffff811115613a5357613a52614978565b5b613a5f848285016136a2565b91505092915050565b600060208284031215613a7e57613a7d61497d565b5b6000613a8c848285016136d0565b91505092915050565b60008060408385031215613aac57613aab61497d565b5b6000613aba858286016136d0565b9250506020613acb85828601613572565b9150509250929050565b6000613ae18383613ff9565b60208301905092915050565b613af6816146b8565b82525050565b613b0d613b08826146b8565b614824565b82525050565b6000613b1e8261452c565b613b28818561455a565b9350613b3383614507565b8060005b83811015613b64578151613b4b8882613ad5565b9750613b568361454d565b925050600181019050613b37565b5085935050505092915050565b613b7a816146ca565b82525050565b613b89816146d6565b82525050565b6000613b9a82614537565b613ba4818561456b565b9350613bb4818560208601614745565b613bbd81614982565b840191505092915050565b6000613bd382614542565b613bdd8185614587565b9350613bed818560208601614745565b613bf681614982565b840191505092915050565b6000613c0c82614542565b613c168185614598565b9350613c26818560208601614745565b80840191505092915050565b60008154613c3f81614778565b613c498186614598565b94506001821660008114613c645760018114613c7557613ca8565b60ff19831686528186019350613ca8565b613c7e85614517565b60005b83811015613ca057815481890152600182019150602081019050613c81565b838801955050505b50505092915050565b6000613cbe603283614587565b9150613cc9826149a0565b604082019050919050565b6000613ce1602683614587565b9150613cec826149ef565b604082019050919050565b6000613d04602583614587565b9150613d0f82614a3e565b604082019050919050565b6000613d27601c83614587565b9150613d3282614a8d565b602082019050919050565b6000613d4a601483614587565b9150613d5582614ab6565b602082019050919050565b6000613d6d602483614587565b9150613d7882614adf565b604082019050919050565b6000613d90601983614587565b9150613d9b82614b2e565b602082019050919050565b6000613db3602c83614587565b9150613dbe82614b57565b604082019050919050565b6000613dd6603883614587565b9150613de182614ba6565b604082019050919050565b6000613df9602a83614587565b9150613e0482614bf5565b604082019050919050565b6000613e1c602983614587565b9150613e2782614c44565b604082019050919050565b6000613e3f602483614587565b9150613e4a82614c93565b604082019050919050565b6000613e62602083614587565b9150613e6d82614ce2565b602082019050919050565b6000613e85602883614587565b9150613e9082614d0b565b604082019050919050565b6000613ea8602c83614587565b9150613eb382614d5a565b604082019050919050565b6000613ecb602083614587565b9150613ed682614da9565b602082019050919050565b6000613eee601783614587565b9150613ef982614dd2565b602082019050919050565b6000613f11600b83614587565b9150613f1c82614dfb565b602082019050919050565b6000613f34602f83614587565b9150613f3f82614e24565b604082019050919050565b6000613f57602183614587565b9150613f6282614e73565b604082019050919050565b6000613f7a60008361457c565b9150613f8582614ec2565b600082019050919050565b6000613f9d601483614587565b9150613fa882614ec5565b602082019050919050565b6000613fc0603183614587565b9150613fcb82614eee565b604082019050919050565b6000613fe3601383614587565b9150613fee82614f3d565b602082019050919050565b6140028161472c565b82525050565b6140118161472c565b82525050565b60006140238284613afc565b60148201915081905092915050565b600061403e8286613c01565b915061404a8285613c01565b91506140568284613c32565b9150819050949350505050565b600061406e82613f6d565b9150819050919050565b600060208201905061408d6000830184613aed565b92915050565b60006080820190506140a86000830187613aed565b6140b56020830186613aed565b6140c26040830185614008565b81810360608301526140d48184613b8f565b905095945050505050565b600060208201905081810360008301526140f98184613b13565b905092915050565b60006020820190506141166000830184613b71565b92915050565b60006020820190506141316000830184613b80565b92915050565b600060208201905081810360008301526141518184613bc8565b905092915050565b6000602082019050818103600083015261417281613cb1565b9050919050565b6000602082019050818103600083015261419281613cd4565b9050919050565b600060208201905081810360008301526141b281613cf7565b9050919050565b600060208201905081810360008301526141d281613d1a565b9050919050565b600060208201905081810360008301526141f281613d3d565b9050919050565b6000602082019050818103600083015261421281613d60565b9050919050565b6000602082019050818103600083015261423281613d83565b9050919050565b6000602082019050818103600083015261425281613da6565b9050919050565b6000602082019050818103600083015261427281613dc9565b9050919050565b6000602082019050818103600083015261429281613dec565b9050919050565b600060208201905081810360008301526142b281613e0f565b9050919050565b600060208201905081810360008301526142d281613e32565b9050919050565b600060208201905081810360008301526142f281613e55565b9050919050565b6000602082019050818103600083015261431281613e78565b9050919050565b6000602082019050818103600083015261433281613e9b565b9050919050565b6000602082019050818103600083015261435281613ebe565b9050919050565b6000602082019050818103600083015261437281613ee1565b9050919050565b6000602082019050818103600083015261439281613f04565b9050919050565b600060208201905081810360008301526143b281613f27565b9050919050565b600060208201905081810360008301526143d281613f4a565b9050919050565b600060208201905081810360008301526143f281613f90565b9050919050565b6000602082019050818103600083015261441281613fb3565b9050919050565b6000602082019050818103600083015261443281613fd6565b9050919050565b600060208201905061444e6000830184614008565b92915050565b600061445e61446f565b905061446a82826147aa565b919050565b6000604051905090565b600067ffffffffffffffff82111561449457614493614935565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144c0576144bf614935565b5b6144c982614982565b9050602081019050919050565b600067ffffffffffffffff8211156144f1576144f0614935565b5b6144fa82614982565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145ae8261472c565b91506145b98361472c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145ee576145ed614879565b5b828201905092915050565b60006146048261472c565b915061460f8361472c565b92508261461f5761461e6148a8565b5b828204905092915050565b60006146358261472c565b91506146408361472c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561467957614678614879565b5b828202905092915050565b600061468f8261472c565b915061469a8361472c565b9250828210156146ad576146ac614879565b5b828203905092915050565b60006146c38261470c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614763578082015181840152602081019050614748565b83811115614772576000848401525b50505050565b6000600282049050600182168061479057607f821691505b602082108114156147a4576147a36148d7565b5b50919050565b6147b382614982565b810181811067ffffffffffffffff821117156147d2576147d1614935565b5b80604052505050565b60006147e68261472c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561481957614818614879565b5b600182019050919050565b600061482f82614836565b9050919050565b600061484182614993565b9050919050565b60006148538261472c565b915061485e8361472c565b92508261486e5761486d6148a8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420616c7265616479207265636569766564206120667265652060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4163636f756e74206973206e6f742077686974656c697374656420666f72206660008201527f726565206d696e74000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f63616c6c206661696c6564000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614f6f816146b8565b8114614f7a57600080fd5b50565b614f86816146ca565b8114614f9157600080fd5b50565b614f9d816146d6565b8114614fa857600080fd5b50565b614fb4816146e0565b8114614fbf57600080fd5b50565b614fcb8161472c565b8114614fd657600080fd5b5056fea26469706673582212209ac269b87a689c46d9f02abe7ea7a35eb8094ab2fcabf67367b2a015823d348764736f6c63430008070033

Deployed Bytecode Sourcemap

42259:5930:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27963:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42860:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28908:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30467:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29990:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42520:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46291:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46397:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43573:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47830:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31217:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42636:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46480:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31627:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44603:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45831:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46047:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42747:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42442:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42716:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42409:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28602:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42820:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47460:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28332:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8584:103;;;;;;;;;;;;;:::i;:::-;;46185:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46972:435;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7933:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42593:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29077:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43668:768;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30760:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42480:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42782:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45911:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31883:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42674:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45244:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42557:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47983:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45744:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30986:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44442:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8842:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27963:305;28065:4;28117:25;28102:40;;;:11;:40;;;;:105;;;;28174:33;28159:48;;;:11;:48;;;;28102:105;:158;;;;28224:36;28248:11;28224:23;:36::i;:::-;28102:158;28082:178;;27963:305;;;:::o;42860:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;28908:100::-;28962:13;28995:5;28988:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28908:100;:::o;30467:221::-;30543:7;30571:16;30579:7;30571;:16::i;:::-;30563:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30656:15;:24;30672:7;30656:24;;;;;;;;;;;;;;;;;;;;;30649:31;;30467:221;;;:::o;29990:411::-;30071:13;30087:23;30102:7;30087:14;:23::i;:::-;30071:39;;30135:5;30129:11;;:2;:11;;;;30121:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30229:5;30213:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30238:37;30255:5;30262:12;:10;:12::i;:::-;30238:16;:37::i;:::-;30213:62;30191:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30372:21;30381:2;30385:7;30372:8;:21::i;:::-;30060:341;29990:411;;:::o;42520:32::-;;;;:::o;46291:100::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46375:10:::1;46363:9;:22;;;;;;;;;;;;:::i;:::-;;46291:100:::0;:::o;46397:77::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46462:6:::1;46453;;:15;;;;;;;;;;;;;;;;;;46397:77:::0;:::o;43573:89::-;43617:7;43640:16;:6;:14;:16::i;:::-;43633:23;;43573:89;:::o;47830:106::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47919:11:::1;47902:14;;:28;;;;;;;;;;;;;;;;;;47830:106:::0;:::o;31217:339::-;31412:41;31431:12;:10;:12::i;:::-;31445:7;31412:18;:41::i;:::-;31404:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31520:28;31530:4;31536:2;31540:7;31520:9;:28::i;:::-;31217:339;;;:::o;42636:33::-;;;;:::o;46480:139::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46540:7:::1;46561;:5;:7::i;:::-;46553:21;;46582:7;46553:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46539:56;;;46610:2;46602:11;;;::::0;::::1;;46532:87;46480:139:::0;:::o;31627:185::-;31765:39;31782:4;31788:2;31792:7;31765:39;;;;;;;;;;;;:16;:39::i;:::-;31627:185;;;:::o;44603:635::-;44678:16;44706:23;44732:17;44742:6;44732:9;:17::i;:::-;44706:43;;44756:30;44803:15;44789:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44756:63;;44826:22;44851:1;44826:26;;44859:23;44895:309;44920:15;44902;:33;:64;;;;;44957:9;;44939:14;:27;;44902:64;44895:309;;;44977:25;45005:23;45013:14;45005:7;:23::i;:::-;44977:51;;45064:6;45043:27;;:17;:27;;;45039:131;;;45116:14;45083:13;45097:15;45083:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;45143:17;;;;;:::i;:::-;;;;45039:131;45180:16;;;;;:::i;:::-;;;;44968:236;44895:309;;;45219:13;45212:20;;;;;;44603:635;;;:::o;45831:74::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45894:5:::1;45887:4;:12;;;;45831:74:::0;:::o;46047:132::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46155:18:::1;46135:17;:38;;;;;;;;;;;;:::i;:::-;;46047:132:::0;:::o;42747:28::-;;;;;;;;;;;;;:::o;42442:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42716:26::-;;;;;;;;;;;;;:::o;42409:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28602:239::-;28674:7;28694:13;28710:7;:16;28718:7;28710:16;;;;;;;;;;;;;;;;;;;;;28694:32;;28762:1;28745:19;;:5;:19;;;;28737:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28828:5;28821:12;;;28602:239;;;:::o;42820:33::-;;;;:::o;47460:319::-;47537:4;47554:16;47600:10;47583:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;47573:39;;;;;;47554:58;;47628:63;47648:12;47662:18;;47682:8;47628:18;:63::i;:::-;47624:150;;;47714:4;47707:11;;;;;47624:150;47757:5;47750:12;;;47460:319;;;;:::o;28332:208::-;28404:7;28449:1;28432:19;;:5;:19;;;;28424:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28516:9;:16;28526:5;28516:16;;;;;;;;;;;;;;;;28509:23;;28332:208;;;:::o;8584:103::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8649:30:::1;8676:1;8649:18;:30::i;:::-;8584:103::o:0;46185:100::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46269:10:::1;46257:9;:22;;;;;;;;;;;;:::i;:::-;;46185:100:::0;:::o;46972:435::-;47054:1;43359:7;:5;:7::i;:::-;43345:21;;:10;:21;;;43341:128;;43398:1;43384:11;:15;:52;;;;;43418:18;;43403:11;:33;;43384:52;43376:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43341:128;43517:9;;43502:11;43483:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;43475:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;47064:14:::1;47081:10;47064:27;;47111:6;;;;;;;;;;;47110:7;47102:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47160:29;47176:12;;47160:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:29::i;:::-;47152:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;47283:4;47249:38;;:18;:30;47268:10;47249:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;47241:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47337:20;47347:6;47355:1;47337:9;:20::i;:::-;47397:4;47364:18;:30;47383:10;47364:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;47057:350;46972:435:::0;;;:::o;7933:87::-;7979:7;8006:6;;;;;;;;;;;7999:13;;7933:87;:::o;42593:38::-;;;;:::o;29077:104::-;29133:13;29166:7;29159:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29077:104;:::o;43668:768::-;43733:11;43359:7;:5;:7::i;:::-;43345:21;;:10;:21;;;43341:128;;43398:1;43384:11;:15;:52;;;;;43418:18;;43403:11;:33;;43384:52;43376:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43341:128;43517:9;;43502:11;43483:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;43475:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43762:6:::1;;;;;;;;;;;43761:7;43753:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;43831:11;43824:4;;:18;;;;:::i;:::-;43811:9;:31;;43803:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43875:19;43905:14;;;;;;;;;;;43875:45;;43927:24;43960:34;43970:10;43982:11;43960:9;:34::i;:::-;44093:4;44076:14;;:21;44072:359;;;44113:6;44108:316;44129:11;44125:1;:15;44108:316;;;44177:11;:19;;;44197:14;;44177:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44158:54;;44223:19;44253:16;44223:47;;44282:12;44296:17:::0;44317:3:::1;:8;;44333:7;;44317:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44281:64;;;;44364:7;44356:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;44398:14;;:16;;;;;;;;;:::i;:::-;;;;;;44147:277;;;44142:3;;;;;:::i;:::-;;;;44108:316;;;;44072:359;43746:690;;43668:768:::0;;:::o;30760:155::-;30855:52;30874:12;:10;:12::i;:::-;30888:8;30898;30855:18;:52::i;:::-;30760:155;;:::o;42480:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42782:29::-;;;;;;;;;;;;;:::o;45911:130::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46016:19:::1;45995:18;:40;;;;45911:130:::0;:::o;31883:328::-;32058:41;32077:12;:10;:12::i;:::-;32091:7;32058:18;:41::i;:::-;32050:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32164:39;32178:4;32184:2;32188:7;32197:5;32164:13;:39::i;:::-;31883:328;;;;:::o;42674:33::-;;;;:::o;45244:494::-;45343:13;45384:17;45392:8;45384:7;:17::i;:::-;45368:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;45491:5;45479:17;;:8;;;;;;;;;;;:17;;;45475:64;;;45514:17;45507:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45475:64;45547:28;45578:10;:8;:10::i;:::-;45547:41;;45633:1;45608:14;45602:28;:32;:130;;;;;;;;;;;;;;;;;45670:14;45686:19;:8;:17;:19::i;:::-;45707:9;45653:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45602:130;45595:137;;;45244:494;;;;:::o;42557:31::-;;;;:::o;47983:110::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48079:8:::1;48058:18;:29;;;;47983:110:::0;:::o;45744:81::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45813:6:::1;45802:8;;:17;;;;;;;;;;;;;;;;;;45744:81:::0;:::o;30986:164::-;31083:4;31107:18;:25;31126:5;31107:25;;;;;;;;;;;;;;;:35;31133:8;31107:35;;;;;;;;;;;;;;;;;;;;;;;;;31100:42;;30986:164;;;;:::o;44442:155::-;44528:11;43359:7;:5;:7::i;:::-;43345:21;;:10;:21;;;43341:128;;43398:1;43384:11;:15;:52;;;;;43418:18;;43403:11;:33;;43384:52;43376:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43341:128;43517:9;;43502:11;43483:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;43475:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8164:12:::1;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44558:33:::2;44568:9;44579:11;44558:9;:33::i;:::-;44442:155:::0;;;:::o;8842:201::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8951:1:::1;8931:22;;:8;:22;;;;8923:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9007:28;9026:8;9007:18;:28::i;:::-;8842:201:::0;:::o;3383:127::-;3490:1;3472:7;:14;;;:19;;;;;;;;;;;3383:127;:::o;3261:114::-;3326:7;3353;:14;;;3346:21;;3261:114;;;:::o;10634:326::-;10694:4;10951:1;10929:7;:19;;;:23;10922:30;;10634:326;;;:::o;20717:157::-;20802:4;20841:25;20826:40;;;:11;:40;;;;20819:47;;20717:157;;;:::o;33721:127::-;33786:4;33838:1;33810:30;;:7;:16;33818:7;33810:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33803:37;;33721:127;;;:::o;6657:98::-;6710:7;6737:10;6730:17;;6657:98;:::o;37867:174::-;37969:2;37942:15;:24;37958:7;37942:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38025:7;38021:2;37987:46;;37996:23;38011:7;37996:14;:23::i;:::-;37987:46;;;;;;;;;;;;37867:174;;:::o;34015:348::-;34108:4;34133:16;34141:7;34133;:16::i;:::-;34125:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34209:13;34225:23;34240:7;34225:14;:23::i;:::-;34209:39;;34278:5;34267:16;;:7;:16;;;:51;;;;34311:7;34287:31;;:20;34299:7;34287:11;:20::i;:::-;:31;;;34267:51;:87;;;;34322:32;34339:5;34346:7;34322:16;:32::i;:::-;34267:87;34259:96;;;34015:348;;;;:::o;37124:625::-;37283:4;37256:31;;:23;37271:7;37256:14;:23::i;:::-;:31;;;37248:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37362:1;37348:16;;:2;:16;;;;37340:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37418:39;37439:4;37445:2;37449:7;37418:20;:39::i;:::-;37522:29;37539:1;37543:7;37522:8;:29::i;:::-;37583:1;37564:9;:15;37574:4;37564:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37612:1;37595:9;:13;37605:2;37595:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37643:2;37624:7;:16;37632:7;37624:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37682:7;37678:2;37663:27;;37672:4;37663:27;;;;;;;;;;;;37703:38;37723:4;37729:2;37733:7;37703:19;:38::i;:::-;37124:625;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;9203:191::-;9277:16;9296:6;;;;;;;;;;;9277:25;;9322:8;9313:6;;:17;;;;;;;;;;;;;;;;;;9377:8;9346:40;;9367:8;9346:40;;;;;;;;;;;;9266:128;9203:191;:::o;46625:204::-;46705:9;46700:124;46724:11;46720:1;:15;46700:124;;;46751:18;:6;:16;:18::i;:::-;46778:38;46788:9;46799:16;:6;:14;:16::i;:::-;46778:9;:38::i;:::-;46737:3;;;;;:::i;:::-;;;;46700:124;;;;46625:204;;:::o;38183:315::-;38338:8;38329:17;;:5;:17;;;;38321:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38425:8;38387:18;:25;38406:5;38387:25;;;;;;;;;;;;;;;:35;38413:8;38387:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38471:8;38449:41;;38464:5;38449:41;;;38481:8;38449:41;;;;;;:::i;:::-;;;;;;;;38183:315;;;:::o;33093:::-;33250:28;33260:4;33266:2;33270:7;33250:9;:28::i;:::-;33297:48;33320:4;33326:2;33330:7;33339:5;33297:22;:48::i;:::-;33289:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33093:315;;;;:::o;46835:104::-;46895:13;46924:9;46917:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46835:104;:::o;4219:723::-;4275:13;4505:1;4496:5;:10;4492:53;;;4523:10;;;;;;;;;;;;;;;;;;;;;4492:53;4555:12;4570:5;4555:20;;4586:14;4611:78;4626:1;4618:4;:9;4611:78;;4644:8;;;;;:::i;:::-;;;;4675:2;4667:10;;;;;:::i;:::-;;;4611:78;;;4699:19;4731:6;4721:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4699:39;;4749:154;4765:1;4756:5;:10;4749:154;;4793:1;4783:11;;;;;:::i;:::-;;;4860:2;4852:5;:10;;;;:::i;:::-;4839:2;:24;;;;:::i;:::-;4826:39;;4809:6;4816;4809:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4889:2;4880:11;;;;;:::i;:::-;;;4749:154;;;4927:6;4913:21;;;;;4219:723;;;;:::o;40434:126::-;;;;:::o;40945:125::-;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;34705:110::-;34781:26;34791:2;34795:7;34781:26;;;;;;;;;;;;:9;:26::i;:::-;34705:110;;:::o;39063:799::-;39218:4;39239:15;:2;:13;;;:15::i;:::-;39235:620;;;39291:2;39275:36;;;39312:12;:10;:12::i;:::-;39326:4;39332:7;39341:5;39275:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39271:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39534:1;39517:6;:13;:18;39513:272;;;39560:60;;;;;;;;;;:::i;:::-;;;;;;;;39513:272;39735:6;39729:13;39720:6;39716:2;39712:15;39705:38;39271:529;39408:41;;;39398:51;;;:6;:51;;;;39391:58;;;;;39235:620;39839:4;39832:11;;39063:799;;;;;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;35042:321::-;35172:18;35178:2;35182:7;35172:5;:18::i;:::-;35223:54;35254:1;35258:2;35262:7;35271:5;35223:22;:54::i;:::-;35201:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35042:321;;;:::o;35699:439::-;35793:1;35779:16;;:2;:16;;;;35771:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35852:16;35860:7;35852;:16::i;:::-;35851:17;35843:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35914:45;35943:1;35947:2;35951:7;35914:20;:45::i;:::-;35989:1;35972:9;:13;35982:2;35972:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36020:2;36001:7;:16;36009:7;36001:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36065:7;36061:2;36040:33;;36057:1;36040:33;;;;;;;;;;;;36086:44;36114:1;36118:2;36122:7;36086:19;:44::i;:::-;35699:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:568::-;1970:8;1980:6;2030:3;2023:4;2015:6;2011:17;2007:27;1997:122;;2038:79;;:::i;:::-;1997:122;2151:6;2138:20;2128:30;;2181:18;2173:6;2170:30;2167:117;;;2203:79;;:::i;:::-;2167:117;2317:4;2309:6;2305:17;2293:29;;2371:3;2363:4;2355:6;2351:17;2341:8;2337:32;2334:41;2331:128;;;2378:79;;:::i;:::-;2331:128;1897:568;;;;;:::o;2488:370::-;2559:5;2608:3;2601:4;2593:6;2589:17;2585:27;2575:122;;2616:79;;:::i;:::-;2575:122;2733:6;2720:20;2758:94;2848:3;2840:6;2833:4;2825:6;2821:17;2758:94;:::i;:::-;2749:103;;2565:293;2488:370;;;;:::o;2864:133::-;2907:5;2945:6;2932:20;2923:29;;2961:30;2985:5;2961:30;:::i;:::-;2864:133;;;;:::o;3003:139::-;3049:5;3087:6;3074:20;3065:29;;3103:33;3130:5;3103:33;:::i;:::-;3003:139;;;;:::o;3148:137::-;3193:5;3231:6;3218:20;3209:29;;3247:32;3273:5;3247:32;:::i;:::-;3148:137;;;;:::o;3291:141::-;3347:5;3378:6;3372:13;3363:22;;3394:32;3420:5;3394:32;:::i;:::-;3291:141;;;;:::o;3451:338::-;3506:5;3555:3;3548:4;3540:6;3536:17;3532:27;3522:122;;3563:79;;:::i;:::-;3522:122;3680:6;3667:20;3705:78;3779:3;3771:6;3764:4;3756:6;3752:17;3705:78;:::i;:::-;3696:87;;3512:277;3451:338;;;;:::o;3809:340::-;3865:5;3914:3;3907:4;3899:6;3895:17;3891:27;3881:122;;3922:79;;:::i;:::-;3881:122;4039:6;4026:20;4064:79;4139:3;4131:6;4124:4;4116:6;4112:17;4064:79;:::i;:::-;4055:88;;3871:278;3809:340;;;;:::o;4155:139::-;4201:5;4239:6;4226:20;4217:29;;4255:33;4282:5;4255:33;:::i;:::-;4155:139;;;;:::o;4300:329::-;4359:6;4408:2;4396:9;4387:7;4383:23;4379:32;4376:119;;;4414:79;;:::i;:::-;4376:119;4534:1;4559:53;4604:7;4595:6;4584:9;4580:22;4559:53;:::i;:::-;4549:63;;4505:117;4300:329;;;;:::o;4635:351::-;4705:6;4754:2;4742:9;4733:7;4729:23;4725:32;4722:119;;;4760:79;;:::i;:::-;4722:119;4880:1;4905:64;4961:7;4952:6;4941:9;4937:22;4905:64;:::i;:::-;4895:74;;4851:128;4635:351;;;;:::o;4992:474::-;5060:6;5068;5117:2;5105:9;5096:7;5092:23;5088:32;5085:119;;;5123:79;;:::i;:::-;5085:119;5243:1;5268:53;5313:7;5304:6;5293:9;5289:22;5268:53;:::i;:::-;5258:63;;5214:117;5370:2;5396:53;5441:7;5432:6;5421:9;5417:22;5396:53;:::i;:::-;5386:63;;5341:118;4992:474;;;;;:::o;5472:619::-;5549:6;5557;5565;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5867:2;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5838:118;5995:2;6021:53;6066:7;6057:6;6046:9;6042:22;6021:53;:::i;:::-;6011:63;;5966:118;5472:619;;;;;:::o;6097:943::-;6192:6;6200;6208;6216;6265:3;6253:9;6244:7;6240:23;6236:33;6233:120;;;6272:79;;:::i;:::-;6233:120;6392:1;6417:53;6462:7;6453:6;6442:9;6438:22;6417:53;:::i;:::-;6407:63;;6363:117;6519:2;6545:53;6590:7;6581:6;6570:9;6566:22;6545:53;:::i;:::-;6535:63;;6490:118;6647:2;6673:53;6718:7;6709:6;6698:9;6694:22;6673:53;:::i;:::-;6663:63;;6618:118;6803:2;6792:9;6788:18;6775:32;6834:18;6826:6;6823:30;6820:117;;;6856:79;;:::i;:::-;6820:117;6961:62;7015:7;7006:6;6995:9;6991:22;6961:62;:::i;:::-;6951:72;;6746:287;6097:943;;;;;;;:::o;7046:468::-;7111:6;7119;7168:2;7156:9;7147:7;7143:23;7139:32;7136:119;;;7174:79;;:::i;:::-;7136:119;7294:1;7319:53;7364:7;7355:6;7344:9;7340:22;7319:53;:::i;:::-;7309:63;;7265:117;7421:2;7447:50;7489:7;7480:6;7469:9;7465:22;7447:50;:::i;:::-;7437:60;;7392:115;7046:468;;;;;:::o;7520:474::-;7588:6;7596;7645:2;7633:9;7624:7;7620:23;7616:32;7613:119;;;7651:79;;:::i;:::-;7613:119;7771:1;7796:53;7841:7;7832:6;7821:9;7817:22;7796:53;:::i;:::-;7786:63;;7742:117;7898:2;7924:53;7969:7;7960:6;7949:9;7945:22;7924:53;:::i;:::-;7914:63;;7869:118;7520:474;;;;;:::o;8000:559::-;8086:6;8094;8143:2;8131:9;8122:7;8118:23;8114:32;8111:119;;;8149:79;;:::i;:::-;8111:119;8297:1;8286:9;8282:17;8269:31;8327:18;8319:6;8316:30;8313:117;;;8349:79;;:::i;:::-;8313:117;8462:80;8534:7;8525:6;8514:9;8510:22;8462:80;:::i;:::-;8444:98;;;;8240:312;8000:559;;;;;:::o;8565:539::-;8649:6;8698:2;8686:9;8677:7;8673:23;8669:32;8666:119;;;8704:79;;:::i;:::-;8666:119;8852:1;8841:9;8837:17;8824:31;8882:18;8874:6;8871:30;8868:117;;;8904:79;;:::i;:::-;8868:117;9009:78;9079:7;9070:6;9059:9;9055:22;9009:78;:::i;:::-;8999:88;;8795:302;8565:539;;;;:::o;9110:323::-;9166:6;9215:2;9203:9;9194:7;9190:23;9186:32;9183:119;;;9221:79;;:::i;:::-;9183:119;9341:1;9366:50;9408:7;9399:6;9388:9;9384:22;9366:50;:::i;:::-;9356:60;;9312:114;9110:323;;;;:::o;9439:329::-;9498:6;9547:2;9535:9;9526:7;9522:23;9518:32;9515:119;;;9553:79;;:::i;:::-;9515:119;9673:1;9698:53;9743:7;9734:6;9723:9;9719:22;9698:53;:::i;:::-;9688:63;;9644:117;9439:329;;;;:::o;9774:327::-;9832:6;9881:2;9869:9;9860:7;9856:23;9852:32;9849:119;;;9887:79;;:::i;:::-;9849:119;10007:1;10032:52;10076:7;10067:6;10056:9;10052:22;10032:52;:::i;:::-;10022:62;;9978:116;9774:327;;;;:::o;10107:349::-;10176:6;10225:2;10213:9;10204:7;10200:23;10196:32;10193:119;;;10231:79;;:::i;:::-;10193:119;10351:1;10376:63;10431:7;10422:6;10411:9;10407:22;10376:63;:::i;:::-;10366:73;;10322:127;10107:349;;;;:::o;10462:509::-;10531:6;10580:2;10568:9;10559:7;10555:23;10551:32;10548:119;;;10586:79;;:::i;:::-;10548:119;10734:1;10723:9;10719:17;10706:31;10764:18;10756:6;10753:30;10750:117;;;10786:79;;:::i;:::-;10750:117;10891:63;10946:7;10937:6;10926:9;10922:22;10891:63;:::i;:::-;10881:73;;10677:287;10462:509;;;;:::o;10977:329::-;11036:6;11085:2;11073:9;11064:7;11060:23;11056:32;11053:119;;;11091:79;;:::i;:::-;11053:119;11211:1;11236:53;11281:7;11272:6;11261:9;11257:22;11236:53;:::i;:::-;11226:63;;11182:117;10977:329;;;;:::o;11312:474::-;11380:6;11388;11437:2;11425:9;11416:7;11412:23;11408:32;11405:119;;;11443:79;;:::i;:::-;11405:119;11563:1;11588:53;11633:7;11624:6;11613:9;11609:22;11588:53;:::i;:::-;11578:63;;11534:117;11690:2;11716:53;11761:7;11752:6;11741:9;11737:22;11716:53;:::i;:::-;11706:63;;11661:118;11312:474;;;;;:::o;11792:179::-;11861:10;11882:46;11924:3;11916:6;11882:46;:::i;:::-;11960:4;11955:3;11951:14;11937:28;;11792:179;;;;:::o;11977:118::-;12064:24;12082:5;12064:24;:::i;:::-;12059:3;12052:37;11977:118;;:::o;12101:157::-;12206:45;12226:24;12244:5;12226:24;:::i;:::-;12206:45;:::i;:::-;12201:3;12194:58;12101:157;;:::o;12294:732::-;12413:3;12442:54;12490:5;12442:54;:::i;:::-;12512:86;12591:6;12586:3;12512:86;:::i;:::-;12505:93;;12622:56;12672:5;12622:56;:::i;:::-;12701:7;12732:1;12717:284;12742:6;12739:1;12736:13;12717:284;;;12818:6;12812:13;12845:63;12904:3;12889:13;12845:63;:::i;:::-;12838:70;;12931:60;12984:6;12931:60;:::i;:::-;12921:70;;12777:224;12764:1;12761;12757:9;12752:14;;12717:284;;;12721:14;13017:3;13010:10;;12418:608;;;12294:732;;;;:::o;13032:109::-;13113:21;13128:5;13113:21;:::i;:::-;13108:3;13101:34;13032:109;;:::o;13147:118::-;13234:24;13252:5;13234:24;:::i;:::-;13229:3;13222:37;13147:118;;:::o;13271:360::-;13357:3;13385:38;13417:5;13385:38;:::i;:::-;13439:70;13502:6;13497:3;13439:70;:::i;:::-;13432:77;;13518:52;13563:6;13558:3;13551:4;13544:5;13540:16;13518:52;:::i;:::-;13595:29;13617:6;13595:29;:::i;:::-;13590:3;13586:39;13579:46;;13361:270;13271:360;;;;:::o;13637:364::-;13725:3;13753:39;13786:5;13753:39;:::i;:::-;13808:71;13872:6;13867:3;13808:71;:::i;:::-;13801:78;;13888:52;13933:6;13928:3;13921:4;13914:5;13910:16;13888:52;:::i;:::-;13965:29;13987:6;13965:29;:::i;:::-;13960:3;13956:39;13949:46;;13729:272;13637:364;;;;:::o;14007:377::-;14113:3;14141:39;14174:5;14141:39;:::i;:::-;14196:89;14278:6;14273:3;14196:89;:::i;:::-;14189:96;;14294:52;14339:6;14334:3;14327:4;14320:5;14316:16;14294:52;:::i;:::-;14371:6;14366:3;14362:16;14355:23;;14117:267;14007:377;;;;:::o;14414:845::-;14517:3;14554:5;14548:12;14583:36;14609:9;14583:36;:::i;:::-;14635:89;14717:6;14712:3;14635:89;:::i;:::-;14628:96;;14755:1;14744:9;14740:17;14771:1;14766:137;;;;14917:1;14912:341;;;;14733:520;;14766:137;14850:4;14846:9;14835;14831:25;14826:3;14819:38;14886:6;14881:3;14877:16;14870:23;;14766:137;;14912:341;14979:38;15011:5;14979:38;:::i;:::-;15039:1;15053:154;15067:6;15064:1;15061:13;15053:154;;;15141:7;15135:14;15131:1;15126:3;15122:11;15115:35;15191:1;15182:7;15178:15;15167:26;;15089:4;15086:1;15082:12;15077:17;;15053:154;;;15236:6;15231:3;15227:16;15220:23;;14919:334;;14733:520;;14521:738;;14414:845;;;;:::o;15265:366::-;15407:3;15428:67;15492:2;15487:3;15428:67;:::i;:::-;15421:74;;15504:93;15593:3;15504:93;:::i;:::-;15622:2;15617:3;15613:12;15606:19;;15265:366;;;:::o;15637:::-;15779:3;15800:67;15864:2;15859:3;15800:67;:::i;:::-;15793:74;;15876:93;15965:3;15876:93;:::i;:::-;15994:2;15989:3;15985:12;15978:19;;15637:366;;;:::o;16009:::-;16151:3;16172:67;16236:2;16231:3;16172:67;:::i;:::-;16165:74;;16248:93;16337:3;16248:93;:::i;:::-;16366:2;16361:3;16357:12;16350:19;;16009:366;;;:::o;16381:::-;16523:3;16544:67;16608:2;16603:3;16544:67;:::i;:::-;16537:74;;16620:93;16709:3;16620:93;:::i;:::-;16738:2;16733:3;16729:12;16722:19;;16381:366;;;:::o;16753:::-;16895:3;16916:67;16980:2;16975:3;16916:67;:::i;:::-;16909:74;;16992:93;17081:3;16992:93;:::i;:::-;17110:2;17105:3;17101:12;17094:19;;16753:366;;;:::o;17125:::-;17267:3;17288:67;17352:2;17347:3;17288:67;:::i;:::-;17281:74;;17364:93;17453:3;17364:93;:::i;:::-;17482:2;17477:3;17473:12;17466:19;;17125:366;;;:::o;17497:::-;17639:3;17660:67;17724:2;17719:3;17660:67;:::i;:::-;17653:74;;17736:93;17825:3;17736:93;:::i;:::-;17854:2;17849:3;17845:12;17838:19;;17497:366;;;:::o;17869:::-;18011:3;18032:67;18096:2;18091:3;18032:67;:::i;:::-;18025:74;;18108:93;18197:3;18108:93;:::i;:::-;18226:2;18221:3;18217:12;18210:19;;17869:366;;;:::o;18241:::-;18383:3;18404:67;18468:2;18463:3;18404:67;:::i;:::-;18397:74;;18480:93;18569:3;18480:93;:::i;:::-;18598:2;18593:3;18589:12;18582:19;;18241:366;;;:::o;18613:::-;18755:3;18776:67;18840:2;18835:3;18776:67;:::i;:::-;18769:74;;18852:93;18941:3;18852:93;:::i;:::-;18970:2;18965:3;18961:12;18954:19;;18613:366;;;:::o;18985:::-;19127:3;19148:67;19212:2;19207:3;19148:67;:::i;:::-;19141:74;;19224:93;19313:3;19224:93;:::i;:::-;19342:2;19337:3;19333:12;19326:19;;18985:366;;;:::o;19357:::-;19499:3;19520:67;19584:2;19579:3;19520:67;:::i;:::-;19513:74;;19596:93;19685:3;19596:93;:::i;:::-;19714:2;19709:3;19705:12;19698:19;;19357:366;;;:::o;19729:::-;19871:3;19892:67;19956:2;19951:3;19892:67;:::i;:::-;19885:74;;19968:93;20057:3;19968:93;:::i;:::-;20086:2;20081:3;20077:12;20070:19;;19729:366;;;:::o;20101:::-;20243:3;20264:67;20328:2;20323:3;20264:67;:::i;:::-;20257:74;;20340:93;20429:3;20340:93;:::i;:::-;20458:2;20453:3;20449:12;20442:19;;20101:366;;;:::o;20473:::-;20615:3;20636:67;20700:2;20695:3;20636:67;:::i;:::-;20629:74;;20712:93;20801:3;20712:93;:::i;:::-;20830:2;20825:3;20821:12;20814:19;;20473:366;;;:::o;20845:::-;20987:3;21008:67;21072:2;21067:3;21008:67;:::i;:::-;21001:74;;21084:93;21173:3;21084:93;:::i;:::-;21202:2;21197:3;21193:12;21186:19;;20845:366;;;:::o;21217:::-;21359:3;21380:67;21444:2;21439:3;21380:67;:::i;:::-;21373:74;;21456:93;21545:3;21456:93;:::i;:::-;21574:2;21569:3;21565:12;21558:19;;21217:366;;;:::o;21589:::-;21731:3;21752:67;21816:2;21811:3;21752:67;:::i;:::-;21745:74;;21828:93;21917:3;21828:93;:::i;:::-;21946:2;21941:3;21937:12;21930:19;;21589:366;;;:::o;21961:::-;22103:3;22124:67;22188:2;22183:3;22124:67;:::i;:::-;22117:74;;22200:93;22289:3;22200:93;:::i;:::-;22318:2;22313:3;22309:12;22302:19;;21961:366;;;:::o;22333:::-;22475:3;22496:67;22560:2;22555:3;22496:67;:::i;:::-;22489:74;;22572:93;22661:3;22572:93;:::i;:::-;22690:2;22685:3;22681:12;22674:19;;22333:366;;;:::o;22705:398::-;22864:3;22885:83;22966:1;22961:3;22885:83;:::i;:::-;22878:90;;22977:93;23066:3;22977:93;:::i;:::-;23095:1;23090:3;23086:11;23079:18;;22705:398;;;:::o;23109:366::-;23251:3;23272:67;23336:2;23331:3;23272:67;:::i;:::-;23265:74;;23348:93;23437:3;23348:93;:::i;:::-;23466:2;23461:3;23457:12;23450:19;;23109:366;;;:::o;23481:::-;23623:3;23644:67;23708:2;23703:3;23644:67;:::i;:::-;23637:74;;23720:93;23809:3;23720:93;:::i;:::-;23838:2;23833:3;23829:12;23822:19;;23481:366;;;:::o;23853:::-;23995:3;24016:67;24080:2;24075:3;24016:67;:::i;:::-;24009:74;;24092:93;24181:3;24092:93;:::i;:::-;24210:2;24205:3;24201:12;24194:19;;23853:366;;;:::o;24225:108::-;24302:24;24320:5;24302:24;:::i;:::-;24297:3;24290:37;24225:108;;:::o;24339:118::-;24426:24;24444:5;24426:24;:::i;:::-;24421:3;24414:37;24339:118;;:::o;24463:256::-;24575:3;24590:75;24661:3;24652:6;24590:75;:::i;:::-;24690:2;24685:3;24681:12;24674:19;;24710:3;24703:10;;24463:256;;;;:::o;24725:589::-;24950:3;24972:95;25063:3;25054:6;24972:95;:::i;:::-;24965:102;;25084:95;25175:3;25166:6;25084:95;:::i;:::-;25077:102;;25196:92;25284:3;25275:6;25196:92;:::i;:::-;25189:99;;25305:3;25298:10;;24725:589;;;;;;:::o;25320:379::-;25504:3;25526:147;25669:3;25526:147;:::i;:::-;25519:154;;25690:3;25683:10;;25320:379;;;:::o;25705:222::-;25798:4;25836:2;25825:9;25821:18;25813:26;;25849:71;25917:1;25906:9;25902:17;25893:6;25849:71;:::i;:::-;25705:222;;;;:::o;25933:640::-;26128:4;26166:3;26155:9;26151:19;26143:27;;26180:71;26248:1;26237:9;26233:17;26224:6;26180:71;:::i;:::-;26261:72;26329:2;26318:9;26314:18;26305:6;26261:72;:::i;:::-;26343;26411:2;26400:9;26396:18;26387:6;26343:72;:::i;:::-;26462:9;26456:4;26452:20;26447:2;26436:9;26432:18;26425:48;26490:76;26561:4;26552:6;26490:76;:::i;:::-;26482:84;;25933:640;;;;;;;:::o;26579:373::-;26722:4;26760:2;26749:9;26745:18;26737:26;;26809:9;26803:4;26799:20;26795:1;26784:9;26780:17;26773:47;26837:108;26940:4;26931:6;26837:108;:::i;:::-;26829:116;;26579:373;;;;:::o;26958:210::-;27045:4;27083:2;27072:9;27068:18;27060:26;;27096:65;27158:1;27147:9;27143:17;27134:6;27096:65;:::i;:::-;26958:210;;;;:::o;27174:222::-;27267:4;27305:2;27294:9;27290:18;27282:26;;27318:71;27386:1;27375:9;27371:17;27362:6;27318:71;:::i;:::-;27174:222;;;;:::o;27402:313::-;27515:4;27553:2;27542:9;27538:18;27530:26;;27602:9;27596:4;27592:20;27588:1;27577:9;27573:17;27566:47;27630:78;27703:4;27694:6;27630:78;:::i;:::-;27622:86;;27402:313;;;;:::o;27721:419::-;27887:4;27925:2;27914:9;27910:18;27902:26;;27974:9;27968:4;27964:20;27960:1;27949:9;27945:17;27938:47;28002:131;28128:4;28002:131;:::i;:::-;27994:139;;27721:419;;;:::o;28146:::-;28312:4;28350:2;28339:9;28335:18;28327:26;;28399:9;28393:4;28389:20;28385:1;28374:9;28370:17;28363:47;28427:131;28553:4;28427:131;:::i;:::-;28419:139;;28146:419;;;:::o;28571:::-;28737:4;28775:2;28764:9;28760:18;28752:26;;28824:9;28818:4;28814:20;28810:1;28799:9;28795:17;28788:47;28852:131;28978:4;28852:131;:::i;:::-;28844:139;;28571:419;;;:::o;28996:::-;29162:4;29200:2;29189:9;29185:18;29177:26;;29249:9;29243:4;29239:20;29235:1;29224:9;29220:17;29213:47;29277:131;29403:4;29277:131;:::i;:::-;29269:139;;28996:419;;;:::o;29421:::-;29587:4;29625:2;29614:9;29610:18;29602:26;;29674:9;29668:4;29664:20;29660:1;29649:9;29645:17;29638:47;29702:131;29828:4;29702:131;:::i;:::-;29694:139;;29421:419;;;:::o;29846:::-;30012:4;30050:2;30039:9;30035:18;30027:26;;30099:9;30093:4;30089:20;30085:1;30074:9;30070:17;30063:47;30127:131;30253:4;30127:131;:::i;:::-;30119:139;;29846:419;;;:::o;30271:::-;30437:4;30475:2;30464:9;30460:18;30452:26;;30524:9;30518:4;30514:20;30510:1;30499:9;30495:17;30488:47;30552:131;30678:4;30552:131;:::i;:::-;30544:139;;30271:419;;;:::o;30696:::-;30862:4;30900:2;30889:9;30885:18;30877:26;;30949:9;30943:4;30939:20;30935:1;30924:9;30920:17;30913:47;30977:131;31103:4;30977:131;:::i;:::-;30969:139;;30696:419;;;:::o;31121:::-;31287:4;31325:2;31314:9;31310:18;31302:26;;31374:9;31368:4;31364:20;31360:1;31349:9;31345:17;31338:47;31402:131;31528:4;31402:131;:::i;:::-;31394:139;;31121:419;;;:::o;31546:::-;31712:4;31750:2;31739:9;31735:18;31727:26;;31799:9;31793:4;31789:20;31785:1;31774:9;31770:17;31763:47;31827:131;31953:4;31827:131;:::i;:::-;31819:139;;31546:419;;;:::o;31971:::-;32137:4;32175:2;32164:9;32160:18;32152:26;;32224:9;32218:4;32214:20;32210:1;32199:9;32195:17;32188:47;32252:131;32378:4;32252:131;:::i;:::-;32244:139;;31971:419;;;:::o;32396:::-;32562:4;32600:2;32589:9;32585:18;32577:26;;32649:9;32643:4;32639:20;32635:1;32624:9;32620:17;32613:47;32677:131;32803:4;32677:131;:::i;:::-;32669:139;;32396:419;;;:::o;32821:::-;32987:4;33025:2;33014:9;33010:18;33002:26;;33074:9;33068:4;33064:20;33060:1;33049:9;33045:17;33038:47;33102:131;33228:4;33102:131;:::i;:::-;33094:139;;32821:419;;;:::o;33246:::-;33412:4;33450:2;33439:9;33435:18;33427:26;;33499:9;33493:4;33489:20;33485:1;33474:9;33470:17;33463:47;33527:131;33653:4;33527:131;:::i;:::-;33519:139;;33246:419;;;:::o;33671:::-;33837:4;33875:2;33864:9;33860:18;33852:26;;33924:9;33918:4;33914:20;33910:1;33899:9;33895:17;33888:47;33952:131;34078:4;33952:131;:::i;:::-;33944:139;;33671:419;;;:::o;34096:::-;34262:4;34300:2;34289:9;34285:18;34277:26;;34349:9;34343:4;34339:20;34335:1;34324:9;34320:17;34313:47;34377:131;34503:4;34377:131;:::i;:::-;34369:139;;34096:419;;;:::o;34521:::-;34687:4;34725:2;34714:9;34710:18;34702:26;;34774:9;34768:4;34764:20;34760:1;34749:9;34745:17;34738:47;34802:131;34928:4;34802:131;:::i;:::-;34794:139;;34521:419;;;:::o;34946:::-;35112:4;35150:2;35139:9;35135:18;35127:26;;35199:9;35193:4;35189:20;35185:1;35174:9;35170:17;35163:47;35227:131;35353:4;35227:131;:::i;:::-;35219:139;;34946:419;;;:::o;35371:::-;35537:4;35575:2;35564:9;35560:18;35552:26;;35624:9;35618:4;35614:20;35610:1;35599:9;35595:17;35588:47;35652:131;35778:4;35652:131;:::i;:::-;35644:139;;35371:419;;;:::o;35796:::-;35962:4;36000:2;35989:9;35985:18;35977:26;;36049:9;36043:4;36039:20;36035:1;36024:9;36020:17;36013:47;36077:131;36203:4;36077:131;:::i;:::-;36069:139;;35796:419;;;:::o;36221:::-;36387:4;36425:2;36414:9;36410:18;36402:26;;36474:9;36468:4;36464:20;36460:1;36449:9;36445:17;36438:47;36502:131;36628:4;36502:131;:::i;:::-;36494:139;;36221:419;;;:::o;36646:::-;36812:4;36850:2;36839:9;36835:18;36827:26;;36899:9;36893:4;36889:20;36885:1;36874:9;36870:17;36863:47;36927:131;37053:4;36927:131;:::i;:::-;36919:139;;36646:419;;;:::o;37071:::-;37237:4;37275:2;37264:9;37260:18;37252:26;;37324:9;37318:4;37314:20;37310:1;37299:9;37295:17;37288:47;37352:131;37478:4;37352:131;:::i;:::-;37344:139;;37071:419;;;:::o;37496:222::-;37589:4;37627:2;37616:9;37612:18;37604:26;;37640:71;37708:1;37697:9;37693:17;37684:6;37640:71;:::i;:::-;37496:222;;;;:::o;37724:129::-;37758:6;37785:20;;:::i;:::-;37775:30;;37814:33;37842:4;37834:6;37814:33;:::i;:::-;37724:129;;;:::o;37859:75::-;37892:6;37925:2;37919:9;37909:19;;37859:75;:::o;37940:311::-;38017:4;38107:18;38099:6;38096:30;38093:56;;;38129:18;;:::i;:::-;38093:56;38179:4;38171:6;38167:17;38159:25;;38239:4;38233;38229:15;38221:23;;37940:311;;;:::o;38257:307::-;38318:4;38408:18;38400:6;38397:30;38394:56;;;38430:18;;:::i;:::-;38394:56;38468:29;38490:6;38468:29;:::i;:::-;38460:37;;38552:4;38546;38542:15;38534:23;;38257:307;;;:::o;38570:308::-;38632:4;38722:18;38714:6;38711:30;38708:56;;;38744:18;;:::i;:::-;38708:56;38782:29;38804:6;38782:29;:::i;:::-;38774:37;;38866:4;38860;38856:15;38848:23;;38570:308;;;:::o;38884:132::-;38951:4;38974:3;38966:11;;39004:4;38999:3;38995:14;38987:22;;38884:132;;;:::o;39022:141::-;39071:4;39094:3;39086:11;;39117:3;39114:1;39107:14;39151:4;39148:1;39138:18;39130:26;;39022:141;;;:::o;39169:114::-;39236:6;39270:5;39264:12;39254:22;;39169:114;;;:::o;39289:98::-;39340:6;39374:5;39368:12;39358:22;;39289:98;;;:::o;39393:99::-;39445:6;39479:5;39473:12;39463:22;;39393:99;;;:::o;39498:113::-;39568:4;39600;39595:3;39591:14;39583:22;;39498:113;;;:::o;39617:184::-;39716:11;39750:6;39745:3;39738:19;39790:4;39785:3;39781:14;39766:29;;39617:184;;;;:::o;39807:168::-;39890:11;39924:6;39919:3;39912:19;39964:4;39959:3;39955:14;39940:29;;39807:168;;;;:::o;39981:147::-;40082:11;40119:3;40104:18;;39981:147;;;;:::o;40134:169::-;40218:11;40252:6;40247:3;40240:19;40292:4;40287:3;40283:14;40268:29;;40134:169;;;;:::o;40309:148::-;40411:11;40448:3;40433:18;;40309:148;;;;:::o;40463:305::-;40503:3;40522:20;40540:1;40522:20;:::i;:::-;40517:25;;40556:20;40574:1;40556:20;:::i;:::-;40551:25;;40710:1;40642:66;40638:74;40635:1;40632:81;40629:107;;;40716:18;;:::i;:::-;40629:107;40760:1;40757;40753:9;40746:16;;40463:305;;;;:::o;40774:185::-;40814:1;40831:20;40849:1;40831:20;:::i;:::-;40826:25;;40865:20;40883:1;40865:20;:::i;:::-;40860:25;;40904:1;40894:35;;40909:18;;:::i;:::-;40894:35;40951:1;40948;40944:9;40939:14;;40774:185;;;;:::o;40965:348::-;41005:7;41028:20;41046:1;41028:20;:::i;:::-;41023:25;;41062:20;41080:1;41062:20;:::i;:::-;41057:25;;41250:1;41182:66;41178:74;41175:1;41172:81;41167:1;41160:9;41153:17;41149:105;41146:131;;;41257:18;;:::i;:::-;41146:131;41305:1;41302;41298:9;41287:20;;40965:348;;;;:::o;41319:191::-;41359:4;41379:20;41397:1;41379:20;:::i;:::-;41374:25;;41413:20;41431:1;41413:20;:::i;:::-;41408:25;;41452:1;41449;41446:8;41443:34;;;41457:18;;:::i;:::-;41443:34;41502:1;41499;41495:9;41487:17;;41319:191;;;;:::o;41516:96::-;41553:7;41582:24;41600:5;41582:24;:::i;:::-;41571:35;;41516:96;;;:::o;41618:90::-;41652:7;41695:5;41688:13;41681:21;41670:32;;41618:90;;;:::o;41714:77::-;41751:7;41780:5;41769:16;;41714:77;;;:::o;41797:149::-;41833:7;41873:66;41866:5;41862:78;41851:89;;41797:149;;;:::o;41952:126::-;41989:7;42029:42;42022:5;42018:54;42007:65;;41952:126;;;:::o;42084:77::-;42121:7;42150:5;42139:16;;42084:77;;;:::o;42167:154::-;42251:6;42246:3;42241;42228:30;42313:1;42304:6;42299:3;42295:16;42288:27;42167:154;;;:::o;42327:307::-;42395:1;42405:113;42419:6;42416:1;42413:13;42405:113;;;42504:1;42499:3;42495:11;42489:18;42485:1;42480:3;42476:11;42469:39;42441:2;42438:1;42434:10;42429:15;;42405:113;;;42536:6;42533:1;42530:13;42527:101;;;42616:1;42607:6;42602:3;42598:16;42591:27;42527:101;42376:258;42327:307;;;:::o;42640:320::-;42684:6;42721:1;42715:4;42711:12;42701:22;;42768:1;42762:4;42758:12;42789:18;42779:81;;42845:4;42837:6;42833:17;42823:27;;42779:81;42907:2;42899:6;42896:14;42876:18;42873:38;42870:84;;;42926:18;;:::i;:::-;42870:84;42691:269;42640:320;;;:::o;42966:281::-;43049:27;43071:4;43049:27;:::i;:::-;43041:6;43037:40;43179:6;43167:10;43164:22;43143:18;43131:10;43128:34;43125:62;43122:88;;;43190:18;;:::i;:::-;43122:88;43230:10;43226:2;43219:22;43009:238;42966:281;;:::o;43253:233::-;43292:3;43315:24;43333:5;43315:24;:::i;:::-;43306:33;;43361:66;43354:5;43351:77;43348:103;;;43431:18;;:::i;:::-;43348:103;43478:1;43471:5;43467:13;43460:20;;43253:233;;;:::o;43492:100::-;43531:7;43560:26;43580:5;43560:26;:::i;:::-;43549:37;;43492:100;;;:::o;43598:94::-;43637:7;43666:20;43680:5;43666:20;:::i;:::-;43655:31;;43598:94;;;:::o;43698:176::-;43730:1;43747:20;43765:1;43747:20;:::i;:::-;43742:25;;43781:20;43799:1;43781:20;:::i;:::-;43776:25;;43820:1;43810:35;;43825:18;;:::i;:::-;43810:35;43866:1;43863;43859:9;43854:14;;43698:176;;;;:::o;43880:180::-;43928:77;43925:1;43918:88;44025:4;44022:1;44015:15;44049:4;44046:1;44039:15;44066:180;44114:77;44111:1;44104:88;44211:4;44208:1;44201:15;44235:4;44232:1;44225:15;44252:180;44300:77;44297:1;44290:88;44397:4;44394:1;44387:15;44421:4;44418:1;44411:15;44438:180;44486:77;44483:1;44476:88;44583:4;44580:1;44573:15;44607:4;44604:1;44597:15;44624:180;44672:77;44669:1;44662:88;44769:4;44766:1;44759:15;44793:4;44790:1;44783:15;44810:117;44919:1;44916;44909:12;44933:117;45042:1;45039;45032:12;45056:117;45165:1;45162;45155:12;45179:117;45288:1;45285;45278:12;45302:117;45411:1;45408;45401:12;45425:117;45534:1;45531;45524:12;45548:102;45589:6;45640:2;45636:7;45631:2;45624:5;45620:14;45616:28;45606:38;;45548:102;;;:::o;45656:94::-;45689:8;45737:5;45733:2;45729:14;45708:35;;45656:94;;;:::o;45756:237::-;45896:34;45892:1;45884:6;45880:14;45873:58;45965:20;45960:2;45952:6;45948:15;45941:45;45756:237;:::o;45999:225::-;46139:34;46135:1;46127:6;46123:14;46116:58;46208:8;46203:2;46195:6;46191:15;46184:33;45999:225;:::o;46230:224::-;46370:34;46366:1;46358:6;46354:14;46347:58;46439:7;46434:2;46426:6;46422:15;46415:32;46230:224;:::o;46460:178::-;46600:30;46596:1;46588:6;46584:14;46577:54;46460:178;:::o;46644:170::-;46784:22;46780:1;46772:6;46768:14;46761:46;46644:170;:::o;46820:223::-;46960:34;46956:1;46948:6;46944:14;46937:58;47029:6;47024:2;47016:6;47012:15;47005:31;46820:223;:::o;47049:175::-;47189:27;47185:1;47177:6;47173:14;47166:51;47049:175;:::o;47230:231::-;47370:34;47366:1;47358:6;47354:14;47347:58;47439:14;47434:2;47426:6;47422:15;47415:39;47230:231;:::o;47467:243::-;47607:34;47603:1;47595:6;47591:14;47584:58;47676:26;47671:2;47663:6;47659:15;47652:51;47467:243;:::o;47716:229::-;47856:34;47852:1;47844:6;47840:14;47833:58;47925:12;47920:2;47912:6;47908:15;47901:37;47716:229;:::o;47951:228::-;48091:34;48087:1;48079:6;48075:14;48068:58;48160:11;48155:2;48147:6;48143:15;48136:36;47951:228;:::o;48185:223::-;48325:34;48321:1;48313:6;48309:14;48302:58;48394:6;48389:2;48381:6;48377:15;48370:31;48185:223;:::o;48414:182::-;48554:34;48550:1;48542:6;48538:14;48531:58;48414:182;:::o;48602:227::-;48742:34;48738:1;48730:6;48726:14;48719:58;48811:10;48806:2;48798:6;48794:15;48787:35;48602:227;:::o;48835:231::-;48975:34;48971:1;48963:6;48959:14;48952:58;49044:14;49039:2;49031:6;49027:15;49020:39;48835:231;:::o;49072:182::-;49212:34;49208:1;49200:6;49196:14;49189:58;49072:182;:::o;49260:173::-;49400:25;49396:1;49388:6;49384:14;49377:49;49260:173;:::o;49439:161::-;49579:13;49575:1;49567:6;49563:14;49556:37;49439:161;:::o;49606:234::-;49746:34;49742:1;49734:6;49730:14;49723:58;49815:17;49810:2;49802:6;49798:15;49791:42;49606:234;:::o;49846:220::-;49986:34;49982:1;49974:6;49970:14;49963:58;50055:3;50050:2;50042:6;50038:15;50031:28;49846:220;:::o;50072:114::-;;:::o;50192:170::-;50332:22;50328:1;50320:6;50316:14;50309:46;50192:170;:::o;50368:236::-;50508:34;50504:1;50496:6;50492:14;50485:58;50577:19;50572:2;50564:6;50560:15;50553:44;50368:236;:::o;50610:169::-;50750:21;50746:1;50738:6;50734:14;50727:45;50610:169;:::o;50785:122::-;50858:24;50876:5;50858:24;:::i;:::-;50851:5;50848:35;50838:63;;50897:1;50894;50887:12;50838:63;50785:122;:::o;50913:116::-;50983:21;50998:5;50983:21;:::i;:::-;50976:5;50973:32;50963:60;;51019:1;51016;51009:12;50963:60;50913:116;:::o;51035:122::-;51108:24;51126:5;51108:24;:::i;:::-;51101:5;51098:35;51088:63;;51147:1;51144;51137:12;51088:63;51035:122;:::o;51163:120::-;51235:23;51252:5;51235:23;:::i;:::-;51228:5;51225:34;51215:62;;51273:1;51270;51263:12;51215:62;51163:120;:::o;51289:122::-;51362:24;51380:5;51362:24;:::i;:::-;51355:5;51352:35;51342:63;;51401:1;51398;51391:12;51342:63;51289:122;:::o

Swarm Source

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