ETH Price: $2,515.93 (+1.91%)

Token

 

Overview

Max Total Supply

93

Holders

72

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
*6️⃣9️⃣0️⃣8️⃣.eth
Balance
1
0x6f1367532766460f3e995f30f639e0da7296e0c1
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:
DomainSale

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-09-19
*/

//SPDX-License-Identifier: Unlicense

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @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) internal _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: address zero is not a valid owner");
        return _balances[owner];
    }

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

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

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

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

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

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

    /**
     * @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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

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

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

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

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

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) internal _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

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

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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

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

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

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

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

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

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

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

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

contract DomainSale is ERC721Enumerable, Ownable {
    uint256 constant NotExist = 0;
    uint256 constant ForSale = 1;
    uint256 constant IsUsing = 2;

    mapping(uint256 => uint256) private prices;
    mapping(uint256 => string) private idToName;

    constructor() ERC721("0x", "") {
        _owner = 0xaC44EBBE441FD46db337948c46f3d0f53b8fE63A;
        premint();
    }

    function premint() internal {
        address owner = 0x8Ae2f6061dd2dEAbfB1F5062220Cdb7e6c5aDc87;
        mintDomain(owner, "carinsurance.0x");
        mintDomain(owner, "vacationrentals.0x");
        mintDomain(owner, "cryptopayments.0x");
        mintDomain(owner, "weddingplanner.0x");
        mintDomain(owner, "digitalmarketing.0x");
        mintDomain(owner, "freepornsites.0x");
        mintDomain(owner, "financepartner.0x");
        mintDomain(owner, "unpluggedmusic.0x");
        mintDomain(owner, "hollywoodavatars.0x");

        owner = 0x266F33E370C1aC53D57B299CCFfc64b6E224c2a9;
        mintDomain(owner, "insurance.0x");

        owner = 0xaC44EBBE441FD46db337948c46f3d0f53b8fE63A;
        mintDomain(owner, "zxd.0x");
        mintDomain(owner, "0xd.0x");

        uint256 id = getID("carinsurance.0x");
        prices[id] = 999999000000000000000000;
        _approve(address(this), id);

        id = getID("cryptopayments.0x");
        prices[id] = 999000000000000000000;
        _approve(address(this), id);
    }

    function mintDomain(address owner, string memory name) internal {
        uint256 id = getID(name);
        idToName[id] = name;
        _mint(owner, id);
    }

    function getID(string memory name) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(name)));
    }

    function registerDomain(string memory name) public payable {
        uint256 status = domainStatus(name);
        require(status != IsUsing, "Domain is being used by another user.");

        uint256 id = getID(name);

        if (status == NotExist) {
            uint256 len = bytes(name).length;
            uint256 price = 10000000000000000000;
            for (uint256 index = 0; index < len - 4; index++) {
                price /= 2;
            }
            require(msg.value >= price, "Not enough Eth to buy domain.");

            idToName[id] = name;
            _mint(msg.sender, id);
        } else {
            require(msg.value >= prices[id], "Not enough Eth to buy domain.");

            payable(_owners[id]).transfer((msg.value * 99) / 100);
            _transfer(_owners[id], msg.sender, id);
            prices[id] = 0;
        }
    }

    function freeMintDomain(address[] memory users, string[] memory names) public onlyOwner {
        require(names.length == users.length, "Length of names and users must be same.");
        for (uint256 i = 0; i < names.length; ++i) {
            mintDomain(users[i], names[i]);
        }
    }

    function domainStatus(string memory name) public view returns (uint256) {
        uint256 id = getID(name);
        if (_owners[id] == address(0))
            return NotExist;
        if (prices[id] != 0)
            return ForSale;
        return IsUsing;
    }

    function prepareSale(string memory name, uint256 price) public {
        uint256 id = getID(name);
        require(msg.sender == _owners[id]);
        prices[id] = price;
        approve(address(this), id);
        
    }

    function getPrice(string memory name) public view returns (uint256) {
        uint256 id = getID(name);
        return prices[id];
    }

    function ownerOfDomain(string memory name) public view returns (address) {
        uint256 id = uint256(keccak256(abi.encodePacked(name)));
        return _owners[id];
    }

    function getNames(address owner) public view returns (string[] memory) {
        uint256 count = balanceOf(owner);
        string[] memory names = new string[](count);
        for (uint256 i = 0; i < count; ++i) {
            names[i] = idToName[_ownedTokens[owner][i]];
        }
        return names;
    }

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function withdrawMoney() public {
        address payable to = payable(_owner);
        to.transfer(getBalance());
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"domainStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"string[]","name":"names","type":"string[]"}],"name":"freeMintDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getNames","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"ownerOfDomain","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"prepareSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"registerDomain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600281526020017f30780000000000000000000000000000000000000000000000000000000000008152506040518060200160405280600081525081600090805190602001906200007092919062001023565b5080600190805190602001906200008992919062001023565b505050620000ac620000a06200011760201b60201c565b6200011f60201b60201c565b73ac44ebbe441fd46db337948c46f3d0f53b8fe63a600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000111620001e560201b60201c565b62001502565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000738ae2f6061dd2deabfb1f5062220cdb7e6c5adc87905062000245816040518060400160405280600f81526020017f636172696e737572616e63652e307800000000000000000000000000000000008152506200067d60201b60201c565b6200028c816040518060400160405280601281526020017f7661636174696f6e72656e74616c732e307800000000000000000000000000008152506200067d60201b60201c565b620002d3816040518060400160405280601181526020017f63727970746f7061796d656e74732e30780000000000000000000000000000008152506200067d60201b60201c565b6200031a816040518060400160405280601181526020017f77656464696e67706c616e6e65722e30780000000000000000000000000000008152506200067d60201b60201c565b62000361816040518060400160405280601381526020017f6469676974616c6d61726b6574696e672e3078000000000000000000000000008152506200067d60201b60201c565b620003a8816040518060400160405280601081526020017f66726565706f726e73697465732e3078000000000000000000000000000000008152506200067d60201b60201c565b620003ef816040518060400160405280601181526020017f66696e616e6365706172746e65722e30780000000000000000000000000000008152506200067d60201b60201c565b62000436816040518060400160405280601181526020017f756e706c75676765646d757369632e30780000000000000000000000000000008152506200067d60201b60201c565b6200047d816040518060400160405280601381526020017f686f6c6c79776f6f64617661746172732e3078000000000000000000000000008152506200067d60201b60201c565b73266f33e370c1ac53d57b299ccffc64b6e224c2a99050620004db816040518060400160405280600c81526020017f696e737572616e63652e307800000000000000000000000000000000000000008152506200067d60201b60201c565b73ac44ebbe441fd46db337948c46f3d0f53b8fe63a905062000539816040518060400160405280600681526020017f7a78642e307800000000000000000000000000000000000000000000000000008152506200067d60201b60201c565b62000580816040518060400160405280600681526020017f3078642e307800000000000000000000000000000000000000000000000000008152506200067d60201b60201c565b6000620005c86040518060400160405280600f81526020017f636172696e737572616e63652e30780000000000000000000000000000000000815250620006d360201b60201c565b905069d3c20dee1639f99c0000600b600083815260200190815260200160002081905550620005fe30826200070860201b60201c565b620006446040518060400160405280601181526020017f63727970746f7061796d656e74732e3078000000000000000000000000000000815250620006d360201b60201c565b9050683627e8f712373c0000600b6000838152602001908152602001600020819055506200067930826200070860201b60201c565b5050565b60006200069082620006d360201b60201c565b905081600c60008381526020019081526020016000209080519060200190620006bb92919062001023565b50620006ce8382620007ce60201b60201c565b505050565b600081604051602001620006e89190620011a6565b6040516020818303038152906040528051906020012060001c9050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166200078883620009c860201b62000bec1760201c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008389062001203565b60405180910390fd5b620008528162000a7d60201b60201c565b1562000895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088c90620011bf565b60405180910390fd5b620008a96000838362000ae960201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008fb91906200126e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620009c46000838362000c3060201b60201c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6b9062001225565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000b0183838362000c3560201b620016571760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000b4e5762000b488162000c3a60201b60201c565b62000b96565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000b955762000b94838262000c8360201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000be35762000bdd8162000e0060201b60201c565b62000c2b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c2a5762000c29828262000edc60201b60201c565b5b5b505050565b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000c9d8462000f6860201b62000c9e1760201c565b62000ca99190620012cb565b905060006007600084815260200190815260200160002054905081811462000d8f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e169190620012cb565b905060006009600084815260200190815260200160002054905060006008838154811062000e495762000e4862001409565b5b90600052602060002001549050806008838154811062000e6e5762000e6d62001409565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ec05762000ebf620013da565b5b6001900381819060005260206000200160009055905550505050565b600062000ef48362000f6860201b62000c9e1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fd390620011e1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620010319062001346565b90600052602060002090601f016020900481019282620010555760008555620010a1565b82601f106200107057805160ff1916838001178555620010a1565b82800160010185558215620010a1579182015b82811115620010a057825182559160200191906001019062001083565b5b509050620010b09190620010b4565b5090565b5b80821115620010cf576000816000905550600101620010b5565b5090565b6000620010e08262001247565b620010ec818562001263565b9350620010fe81856020860162001310565b80840191505092915050565b600062001119601c8362001252565b9150620011268262001438565b602082019050919050565b60006200114060298362001252565b91506200114d8262001461565b604082019050919050565b60006200116760208362001252565b91506200117482620014b0565b602082019050919050565b60006200118e60188362001252565b91506200119b82620014d9565b602082019050919050565b6000620011b48284620010d3565b915081905092915050565b60006020820190508181036000830152620011da816200110a565b9050919050565b60006020820190508181036000830152620011fc8162001131565b9050919050565b600060208201905081810360008301526200121e8162001158565b9050919050565b6000602082019050818103600083015262001240816200117f565b9050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006200127b8262001306565b9150620012888362001306565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012c057620012bf6200137c565b5b828201905092915050565b6000620012d88262001306565b9150620012e58362001306565b925082821015620012fb57620012fa6200137c565b5b828203905092915050565b6000819050919050565b60005b838110156200133057808201518184015260208101905062001313565b8381111562001340576000848401525b50505050565b600060028204905060018216806200135f57607f821691505b60208210811415620013765762001375620013ab565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b61417080620015126000396000f3fe6080604052600436106101b75760003560e01c8063715018a6116100ec578063ac4460021161008a578063c9558c5d11610064578063c9558c5d14610635578063e985e9c514610672578063f2fde38b146106af578063fcb16869146106d8576101b7565b8063ac446002146105b8578063b88d4fde146105cf578063c87b56dd146105f8576101b7565b806395d89b41116100c657806395d89b411461050b578063a22cb46514610536578063a5cad08a1461055f578063a833c64b1461057b576101b7565b8063715018a61461048c5780637def6d55146104a35780638da5cb5b146104e0576101b7565b806323b872dd116101595780634f6ccce7116101335780634f6ccce714610398578063524f3889146103d55780636352211e1461041257806370a082311461044f576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806312065fe01461028a57806318160ddd146102b55780631f18406d146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612e4c565b610701565b6040516101f09190613444565b60405180910390f35b34801561020557600080fd5b5061020e61077b565b60405161021b919061345f565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612f4b565b61080d565b60405161025891906133bb565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612d94565b610853565b005b34801561029657600080fd5b5061029f61096b565b6040516102ac91906136c1565b60405180910390f35b3480156102c157600080fd5b506102ca610973565b6040516102d791906136c1565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612dd4565b610980565b005b34801561031557600080fd5b50610330600480360381019061032b9190612c7e565b610a2c565b005b34801561033e57600080fd5b5061035960048036038101906103549190612d94565b610a8c565b60405161036691906136c1565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612c7e565b610b31565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f4b565b610b51565b6040516103cc91906136c1565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612ea6565b610bc2565b60405161040991906136c1565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612f4b565b610bec565b60405161044691906133bb565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612c11565b610c9e565b60405161048391906136c1565b60405180910390f35b34801561049857600080fd5b506104a1610d56565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190612ea6565b610d6a565b6040516104d791906136c1565b60405180910390f35b3480156104ec57600080fd5b506104f5610e1a565b60405161050291906133bb565b60405180910390f35b34801561051757600080fd5b50610520610e44565b60405161052d919061345f565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190612d54565b610ed6565b005b61057960048036038101906105749190612ea6565b610eec565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612c11565b611161565b6040516105af9190613422565b60405180910390f35b3480156105c457600080fd5b506105cd6112f3565b005b3480156105db57600080fd5b506105f660048036038101906105f19190612cd1565b61136b565b005b34801561060457600080fd5b5061061f600480360381019061061a9190612f4b565b6113cd565b60405161062c919061345f565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190612ea6565b611435565b60405161066991906133bb565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612c3e565b6114a0565b6040516106a69190613444565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190612c11565b611534565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190612eef565b6115b8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077457506107738261165c565b5b9050919050565b60606000805461078a90613a13565b80601f01602080910402602001604051908101604052809291908181526020018280546107b690613a13565b80156108035780601f106107d857610100808354040283529160200191610803565b820191906000526020600020905b8154815290600101906020018083116107e657829003601f168201915b5050505050905090565b60006108188261173e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085e82610bec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690613641565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ee611789565b73ffffffffffffffffffffffffffffffffffffffff16148061091d575061091c81610917611789565b6114a0565b5b61095c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610953906135c1565b60405180910390fd5b6109668383611791565b505050565b600047905090565b6000600880549050905090565b61098861184a565b81518151146109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906134c1565b60405180910390fd5b60005b8151811015610a2757610a168382815181106109ee576109ed613bac565b5b6020026020010151838381518110610a0957610a08613bac565b5b60200260200101516118c8565b80610a2090613a76565b90506109cf565b505050565b610a3d610a37611789565b8261190c565b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7390613681565b60405180910390fd5b610a878383836119a1565b505050565b6000610a9783610c9e565b8210610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90613481565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b4c8383836040518060200160405280600081525061136b565b505050565b6000610b5b610973565b8210610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613661565b60405180910390fd5b60088281548110610bb057610baf613bac565b5b90600052602060002001549050919050565b600080610bce83611c08565b9050600b600082815260200190815260200160002054915050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90613621565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690613581565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d5e61184a565b610d686000611c3b565b565b600080610d7683611c08565b9050600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dea576000915050610e15565b6000600b60008381526020019081526020016000205414610e0f576001915050610e15565b60029150505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e5390613a13565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7f90613a13565b8015610ecc5780601f10610ea157610100808354040283529160200191610ecc565b820191906000526020600020905b815481529060010190602001808311610eaf57829003601f168201915b5050505050905090565b610ee8610ee1611789565b8383611d01565b5050565b6000610ef782610d6a565b90506002811415610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f34906135a1565b60405180910390fd5b6000610f4883611c08565b9050600082141561101c576000835190506000678ac7230489e80000905060005b600483610f769190613929565b811015610f9f57600282610f8a919061389e565b91508080610f9790613a76565b915050610f69565b5080341015610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda906136a1565b60405180910390fd5b84600c6000858152602001908152602001600020908051906020019061100a9291906128cb565b506110153384611e6e565b505061115c565b600b600082815260200190815260200160002054341015611072576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611069906136a1565b60405180910390fd5b6002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646063346110ce91906138cf565b6110d8919061389e565b9081150290604051600060405180830381858888f19350505050158015611103573d6000803e3d6000fd5b506111426002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633836119a1565b6000600b6000838152602001908152602001600020819055505b505050565b6060600061116e83610c9e565b905060008167ffffffffffffffff81111561118c5761118b613bdb565b5b6040519080825280602002602001820160405280156111bf57816020015b60608152602001906001900390816111aa5790505b50905060005b828110156112e857600c6000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020548152602001908152602001600020805461123b90613a13565b80601f016020809104026020016040519081016040528092919081815260200182805461126790613a13565b80156112b45780601f10611289576101008083540402835291602001916112b4565b820191906000526020600020905b81548152906001019060200180831161129757829003601f168201915b50505050508282815181106112cc576112cb613bac565b5b6020026020010181905250806112e190613a76565b90506111c5565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc61133c61096b565b9081150290604051600060405180830381858888f19350505050158015611367573d6000803e3d6000fd5b5050565b61137c611376611789565b8361190c565b6113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613681565b60405180910390fd5b6113c784848484612048565b50505050565b60606113d88261173e565b60006113e26120a4565b90506000815111611402576040518060200160405280600081525061142d565b8061140c846120bb565b60405160200161141d929190613397565b6040516020818303038152906040525b915050919050565b600080826040516020016114499190613380565b6040516020818303038152906040528051906020012060001c90506002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61153c61184a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a3906134e1565b60405180910390fd5b6115b581611c3b565b50565b60006115c383611c08565b90506002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461163057600080fd5b81600b6000838152602001908152602001600020819055506116523082610853565b505050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061172757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061173757506117368261221c565b5b9050919050565b61174781612286565b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90613621565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661180483610bec565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611852611789565b73ffffffffffffffffffffffffffffffffffffffff16611870610e1a565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613601565b60405180910390fd5b565b60006118d382611c08565b905081600c600083815260200190815260200160002090805190602001906118fc9291906128cb565b506119078382611e6e565b505050565b60008061191883610bec565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061195a575061195981856114a0565b5b8061199857508373ffffffffffffffffffffffffffffffffffffffff166119808461080d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c182610bec565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613501565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613541565b60405180910390fd5b611a928383836122f2565b611a9d600082611791565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aed9190613929565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b449190613848565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c03838383612406565b505050565b600081604051602001611c1b9190613380565b6040516020818303038152906040528051906020012060001c9050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613561565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e619190613444565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed5906135e1565b60405180910390fd5b611ee781612286565b15611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90613521565b60405180910390fd5b611f33600083836122f2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f839190613848565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461204460008383612406565b5050565b6120538484846119a1565b61205f8484848461240b565b61209e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612095906134a1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612103576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612217565b600082905060005b6000821461213557808061211e90613a76565b915050600a8261212e919061389e565b915061210b565b60008167ffffffffffffffff81111561215157612150613bdb565b5b6040519080825280601f01601f1916602001820160405280156121835781602001600182028036833780820191505090505b5090505b600085146122105760018261219c9190613929565b9150600a856121ab9190613abf565b60306121b79190613848565b60f81b8183815181106121cd576121cc613bac565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612209919061389e565b9450612187565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6122fd838383611657565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123405761233b816125a2565b61237f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461237e5761237d83826125eb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c2576123bd81612758565b612401565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612400576123ff8282612829565b5b5b505050565b505050565b600061242c8473ffffffffffffffffffffffffffffffffffffffff166128a8565b15612595578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612455611789565b8786866040518563ffffffff1660e01b815260040161247794939291906133d6565b602060405180830381600087803b15801561249157600080fd5b505af19250505080156124c257506040513d601f19601f820116820180604052508101906124bf9190612e79565b60015b612545573d80600081146124f2576040519150601f19603f3d011682016040523d82523d6000602084013e6124f7565b606091505b5060008151141561253d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612534906134a1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061259a565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125f884610c9e565b6126029190613929565b90506000600760008481526020019081526020016000205490508181146126e7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061276c9190613929565b905060006009600084815260200190815260200160002054905060006008838154811061279c5761279b613bac565b5b9060005260206000200154905080600883815481106127be576127bd613bac565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061280d5761280c613b7d565b5b6001900381819060005260206000200160009055905550505050565b600061283483610c9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546128d790613a13565b90600052602060002090601f0160209004810192826128f95760008555612940565b82601f1061291257805160ff1916838001178555612940565b82800160010185558215612940579182015b8281111561293f578251825591602001919060010190612924565b5b50905061294d9190612951565b5090565b5b8082111561296a576000816000905550600101612952565b5090565b600061298161297c84613701565b6136dc565b905080838252602082019050828560208602820111156129a4576129a3613c0f565b5b60005b858110156129d457816129ba8882612af0565b8452602084019350602083019250506001810190506129a7565b5050509392505050565b60006129f16129ec8461372d565b6136dc565b90508083825260208201905082856020860282011115612a1457612a13613c0f565b5b60005b85811015612a6257813567ffffffffffffffff811115612a3a57612a39613c0a565b5b808601612a478982612bce565b85526020850194506020840193505050600181019050612a17565b5050509392505050565b6000612a7f612a7a84613759565b6136dc565b905082815260208101848484011115612a9b57612a9a613c14565b5b612aa68482856139d1565b509392505050565b6000612ac1612abc8461378a565b6136dc565b905082815260208101848484011115612add57612adc613c14565b5b612ae88482856139d1565b509392505050565b600081359050612aff816140de565b92915050565b600082601f830112612b1a57612b19613c0a565b5b8135612b2a84826020860161296e565b91505092915050565b600082601f830112612b4857612b47613c0a565b5b8135612b588482602086016129de565b91505092915050565b600081359050612b70816140f5565b92915050565b600081359050612b858161410c565b92915050565b600081519050612b9a8161410c565b92915050565b600082601f830112612bb557612bb4613c0a565b5b8135612bc5848260208601612a6c565b91505092915050565b600082601f830112612be357612be2613c0a565b5b8135612bf3848260208601612aae565b91505092915050565b600081359050612c0b81614123565b92915050565b600060208284031215612c2757612c26613c1e565b5b6000612c3584828501612af0565b91505092915050565b60008060408385031215612c5557612c54613c1e565b5b6000612c6385828601612af0565b9250506020612c7485828601612af0565b9150509250929050565b600080600060608486031215612c9757612c96613c1e565b5b6000612ca586828701612af0565b9350506020612cb686828701612af0565b9250506040612cc786828701612bfc565b9150509250925092565b60008060008060808587031215612ceb57612cea613c1e565b5b6000612cf987828801612af0565b9450506020612d0a87828801612af0565b9350506040612d1b87828801612bfc565b925050606085013567ffffffffffffffff811115612d3c57612d3b613c19565b5b612d4887828801612ba0565b91505092959194509250565b60008060408385031215612d6b57612d6a613c1e565b5b6000612d7985828601612af0565b9250506020612d8a85828601612b61565b9150509250929050565b60008060408385031215612dab57612daa613c1e565b5b6000612db985828601612af0565b9250506020612dca85828601612bfc565b9150509250929050565b60008060408385031215612deb57612dea613c1e565b5b600083013567ffffffffffffffff811115612e0957612e08613c19565b5b612e1585828601612b05565b925050602083013567ffffffffffffffff811115612e3657612e35613c19565b5b612e4285828601612b33565b9150509250929050565b600060208284031215612e6257612e61613c1e565b5b6000612e7084828501612b76565b91505092915050565b600060208284031215612e8f57612e8e613c1e565b5b6000612e9d84828501612b8b565b91505092915050565b600060208284031215612ebc57612ebb613c1e565b5b600082013567ffffffffffffffff811115612eda57612ed9613c19565b5b612ee684828501612bce565b91505092915050565b60008060408385031215612f0657612f05613c1e565b5b600083013567ffffffffffffffff811115612f2457612f23613c19565b5b612f3085828601612bce565b9250506020612f4185828601612bfc565b9150509250929050565b600060208284031215612f6157612f60613c1e565b5b6000612f6f84828501612bfc565b91505092915050565b6000612f848383613058565b905092915050565b612f958161395d565b82525050565b6000612fa6826137cb565b612fb081856137f9565b935083602082028501612fc2856137bb565b8060005b85811015612ffe5784840389528151612fdf8582612f78565b9450612fea836137ec565b925060208a01995050600181019050612fc6565b50829750879550505050505092915050565b6130198161396f565b82525050565b600061302a826137d6565b613034818561380a565b93506130448185602086016139e0565b61304d81613c23565b840191505092915050565b6000613063826137e1565b61306d818561381b565b935061307d8185602086016139e0565b61308681613c23565b840191505092915050565b600061309c826137e1565b6130a6818561382c565b93506130b68185602086016139e0565b6130bf81613c23565b840191505092915050565b60006130d5826137e1565b6130df818561383d565b93506130ef8185602086016139e0565b80840191505092915050565b6000613108602b8361382c565b915061311382613c34565b604082019050919050565b600061312b60328361382c565b915061313682613c83565b604082019050919050565b600061314e60278361382c565b915061315982613cd2565b604082019050919050565b600061317160268361382c565b915061317c82613d21565b604082019050919050565b600061319460258361382c565b915061319f82613d70565b604082019050919050565b60006131b7601c8361382c565b91506131c282613dbf565b602082019050919050565b60006131da60248361382c565b91506131e582613de8565b604082019050919050565b60006131fd60198361382c565b915061320882613e37565b602082019050919050565b600061322060298361382c565b915061322b82613e60565b604082019050919050565b600061324360258361382c565b915061324e82613eaf565b604082019050919050565b6000613266603e8361382c565b915061327182613efe565b604082019050919050565b600061328960208361382c565b915061329482613f4d565b602082019050919050565b60006132ac60208361382c565b91506132b782613f76565b602082019050919050565b60006132cf60188361382c565b91506132da82613f9f565b602082019050919050565b60006132f260218361382c565b91506132fd82613fc8565b604082019050919050565b6000613315602c8361382c565b915061332082614017565b604082019050919050565b6000613338602e8361382c565b915061334382614066565b604082019050919050565b600061335b601d8361382c565b9150613366826140b5565b602082019050919050565b61337a816139c7565b82525050565b600061338c82846130ca565b915081905092915050565b60006133a382856130ca565b91506133af82846130ca565b91508190509392505050565b60006020820190506133d06000830184612f8c565b92915050565b60006080820190506133eb6000830187612f8c565b6133f86020830186612f8c565b6134056040830185613371565b8181036060830152613417818461301f565b905095945050505050565b6000602082019050818103600083015261343c8184612f9b565b905092915050565b60006020820190506134596000830184613010565b92915050565b600060208201905081810360008301526134798184613091565b905092915050565b6000602082019050818103600083015261349a816130fb565b9050919050565b600060208201905081810360008301526134ba8161311e565b9050919050565b600060208201905081810360008301526134da81613141565b9050919050565b600060208201905081810360008301526134fa81613164565b9050919050565b6000602082019050818103600083015261351a81613187565b9050919050565b6000602082019050818103600083015261353a816131aa565b9050919050565b6000602082019050818103600083015261355a816131cd565b9050919050565b6000602082019050818103600083015261357a816131f0565b9050919050565b6000602082019050818103600083015261359a81613213565b9050919050565b600060208201905081810360008301526135ba81613236565b9050919050565b600060208201905081810360008301526135da81613259565b9050919050565b600060208201905081810360008301526135fa8161327c565b9050919050565b6000602082019050818103600083015261361a8161329f565b9050919050565b6000602082019050818103600083015261363a816132c2565b9050919050565b6000602082019050818103600083015261365a816132e5565b9050919050565b6000602082019050818103600083015261367a81613308565b9050919050565b6000602082019050818103600083015261369a8161332b565b9050919050565b600060208201905081810360008301526136ba8161334e565b9050919050565b60006020820190506136d66000830184613371565b92915050565b60006136e66136f7565b90506136f28282613a45565b919050565b6000604051905090565b600067ffffffffffffffff82111561371c5761371b613bdb565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561374857613747613bdb565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561377457613773613bdb565b5b61377d82613c23565b9050602081019050919050565b600067ffffffffffffffff8211156137a5576137a4613bdb565b5b6137ae82613c23565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613853826139c7565b915061385e836139c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561389357613892613af0565b5b828201905092915050565b60006138a9826139c7565b91506138b4836139c7565b9250826138c4576138c3613b1f565b5b828204905092915050565b60006138da826139c7565b91506138e5836139c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391e5761391d613af0565b5b828202905092915050565b6000613934826139c7565b915061393f836139c7565b92508282101561395257613951613af0565b5b828203905092915050565b6000613968826139a7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139fe5780820151818401526020810190506139e3565b83811115613a0d576000848401525b50505050565b60006002820490506001821680613a2b57607f821691505b60208210811415613a3f57613a3e613b4e565b5b50919050565b613a4e82613c23565b810181811067ffffffffffffffff82111715613a6d57613a6c613bdb565b5b80604052505050565b6000613a81826139c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ab457613ab3613af0565b5b600182019050919050565b6000613aca826139c7565b9150613ad5836139c7565b925082613ae557613ae4613b1f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4c656e677468206f66206e616d657320616e64207573657273206d757374206260008201527f652073616d652e00000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f446f6d61696e206973206265696e67207573656420627920616e6f746865722060008201527f757365722e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045746820746f2062757920646f6d61696e2e000000600082015250565b6140e78161395d565b81146140f257600080fd5b50565b6140fe8161396f565b811461410957600080fd5b50565b6141158161397b565b811461412057600080fd5b50565b61412c816139c7565b811461413757600080fd5b5056fea2646970667358221220b85827c876ec6a088e07edc4c5e6fb3265bb76f4d1b236e2bfa2f07157c6b5a364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101b75760003560e01c8063715018a6116100ec578063ac4460021161008a578063c9558c5d11610064578063c9558c5d14610635578063e985e9c514610672578063f2fde38b146106af578063fcb16869146106d8576101b7565b8063ac446002146105b8578063b88d4fde146105cf578063c87b56dd146105f8576101b7565b806395d89b41116100c657806395d89b411461050b578063a22cb46514610536578063a5cad08a1461055f578063a833c64b1461057b576101b7565b8063715018a61461048c5780637def6d55146104a35780638da5cb5b146104e0576101b7565b806323b872dd116101595780634f6ccce7116101335780634f6ccce714610398578063524f3889146103d55780636352211e1461041257806370a082311461044f576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806312065fe01461028a57806318160ddd146102b55780631f18406d146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612e4c565b610701565b6040516101f09190613444565b60405180910390f35b34801561020557600080fd5b5061020e61077b565b60405161021b919061345f565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612f4b565b61080d565b60405161025891906133bb565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612d94565b610853565b005b34801561029657600080fd5b5061029f61096b565b6040516102ac91906136c1565b60405180910390f35b3480156102c157600080fd5b506102ca610973565b6040516102d791906136c1565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612dd4565b610980565b005b34801561031557600080fd5b50610330600480360381019061032b9190612c7e565b610a2c565b005b34801561033e57600080fd5b5061035960048036038101906103549190612d94565b610a8c565b60405161036691906136c1565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612c7e565b610b31565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f4b565b610b51565b6040516103cc91906136c1565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612ea6565b610bc2565b60405161040991906136c1565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612f4b565b610bec565b60405161044691906133bb565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612c11565b610c9e565b60405161048391906136c1565b60405180910390f35b34801561049857600080fd5b506104a1610d56565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190612ea6565b610d6a565b6040516104d791906136c1565b60405180910390f35b3480156104ec57600080fd5b506104f5610e1a565b60405161050291906133bb565b60405180910390f35b34801561051757600080fd5b50610520610e44565b60405161052d919061345f565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190612d54565b610ed6565b005b61057960048036038101906105749190612ea6565b610eec565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612c11565b611161565b6040516105af9190613422565b60405180910390f35b3480156105c457600080fd5b506105cd6112f3565b005b3480156105db57600080fd5b506105f660048036038101906105f19190612cd1565b61136b565b005b34801561060457600080fd5b5061061f600480360381019061061a9190612f4b565b6113cd565b60405161062c919061345f565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190612ea6565b611435565b60405161066991906133bb565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612c3e565b6114a0565b6040516106a69190613444565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190612c11565b611534565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190612eef565b6115b8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077457506107738261165c565b5b9050919050565b60606000805461078a90613a13565b80601f01602080910402602001604051908101604052809291908181526020018280546107b690613a13565b80156108035780601f106107d857610100808354040283529160200191610803565b820191906000526020600020905b8154815290600101906020018083116107e657829003601f168201915b5050505050905090565b60006108188261173e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085e82610bec565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690613641565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ee611789565b73ffffffffffffffffffffffffffffffffffffffff16148061091d575061091c81610917611789565b6114a0565b5b61095c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610953906135c1565b60405180910390fd5b6109668383611791565b505050565b600047905090565b6000600880549050905090565b61098861184a565b81518151146109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906134c1565b60405180910390fd5b60005b8151811015610a2757610a168382815181106109ee576109ed613bac565b5b6020026020010151838381518110610a0957610a08613bac565b5b60200260200101516118c8565b80610a2090613a76565b90506109cf565b505050565b610a3d610a37611789565b8261190c565b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7390613681565b60405180910390fd5b610a878383836119a1565b505050565b6000610a9783610c9e565b8210610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90613481565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b4c8383836040518060200160405280600081525061136b565b505050565b6000610b5b610973565b8210610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613661565b60405180910390fd5b60088281548110610bb057610baf613bac565b5b90600052602060002001549050919050565b600080610bce83611c08565b9050600b600082815260200190815260200160002054915050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90613621565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690613581565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d5e61184a565b610d686000611c3b565b565b600080610d7683611c08565b9050600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dea576000915050610e15565b6000600b60008381526020019081526020016000205414610e0f576001915050610e15565b60029150505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e5390613a13565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7f90613a13565b8015610ecc5780601f10610ea157610100808354040283529160200191610ecc565b820191906000526020600020905b815481529060010190602001808311610eaf57829003601f168201915b5050505050905090565b610ee8610ee1611789565b8383611d01565b5050565b6000610ef782610d6a565b90506002811415610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f34906135a1565b60405180910390fd5b6000610f4883611c08565b9050600082141561101c576000835190506000678ac7230489e80000905060005b600483610f769190613929565b811015610f9f57600282610f8a919061389e565b91508080610f9790613a76565b915050610f69565b5080341015610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda906136a1565b60405180910390fd5b84600c6000858152602001908152602001600020908051906020019061100a9291906128cb565b506110153384611e6e565b505061115c565b600b600082815260200190815260200160002054341015611072576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611069906136a1565b60405180910390fd5b6002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646063346110ce91906138cf565b6110d8919061389e565b9081150290604051600060405180830381858888f19350505050158015611103573d6000803e3d6000fd5b506111426002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633836119a1565b6000600b6000838152602001908152602001600020819055505b505050565b6060600061116e83610c9e565b905060008167ffffffffffffffff81111561118c5761118b613bdb565b5b6040519080825280602002602001820160405280156111bf57816020015b60608152602001906001900390816111aa5790505b50905060005b828110156112e857600c6000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020548152602001908152602001600020805461123b90613a13565b80601f016020809104026020016040519081016040528092919081815260200182805461126790613a13565b80156112b45780601f10611289576101008083540402835291602001916112b4565b820191906000526020600020905b81548152906001019060200180831161129757829003601f168201915b50505050508282815181106112cc576112cb613bac565b5b6020026020010181905250806112e190613a76565b90506111c5565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc61133c61096b565b9081150290604051600060405180830381858888f19350505050158015611367573d6000803e3d6000fd5b5050565b61137c611376611789565b8361190c565b6113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613681565b60405180910390fd5b6113c784848484612048565b50505050565b60606113d88261173e565b60006113e26120a4565b90506000815111611402576040518060200160405280600081525061142d565b8061140c846120bb565b60405160200161141d929190613397565b6040516020818303038152906040525b915050919050565b600080826040516020016114499190613380565b6040516020818303038152906040528051906020012060001c90506002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61153c61184a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a3906134e1565b60405180910390fd5b6115b581611c3b565b50565b60006115c383611c08565b90506002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461163057600080fd5b81600b6000838152602001908152602001600020819055506116523082610853565b505050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061172757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061173757506117368261221c565b5b9050919050565b61174781612286565b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90613621565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661180483610bec565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611852611789565b73ffffffffffffffffffffffffffffffffffffffff16611870610e1a565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613601565b60405180910390fd5b565b60006118d382611c08565b905081600c600083815260200190815260200160002090805190602001906118fc9291906128cb565b506119078382611e6e565b505050565b60008061191883610bec565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061195a575061195981856114a0565b5b8061199857508373ffffffffffffffffffffffffffffffffffffffff166119808461080d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c182610bec565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613501565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613541565b60405180910390fd5b611a928383836122f2565b611a9d600082611791565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aed9190613929565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b449190613848565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c03838383612406565b505050565b600081604051602001611c1b9190613380565b6040516020818303038152906040528051906020012060001c9050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613561565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e619190613444565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed5906135e1565b60405180910390fd5b611ee781612286565b15611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90613521565b60405180910390fd5b611f33600083836122f2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f839190613848565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461204460008383612406565b5050565b6120538484846119a1565b61205f8484848461240b565b61209e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612095906134a1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612103576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612217565b600082905060005b6000821461213557808061211e90613a76565b915050600a8261212e919061389e565b915061210b565b60008167ffffffffffffffff81111561215157612150613bdb565b5b6040519080825280601f01601f1916602001820160405280156121835781602001600182028036833780820191505090505b5090505b600085146122105760018261219c9190613929565b9150600a856121ab9190613abf565b60306121b79190613848565b60f81b8183815181106121cd576121cc613bac565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612209919061389e565b9450612187565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6122fd838383611657565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123405761233b816125a2565b61237f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461237e5761237d83826125eb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c2576123bd81612758565b612401565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612400576123ff8282612829565b5b5b505050565b505050565b600061242c8473ffffffffffffffffffffffffffffffffffffffff166128a8565b15612595578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612455611789565b8786866040518563ffffffff1660e01b815260040161247794939291906133d6565b602060405180830381600087803b15801561249157600080fd5b505af19250505080156124c257506040513d601f19601f820116820180604052508101906124bf9190612e79565b60015b612545573d80600081146124f2576040519150601f19603f3d011682016040523d82523d6000602084013e6124f7565b606091505b5060008151141561253d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612534906134a1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061259a565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125f884610c9e565b6126029190613929565b90506000600760008481526020019081526020016000205490508181146126e7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061276c9190613929565b905060006009600084815260200190815260200160002054905060006008838154811061279c5761279b613bac565b5b9060005260206000200154905080600883815481106127be576127bd613bac565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061280d5761280c613b7d565b5b6001900381819060005260206000200160009055905550505050565b600061283483610c9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546128d790613a13565b90600052602060002090601f0160209004810192826128f95760008555612940565b82601f1061291257805160ff1916838001178555612940565b82800160010185558215612940579182015b8281111561293f578251825591602001919060010190612924565b5b50905061294d9190612951565b5090565b5b8082111561296a576000816000905550600101612952565b5090565b600061298161297c84613701565b6136dc565b905080838252602082019050828560208602820111156129a4576129a3613c0f565b5b60005b858110156129d457816129ba8882612af0565b8452602084019350602083019250506001810190506129a7565b5050509392505050565b60006129f16129ec8461372d565b6136dc565b90508083825260208201905082856020860282011115612a1457612a13613c0f565b5b60005b85811015612a6257813567ffffffffffffffff811115612a3a57612a39613c0a565b5b808601612a478982612bce565b85526020850194506020840193505050600181019050612a17565b5050509392505050565b6000612a7f612a7a84613759565b6136dc565b905082815260208101848484011115612a9b57612a9a613c14565b5b612aa68482856139d1565b509392505050565b6000612ac1612abc8461378a565b6136dc565b905082815260208101848484011115612add57612adc613c14565b5b612ae88482856139d1565b509392505050565b600081359050612aff816140de565b92915050565b600082601f830112612b1a57612b19613c0a565b5b8135612b2a84826020860161296e565b91505092915050565b600082601f830112612b4857612b47613c0a565b5b8135612b588482602086016129de565b91505092915050565b600081359050612b70816140f5565b92915050565b600081359050612b858161410c565b92915050565b600081519050612b9a8161410c565b92915050565b600082601f830112612bb557612bb4613c0a565b5b8135612bc5848260208601612a6c565b91505092915050565b600082601f830112612be357612be2613c0a565b5b8135612bf3848260208601612aae565b91505092915050565b600081359050612c0b81614123565b92915050565b600060208284031215612c2757612c26613c1e565b5b6000612c3584828501612af0565b91505092915050565b60008060408385031215612c5557612c54613c1e565b5b6000612c6385828601612af0565b9250506020612c7485828601612af0565b9150509250929050565b600080600060608486031215612c9757612c96613c1e565b5b6000612ca586828701612af0565b9350506020612cb686828701612af0565b9250506040612cc786828701612bfc565b9150509250925092565b60008060008060808587031215612ceb57612cea613c1e565b5b6000612cf987828801612af0565b9450506020612d0a87828801612af0565b9350506040612d1b87828801612bfc565b925050606085013567ffffffffffffffff811115612d3c57612d3b613c19565b5b612d4887828801612ba0565b91505092959194509250565b60008060408385031215612d6b57612d6a613c1e565b5b6000612d7985828601612af0565b9250506020612d8a85828601612b61565b9150509250929050565b60008060408385031215612dab57612daa613c1e565b5b6000612db985828601612af0565b9250506020612dca85828601612bfc565b9150509250929050565b60008060408385031215612deb57612dea613c1e565b5b600083013567ffffffffffffffff811115612e0957612e08613c19565b5b612e1585828601612b05565b925050602083013567ffffffffffffffff811115612e3657612e35613c19565b5b612e4285828601612b33565b9150509250929050565b600060208284031215612e6257612e61613c1e565b5b6000612e7084828501612b76565b91505092915050565b600060208284031215612e8f57612e8e613c1e565b5b6000612e9d84828501612b8b565b91505092915050565b600060208284031215612ebc57612ebb613c1e565b5b600082013567ffffffffffffffff811115612eda57612ed9613c19565b5b612ee684828501612bce565b91505092915050565b60008060408385031215612f0657612f05613c1e565b5b600083013567ffffffffffffffff811115612f2457612f23613c19565b5b612f3085828601612bce565b9250506020612f4185828601612bfc565b9150509250929050565b600060208284031215612f6157612f60613c1e565b5b6000612f6f84828501612bfc565b91505092915050565b6000612f848383613058565b905092915050565b612f958161395d565b82525050565b6000612fa6826137cb565b612fb081856137f9565b935083602082028501612fc2856137bb565b8060005b85811015612ffe5784840389528151612fdf8582612f78565b9450612fea836137ec565b925060208a01995050600181019050612fc6565b50829750879550505050505092915050565b6130198161396f565b82525050565b600061302a826137d6565b613034818561380a565b93506130448185602086016139e0565b61304d81613c23565b840191505092915050565b6000613063826137e1565b61306d818561381b565b935061307d8185602086016139e0565b61308681613c23565b840191505092915050565b600061309c826137e1565b6130a6818561382c565b93506130b68185602086016139e0565b6130bf81613c23565b840191505092915050565b60006130d5826137e1565b6130df818561383d565b93506130ef8185602086016139e0565b80840191505092915050565b6000613108602b8361382c565b915061311382613c34565b604082019050919050565b600061312b60328361382c565b915061313682613c83565b604082019050919050565b600061314e60278361382c565b915061315982613cd2565b604082019050919050565b600061317160268361382c565b915061317c82613d21565b604082019050919050565b600061319460258361382c565b915061319f82613d70565b604082019050919050565b60006131b7601c8361382c565b91506131c282613dbf565b602082019050919050565b60006131da60248361382c565b91506131e582613de8565b604082019050919050565b60006131fd60198361382c565b915061320882613e37565b602082019050919050565b600061322060298361382c565b915061322b82613e60565b604082019050919050565b600061324360258361382c565b915061324e82613eaf565b604082019050919050565b6000613266603e8361382c565b915061327182613efe565b604082019050919050565b600061328960208361382c565b915061329482613f4d565b602082019050919050565b60006132ac60208361382c565b91506132b782613f76565b602082019050919050565b60006132cf60188361382c565b91506132da82613f9f565b602082019050919050565b60006132f260218361382c565b91506132fd82613fc8565b604082019050919050565b6000613315602c8361382c565b915061332082614017565b604082019050919050565b6000613338602e8361382c565b915061334382614066565b604082019050919050565b600061335b601d8361382c565b9150613366826140b5565b602082019050919050565b61337a816139c7565b82525050565b600061338c82846130ca565b915081905092915050565b60006133a382856130ca565b91506133af82846130ca565b91508190509392505050565b60006020820190506133d06000830184612f8c565b92915050565b60006080820190506133eb6000830187612f8c565b6133f86020830186612f8c565b6134056040830185613371565b8181036060830152613417818461301f565b905095945050505050565b6000602082019050818103600083015261343c8184612f9b565b905092915050565b60006020820190506134596000830184613010565b92915050565b600060208201905081810360008301526134798184613091565b905092915050565b6000602082019050818103600083015261349a816130fb565b9050919050565b600060208201905081810360008301526134ba8161311e565b9050919050565b600060208201905081810360008301526134da81613141565b9050919050565b600060208201905081810360008301526134fa81613164565b9050919050565b6000602082019050818103600083015261351a81613187565b9050919050565b6000602082019050818103600083015261353a816131aa565b9050919050565b6000602082019050818103600083015261355a816131cd565b9050919050565b6000602082019050818103600083015261357a816131f0565b9050919050565b6000602082019050818103600083015261359a81613213565b9050919050565b600060208201905081810360008301526135ba81613236565b9050919050565b600060208201905081810360008301526135da81613259565b9050919050565b600060208201905081810360008301526135fa8161327c565b9050919050565b6000602082019050818103600083015261361a8161329f565b9050919050565b6000602082019050818103600083015261363a816132c2565b9050919050565b6000602082019050818103600083015261365a816132e5565b9050919050565b6000602082019050818103600083015261367a81613308565b9050919050565b6000602082019050818103600083015261369a8161332b565b9050919050565b600060208201905081810360008301526136ba8161334e565b9050919050565b60006020820190506136d66000830184613371565b92915050565b60006136e66136f7565b90506136f28282613a45565b919050565b6000604051905090565b600067ffffffffffffffff82111561371c5761371b613bdb565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561374857613747613bdb565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561377457613773613bdb565b5b61377d82613c23565b9050602081019050919050565b600067ffffffffffffffff8211156137a5576137a4613bdb565b5b6137ae82613c23565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613853826139c7565b915061385e836139c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561389357613892613af0565b5b828201905092915050565b60006138a9826139c7565b91506138b4836139c7565b9250826138c4576138c3613b1f565b5b828204905092915050565b60006138da826139c7565b91506138e5836139c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391e5761391d613af0565b5b828202905092915050565b6000613934826139c7565b915061393f836139c7565b92508282101561395257613951613af0565b5b828203905092915050565b6000613968826139a7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139fe5780820151818401526020810190506139e3565b83811115613a0d576000848401525b50505050565b60006002820490506001821680613a2b57607f821691505b60208210811415613a3f57613a3e613b4e565b5b50919050565b613a4e82613c23565b810181811067ffffffffffffffff82111715613a6d57613a6c613bdb565b5b80604052505050565b6000613a81826139c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ab457613ab3613af0565b5b600182019050919050565b6000613aca826139c7565b9150613ad5836139c7565b925082613ae557613ae4613b1f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4c656e677468206f66206e616d657320616e64207573657273206d757374206260008201527f652073616d652e00000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f446f6d61696e206973206265696e67207573656420627920616e6f746865722060008201527f757365722e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045746820746f2062757920646f6d61696e2e000000600082015250565b6140e78161395d565b81146140f257600080fd5b50565b6140fe8161396f565b811461410957600080fd5b50565b6141158161397b565b811461412057600080fd5b50565b61412c816139c7565b811461413757600080fd5b5056fea2646970667358221220b85827c876ec6a088e07edc4c5e6fb3265bb76f4d1b236e2bfa2f07157c6b5a364736f6c63430008070033

Deployed Bytecode Sourcemap

44153:4366:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35462:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22392:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23905:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23422:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48286:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36102:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46815:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24605:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35770:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25012:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36292:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47632:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22103:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21834:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43336:103;;;;;;;;;;;;;:::i;:::-;;47120:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42688:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22561:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24148:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45927:880;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47963:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48393:123;;;;;;;;;;;;;:::i;:::-;;25268:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22736:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47779:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24374:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43594:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47397:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35462:224;35564:4;35603:35;35588:50;;;:11;:50;;;;:90;;;;35642:36;35666:11;35642:23;:36::i;:::-;35588:90;35581:97;;35462:224;;;:::o;22392:100::-;22446:13;22479:5;22472:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22392:100;:::o;23905:171::-;23981:7;24001:23;24016:7;24001:14;:23::i;:::-;24044:15;:24;24060:7;24044:24;;;;;;;;;;;;;;;;;;;;;24037:31;;23905:171;;;:::o;23422:417::-;23503:13;23519:23;23534:7;23519:14;:23::i;:::-;23503:39;;23567:5;23561:11;;:2;:11;;;;23553:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:5;23645:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23670:37;23687:5;23694:12;:10;:12::i;:::-;23670:16;:37::i;:::-;23645:62;23623:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;23810:21;23819:2;23823:7;23810:8;:21::i;:::-;23492:347;23422:417;;:::o;48286:99::-;48329:7;48356:21;48349:28;;48286:99;:::o;36102:113::-;36163:7;36190:10;:17;;;;36183:24;;36102:113;:::o;46815:297::-;42574:13;:11;:13::i;:::-;46938:5:::1;:12;46922:5;:12;:28;46914:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47010:9;47005:100;47029:5;:12;47025:1;:16;47005:100;;;47063:30;47074:5;47080:1;47074:8;;;;;;;;:::i;:::-;;;;;;;;47084:5;47090:1;47084:8;;;;;;;;:::i;:::-;;;;;;;;47063:10;:30::i;:::-;47043:3;;;;:::i;:::-;;;47005:100;;;;46815:297:::0;;:::o;24605:336::-;24800:41;24819:12;:10;:12::i;:::-;24833:7;24800:18;:41::i;:::-;24792:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;24905:28;24915:4;24921:2;24925:7;24905:9;:28::i;:::-;24605:336;;;:::o;35770:256::-;35867:7;35903:23;35920:5;35903:16;:23::i;:::-;35895:5;:31;35887:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35992:12;:19;36005:5;35992:19;;;;;;;;;;;;;;;:26;36012:5;35992:26;;;;;;;;;;;;35985:33;;35770:256;;;;:::o;25012:185::-;25150:39;25167:4;25173:2;25177:7;25150:39;;;;;;;;;;;;:16;:39::i;:::-;25012:185;;;:::o;36292:233::-;36367:7;36403:30;:28;:30::i;:::-;36395:5;:38;36387:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36500:10;36511:5;36500:17;;;;;;;;:::i;:::-;;;;;;;;;;36493:24;;36292:233;;;:::o;47632:139::-;47691:7;47711:10;47724:11;47730:4;47724:5;:11::i;:::-;47711:24;;47753:6;:10;47760:2;47753:10;;;;;;;;;;;;47746:17;;;47632:139;;;:::o;22103:222::-;22175:7;22195:13;22211:7;:16;22219:7;22211:16;;;;;;;;;;;;;;;;;;;;;22195:32;;22263:1;22246:19;;:5;:19;;;;22238:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22312:5;22305:12;;;22103:222;;;:::o;21834:207::-;21906:7;21951:1;21934:19;;:5;:19;;;;21926:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22017:9;:16;22027:5;22017:16;;;;;;;;;;;;;;;;22010:23;;21834:207;;;:::o;43336:103::-;42574:13;:11;:13::i;:::-;43401:30:::1;43428:1;43401:18;:30::i;:::-;43336:103::o:0;47120:269::-;47183:7;47203:10;47216:11;47222:4;47216:5;:11::i;:::-;47203:24;;47265:1;47242:25;;:7;:11;47250:2;47242:11;;;;;;;;;;;;;;;;;;;;;:25;;;47238:59;;;44237:1;47282:15;;;;;47238:59;47326:1;47312:6;:10;47319:2;47312:10;;;;;;;;;;;;:15;47308:48;;44272:1;47342:14;;;;;47308:48;44307:1;47367:14;;;47120:269;;;;:::o;42688:87::-;42734:7;42761:6;;;;;;;;;;;42754:13;;42688:87;:::o;22561:104::-;22617:13;22650:7;22643:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:104;:::o;24148:155::-;24243:52;24262:12;:10;:12::i;:::-;24276:8;24286;24243:18;:52::i;:::-;24148:155;;:::o;45927:880::-;45997:14;46014:18;46027:4;46014:12;:18::i;:::-;45997:35;;44307:1;46051:6;:17;;46043:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46123:10;46136:11;46142:4;46136:5;:11::i;:::-;46123:24;;44237:1;46164:6;:18;46160:640;;;46199:11;46219:4;46213:18;46199:32;;46246:13;46262:20;46246:36;;46302:13;46297:95;46335:1;46329:3;:7;;;;:::i;:::-;46321:5;:15;46297:95;;;46375:1;46366:10;;;;;:::i;:::-;;;46338:7;;;;;:::i;:::-;;;;46297:95;;;;46427:5;46414:9;:18;;46406:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46498:4;46483:8;:12;46492:2;46483:12;;;;;;;;;;;:19;;;;;;;;;;;;:::i;:::-;;46517:21;46523:10;46535:2;46517:5;:21::i;:::-;46184:366;;46160:640;;;46592:6;:10;46599:2;46592:10;;;;;;;;;;;;46579:9;:23;;46571:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;46661:7;:11;46669:2;46661:11;;;;;;;;;;;;;;;;;;;;;46653:29;;:53;46702:3;46696:2;46684:9;:14;;;;:::i;:::-;46683:22;;;;:::i;:::-;46653:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46721:38;46731:7;:11;46739:2;46731:11;;;;;;;;;;;;;;;;;;;;;46744:10;46756:2;46721:9;:38::i;:::-;46787:1;46774:6;:10;46781:2;46774:10;;;;;;;;;;;:14;;;;46160:640;45986:821;;45927:880;:::o;47963:315::-;48017:15;48045:13;48061:16;48071:5;48061:9;:16::i;:::-;48045:32;;48088:21;48125:5;48112:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48088:43;;48147:9;48142:106;48166:5;48162:1;:9;48142:106;;;48204:8;:32;48213:12;:19;48226:5;48213:19;;;;;;;;;;;;;;;:22;48233:1;48213:22;;;;;;;;;;;;48204:32;;;;;;;;;;;48193:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;48199:1;48193:8;;;;;;;;:::i;:::-;;;;;;;:43;;;;48173:3;;;;:::i;:::-;;;48142:106;;;;48265:5;48258:12;;;;47963:315;;;:::o;48393:123::-;48436:18;48465:6;;;;;;;;;;;48436:36;;48483:2;:11;;:25;48495:12;:10;:12::i;:::-;48483:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48425:91;48393:123::o;25268:323::-;25442:41;25461:12;:10;:12::i;:::-;25475:7;25442:18;:41::i;:::-;25434:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25545:38;25559:4;25565:2;25569:7;25578:4;25545:13;:38::i;:::-;25268:323;;;;:::o;22736:281::-;22809:13;22835:23;22850:7;22835:14;:23::i;:::-;22871:21;22895:10;:8;:10::i;:::-;22871:34;;22947:1;22929:7;22923:21;:25;:86;;;;;;;;;;;;;;;;;22975:7;22984:18;:7;:16;:18::i;:::-;22958:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22923:86;22916:93;;;22736:281;;;:::o;47779:176::-;47843:7;47863:10;47911:4;47894:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;47884:33;;;;;;47876:42;;47863:55;;47936:7;:11;47944:2;47936:11;;;;;;;;;;;;;;;;;;;;;47929:18;;;47779:176;;;:::o;24374:164::-;24471:4;24495:18;:25;24514:5;24495:25;;;;;;;;;;;;;;;:35;24521:8;24495:35;;;;;;;;;;;;;;;;;;;;;;;;;24488:42;;24374:164;;;;:::o;43594:201::-;42574:13;:11;:13::i;:::-;43703:1:::1;43683:22;;:8;:22;;;;43675:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43759:28;43778:8;43759:18;:28::i;:::-;43594:201:::0;:::o;47397:227::-;47471:10;47484:11;47490:4;47484:5;:11::i;:::-;47471:24;;47528:7;:11;47536:2;47528:11;;;;;;;;;;;;;;;;;;;;;47514:25;;:10;:25;;;47506:34;;;;;;47564:5;47551:6;:10;47558:2;47551:10;;;;;;;;;;;:18;;;;47580:26;47596:4;47603:2;47580:7;:26::i;:::-;47460:164;47397:227;;:::o;34004:126::-;;;;:::o;21465:305::-;21567:4;21619:25;21604:40;;;:11;:40;;;;:105;;;;21676:33;21661:48;;;:11;:48;;;;21604:105;:158;;;;21726:36;21750:11;21726:23;:36::i;:::-;21604:158;21584:178;;21465:305;;;:::o;31880:135::-;31962:16;31970:7;31962;:16::i;:::-;31954:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31880:135;:::o;11349:98::-;11402:7;11429:10;11422:17;;11349:98;:::o;31159:174::-;31261:2;31234:15;:24;31250:7;31234:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31317:7;31313:2;31279:46;;31288:23;31303:7;31288:14;:23::i;:::-;31279:46;;;;;;;;;;;;31159:174;;:::o;42853:132::-;42928:12;:10;:12::i;:::-;42917:23;;:7;:5;:7::i;:::-;:23;;;42909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42853:132::o;45612:164::-;45687:10;45700:11;45706:4;45700:5;:11::i;:::-;45687:24;;45737:4;45722:8;:12;45731:2;45722:12;;;;;;;;;;;:19;;;;;;;;;;;;:::i;:::-;;45752:16;45758:5;45765:2;45752:5;:16::i;:::-;45676:100;45612:164;;:::o;27392:264::-;27485:4;27502:13;27518:23;27533:7;27518:14;:23::i;:::-;27502:39;;27571:5;27560:16;;:7;:16;;;:52;;;;27580:32;27597:5;27604:7;27580:16;:32::i;:::-;27560:52;:87;;;;27640:7;27616:31;;:20;27628:7;27616:11;:20::i;:::-;:31;;;27560:87;27552:96;;;27392:264;;;;:::o;30415:625::-;30574:4;30547:31;;:23;30562:7;30547:14;:23::i;:::-;:31;;;30539:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30653:1;30639:16;;:2;:16;;;;30631:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30709:39;30730:4;30736:2;30740:7;30709:20;:39::i;:::-;30813:29;30830:1;30834:7;30813:8;:29::i;:::-;30874:1;30855:9;:15;30865:4;30855:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30903:1;30886:9;:13;30896:2;30886:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30934:2;30915:7;:16;30923:7;30915:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30973:7;30969:2;30954:27;;30963:4;30954:27;;;;;;;;;;;;30994:38;31014:4;31020:2;31024:7;30994:19;:38::i;:::-;30415:625;;;:::o;45784:135::-;45842:7;45904:4;45887:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;45877:33;;;;;;45869:42;;45862:49;;45784:135;;;:::o;43955:191::-;44029:16;44048:6;;;;;;;;;;;44029:25;;44074:8;44065:6;;:17;;;;;;;;;;;;;;;;;;44129:8;44098:40;;44119:8;44098:40;;;;;;;;;;;;44018:128;43955:191;:::o;31476:315::-;31631:8;31622:17;;:5;:17;;;;31614:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31718:8;31680:18;:25;31699:5;31680:25;;;;;;;;;;;;;;;:35;31706:8;31680:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31764:8;31742:41;;31757:5;31742:41;;;31774:8;31742:41;;;;;;:::i;:::-;;;;;;;;31476:315;;;:::o;28990:439::-;29084:1;29070:16;;:2;:16;;;;29062:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29143:16;29151:7;29143;:16::i;:::-;29142:17;29134:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29205:45;29234:1;29238:2;29242:7;29205:20;:45::i;:::-;29280:1;29263:9;:13;29273:2;29263:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29311:2;29292:7;:16;29300:7;29292:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29356:7;29352:2;29331:33;;29348:1;29331:33;;;;;;;;;;;;29377:44;29405:1;29409:2;29413:7;29377:19;:44::i;:::-;28990:439;;:::o;26472:313::-;26628:28;26638:4;26644:2;26648:7;26628:9;:28::i;:::-;26675:47;26698:4;26704:2;26708:7;26717:4;26675:22;:47::i;:::-;26667:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26472:313;;;;:::o;23266:94::-;23317:13;23343:9;;;;;;;;;;;;;;23266:94;:::o;343:723::-;399:13;629:1;620:5;:10;616:53;;;647:10;;;;;;;;;;;;;;;;;;;;;616:53;679:12;694:5;679:20;;710:14;735:78;750:1;742:4;:9;735:78;;768:8;;;;;:::i;:::-;;;;799:2;791:10;;;;;:::i;:::-;;;735:78;;;823:19;855:6;845:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;823:39;;873:154;889:1;880:5;:10;873:154;;917:1;907:11;;;;;:::i;:::-;;;984:2;976:5;:10;;;;:::i;:::-;963:2;:24;;;;:::i;:::-;950:39;;933:6;940;933:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1013:2;1004:11;;;;;:::i;:::-;;;873:154;;;1051:6;1037:21;;;;;343:723;;;;:::o;13881:157::-;13966:4;14005:25;13990:40;;;:11;:40;;;;13983:47;;13881:157;;;:::o;27098:127::-;27163:4;27215:1;27187:30;;:7;:16;27195:7;27187:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27180:37;;27098:127;;;:::o;37138:589::-;37282:45;37309:4;37315:2;37319:7;37282:26;:45::i;:::-;37360:1;37344:18;;:4;:18;;;37340:187;;;37379:40;37411:7;37379:31;:40::i;:::-;37340:187;;;37449:2;37441:10;;:4;:10;;;37437:90;;37468:47;37501:4;37507:7;37468:32;:47::i;:::-;37437:90;37340:187;37555:1;37541:16;;:2;:16;;;37537:183;;;37574:45;37611:7;37574:36;:45::i;:::-;37537:183;;;37647:4;37641:10;;:2;:10;;;37637:83;;37668:40;37696:2;37700:7;37668:27;:40::i;:::-;37637:83;37537:183;37138:589;;;:::o;34515:125::-;;;;:::o;32579:853::-;32733:4;32754:15;:2;:13;;;:15::i;:::-;32750:675;;;32806:2;32790:36;;;32827:12;:10;:12::i;:::-;32841:4;32847:7;32856:4;32790:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32786:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33048:1;33031:6;:13;:18;33027:328;;;33074:60;;;;;;;;;;:::i;:::-;;;;;;;;33027:328;33305:6;33299:13;33290:6;33286:2;33282:15;33275:38;32786:584;32922:41;;;32912:51;;;:6;:51;;;;32905:58;;;;;32750:675;33409:4;33402:11;;32579:853;;;;;;;:::o;38450:164::-;38554:10;:17;;;;38527:15;:24;38543:7;38527:24;;;;;;;;;;;:44;;;;38582:10;38598:7;38582:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38450:164;:::o;39241:988::-;39507:22;39557:1;39532:22;39549:4;39532:16;:22::i;:::-;:26;;;;:::i;:::-;39507:51;;39569:18;39590:17;:26;39608:7;39590:26;;;;;;;;;;;;39569:47;;39737:14;39723:10;:28;39719:328;;39768:19;39790:12;:18;39803:4;39790:18;;;;;;;;;;;;;;;:34;39809:14;39790:34;;;;;;;;;;;;39768:56;;39874:11;39841:12;:18;39854:4;39841:18;;;;;;;;;;;;;;;:30;39860:10;39841:30;;;;;;;;;;;:44;;;;39991:10;39958:17;:30;39976:11;39958:30;;;;;;;;;;;:43;;;;39753:294;39719:328;40143:17;:26;40161:7;40143:26;;;;;;;;;;;40136:33;;;40187:12;:18;40200:4;40187:18;;;;;;;;;;;;;;;:34;40206:14;40187:34;;;;;;;;;;;40180:41;;;39322:907;;39241:988;;:::o;40524:1079::-;40777:22;40822:1;40802:10;:17;;;;:21;;;;:::i;:::-;40777:46;;40834:18;40855:15;:24;40871:7;40855:24;;;;;;;;;;;;40834:45;;41206:19;41228:10;41239:14;41228:26;;;;;;;;:::i;:::-;;;;;;;;;;41206:48;;41292:11;41267:10;41278;41267:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41403:10;41372:15;:28;41388:11;41372:28;;;;;;;;;;;:41;;;;41544:15;:24;41560:7;41544:24;;;;;;;;;;;41537:31;;;41579:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40595:1008;;;40524:1079;:::o;38028:221::-;38113:14;38130:20;38147:2;38130:16;:20::i;:::-;38113:37;;38188:7;38161:12;:16;38174:2;38161:16;;;;;;;;;;;;;;;:24;38178:6;38161:24;;;;;;;;;;;:34;;;;38235:6;38206:17;:26;38224:7;38206:26;;;;;;;;;;;:35;;;;38102:147;38028:221;;:::o;3489:326::-;3549:4;3806:1;3784:7;:19;;;:23;3777:30;;3489:326;;;:::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;768:957::-;874:5;899:91;915:74;982:6;915:74;:::i;:::-;899:91;:::i;:::-;890:100;;1010:5;1039:6;1032:5;1025:21;1073:4;1066:5;1062:16;1055:23;;1099:6;1149:3;1141:4;1133:6;1129:17;1124:3;1120:27;1117:36;1114:143;;;1168:79;;:::i;:::-;1114:143;1281:1;1266:453;1291:6;1288:1;1285:13;1266:453;;;1373:3;1360:17;1409:18;1396:11;1393:35;1390:122;;;1431:79;;:::i;:::-;1390:122;1555:11;1547:6;1543:24;1593:47;1636:3;1624:10;1593:47;:::i;:::-;1588:3;1581:60;1670:4;1665:3;1661:14;1654:21;;1704:4;1699:3;1695:14;1688:21;;1326:393;;1313:1;1310;1306:9;1301:14;;1266:453;;;1270:14;880:845;;768:957;;;;;:::o;1731:410::-;1808:5;1833:65;1849:48;1890:6;1849:48;:::i;:::-;1833:65;:::i;:::-;1824:74;;1921:6;1914:5;1907:21;1959:4;1952:5;1948:16;1997:3;1988:6;1983:3;1979:16;1976:25;1973:112;;;2004:79;;:::i;:::-;1973:112;2094:41;2128:6;2123:3;2118;2094:41;:::i;:::-;1814:327;1731:410;;;;;:::o;2147:412::-;2225:5;2250:66;2266:49;2308:6;2266:49;:::i;:::-;2250:66;:::i;:::-;2241:75;;2339:6;2332:5;2325:21;2377:4;2370:5;2366:16;2415:3;2406:6;2401:3;2397:16;2394:25;2391:112;;;2422:79;;:::i;:::-;2391:112;2512:41;2546:6;2541:3;2536;2512:41;:::i;:::-;2231:328;2147:412;;;;;:::o;2565:139::-;2611:5;2649:6;2636:20;2627:29;;2665:33;2692:5;2665:33;:::i;:::-;2565:139;;;;:::o;2727:370::-;2798:5;2847:3;2840:4;2832:6;2828:17;2824:27;2814:122;;2855:79;;:::i;:::-;2814:122;2972:6;2959:20;2997:94;3087:3;3079:6;3072:4;3064:6;3060:17;2997:94;:::i;:::-;2988:103;;2804:293;2727:370;;;;:::o;3119:390::-;3200:5;3249:3;3242:4;3234:6;3230:17;3226:27;3216:122;;3257:79;;:::i;:::-;3216:122;3374:6;3361:20;3399:104;3499:3;3491:6;3484:4;3476:6;3472:17;3399:104;:::i;:::-;3390:113;;3206:303;3119:390;;;;:::o;3515:133::-;3558:5;3596:6;3583:20;3574:29;;3612:30;3636:5;3612:30;:::i;:::-;3515:133;;;;:::o;3654:137::-;3699:5;3737:6;3724:20;3715:29;;3753:32;3779:5;3753:32;:::i;:::-;3654:137;;;;:::o;3797:141::-;3853:5;3884:6;3878:13;3869:22;;3900:32;3926:5;3900:32;:::i;:::-;3797:141;;;;:::o;3957:338::-;4012:5;4061:3;4054:4;4046:6;4042:17;4038:27;4028:122;;4069:79;;:::i;:::-;4028:122;4186:6;4173:20;4211:78;4285:3;4277:6;4270:4;4262:6;4258:17;4211:78;:::i;:::-;4202:87;;4018:277;3957:338;;;;:::o;4315:340::-;4371:5;4420:3;4413:4;4405:6;4401:17;4397:27;4387:122;;4428:79;;:::i;:::-;4387:122;4545:6;4532:20;4570:79;4645:3;4637:6;4630:4;4622:6;4618:17;4570:79;:::i;:::-;4561:88;;4377:278;4315:340;;;;:::o;4661:139::-;4707:5;4745:6;4732:20;4723:29;;4761:33;4788:5;4761:33;:::i;:::-;4661:139;;;;:::o;4806:329::-;4865:6;4914:2;4902:9;4893:7;4889:23;4885:32;4882:119;;;4920:79;;:::i;:::-;4882:119;5040:1;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5011:117;4806:329;;;;:::o;5141:474::-;5209:6;5217;5266:2;5254:9;5245:7;5241:23;5237:32;5234:119;;;5272:79;;:::i;:::-;5234:119;5392:1;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5363:117;5519:2;5545:53;5590:7;5581:6;5570:9;5566:22;5545:53;:::i;:::-;5535:63;;5490:118;5141:474;;;;;:::o;5621:619::-;5698:6;5706;5714;5763:2;5751:9;5742:7;5738:23;5734:32;5731:119;;;5769:79;;:::i;:::-;5731:119;5889:1;5914:53;5959:7;5950:6;5939:9;5935:22;5914:53;:::i;:::-;5904:63;;5860:117;6016:2;6042:53;6087:7;6078:6;6067:9;6063:22;6042:53;:::i;:::-;6032:63;;5987:118;6144:2;6170:53;6215:7;6206:6;6195:9;6191:22;6170:53;:::i;:::-;6160:63;;6115:118;5621:619;;;;;:::o;6246:943::-;6341:6;6349;6357;6365;6414:3;6402:9;6393:7;6389:23;6385:33;6382:120;;;6421:79;;:::i;:::-;6382:120;6541:1;6566:53;6611:7;6602:6;6591:9;6587:22;6566:53;:::i;:::-;6556:63;;6512:117;6668:2;6694:53;6739:7;6730:6;6719:9;6715:22;6694:53;:::i;:::-;6684:63;;6639:118;6796:2;6822:53;6867:7;6858:6;6847:9;6843:22;6822:53;:::i;:::-;6812:63;;6767:118;6952:2;6941:9;6937:18;6924:32;6983:18;6975:6;6972:30;6969:117;;;7005:79;;:::i;:::-;6969:117;7110:62;7164:7;7155:6;7144:9;7140:22;7110:62;:::i;:::-;7100:72;;6895:287;6246:943;;;;;;;:::o;7195:468::-;7260:6;7268;7317:2;7305:9;7296:7;7292:23;7288:32;7285:119;;;7323:79;;:::i;:::-;7285:119;7443:1;7468:53;7513:7;7504:6;7493:9;7489:22;7468:53;:::i;:::-;7458:63;;7414:117;7570:2;7596:50;7638:7;7629:6;7618:9;7614:22;7596:50;:::i;:::-;7586:60;;7541:115;7195:468;;;;;:::o;7669:474::-;7737:6;7745;7794:2;7782:9;7773:7;7769:23;7765:32;7762:119;;;7800:79;;:::i;:::-;7762:119;7920:1;7945:53;7990:7;7981:6;7970:9;7966:22;7945:53;:::i;:::-;7935:63;;7891:117;8047:2;8073:53;8118:7;8109:6;8098:9;8094:22;8073:53;:::i;:::-;8063:63;;8018:118;7669:474;;;;;:::o;8149:914::-;8277:6;8285;8334:2;8322:9;8313:7;8309:23;8305:32;8302:119;;;8340:79;;:::i;:::-;8302:119;8488:1;8477:9;8473:17;8460:31;8518:18;8510:6;8507:30;8504:117;;;8540:79;;:::i;:::-;8504:117;8645:78;8715:7;8706:6;8695:9;8691:22;8645:78;:::i;:::-;8635:88;;8431:302;8800:2;8789:9;8785:18;8772:32;8831:18;8823:6;8820:30;8817:117;;;8853:79;;:::i;:::-;8817:117;8958:88;9038:7;9029:6;9018:9;9014:22;8958:88;:::i;:::-;8948:98;;8743:313;8149:914;;;;;:::o;9069:327::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:52;9371:7;9362:6;9351:9;9347:22;9327:52;:::i;:::-;9317:62;;9273:116;9069:327;;;;:::o;9402:349::-;9471:6;9520:2;9508:9;9499:7;9495:23;9491:32;9488:119;;;9526:79;;:::i;:::-;9488:119;9646:1;9671:63;9726:7;9717:6;9706:9;9702:22;9671:63;:::i;:::-;9661:73;;9617:127;9402:349;;;;:::o;9757:509::-;9826:6;9875:2;9863:9;9854:7;9850:23;9846:32;9843:119;;;9881:79;;:::i;:::-;9843:119;10029:1;10018:9;10014:17;10001:31;10059:18;10051:6;10048:30;10045:117;;;10081:79;;:::i;:::-;10045:117;10186:63;10241:7;10232:6;10221:9;10217:22;10186:63;:::i;:::-;10176:73;;9972:287;9757:509;;;;:::o;10272:654::-;10350:6;10358;10407:2;10395:9;10386:7;10382:23;10378:32;10375:119;;;10413:79;;:::i;:::-;10375:119;10561:1;10550:9;10546:17;10533:31;10591:18;10583:6;10580:30;10577:117;;;10613:79;;:::i;:::-;10577:117;10718:63;10773:7;10764:6;10753:9;10749:22;10718:63;:::i;:::-;10708:73;;10504:287;10830:2;10856:53;10901:7;10892:6;10881:9;10877:22;10856:53;:::i;:::-;10846:63;;10801:118;10272:654;;;;;:::o;10932:329::-;10991:6;11040:2;11028:9;11019:7;11015:23;11011:32;11008:119;;;11046:79;;:::i;:::-;11008:119;11166:1;11191:53;11236:7;11227:6;11216:9;11212:22;11191:53;:::i;:::-;11181:63;;11137:117;10932:329;;;;:::o;11267:196::-;11356:10;11391:66;11453:3;11445:6;11391:66;:::i;:::-;11377:80;;11267:196;;;;:::o;11469:118::-;11556:24;11574:5;11556:24;:::i;:::-;11551:3;11544:37;11469:118;;:::o;11621:991::-;11760:3;11789:64;11847:5;11789:64;:::i;:::-;11869:96;11958:6;11953:3;11869:96;:::i;:::-;11862:103;;11991:3;12036:4;12028:6;12024:17;12019:3;12015:27;12066:66;12126:5;12066:66;:::i;:::-;12155:7;12186:1;12171:396;12196:6;12193:1;12190:13;12171:396;;;12267:9;12261:4;12257:20;12252:3;12245:33;12318:6;12312:13;12346:84;12425:4;12410:13;12346:84;:::i;:::-;12338:92;;12453:70;12516:6;12453:70;:::i;:::-;12443:80;;12552:4;12547:3;12543:14;12536:21;;12231:336;12218:1;12215;12211:9;12206:14;;12171:396;;;12175:14;12583:4;12576:11;;12603:3;12596:10;;11765:847;;;;;11621:991;;;;:::o;12618:109::-;12699:21;12714:5;12699:21;:::i;:::-;12694:3;12687:34;12618:109;;:::o;12733:360::-;12819:3;12847:38;12879:5;12847:38;:::i;:::-;12901:70;12964:6;12959:3;12901:70;:::i;:::-;12894:77;;12980:52;13025:6;13020:3;13013:4;13006:5;13002:16;12980:52;:::i;:::-;13057:29;13079:6;13057:29;:::i;:::-;13052:3;13048:39;13041:46;;12823:270;12733:360;;;;:::o;13099:344::-;13177:3;13205:39;13238:5;13205:39;:::i;:::-;13260:61;13314:6;13309:3;13260:61;:::i;:::-;13253:68;;13330:52;13375:6;13370:3;13363:4;13356:5;13352:16;13330:52;:::i;:::-;13407:29;13429:6;13407:29;:::i;:::-;13402:3;13398:39;13391:46;;13181:262;13099:344;;;;:::o;13449:364::-;13537:3;13565:39;13598:5;13565:39;:::i;:::-;13620:71;13684:6;13679:3;13620:71;:::i;:::-;13613:78;;13700:52;13745:6;13740:3;13733:4;13726:5;13722:16;13700:52;:::i;:::-;13777:29;13799:6;13777:29;:::i;:::-;13772:3;13768:39;13761:46;;13541:272;13449:364;;;;:::o;13819:377::-;13925:3;13953:39;13986:5;13953:39;:::i;:::-;14008:89;14090:6;14085:3;14008:89;:::i;:::-;14001:96;;14106:52;14151:6;14146:3;14139:4;14132:5;14128:16;14106:52;:::i;:::-;14183:6;14178:3;14174:16;14167:23;;13929:267;13819:377;;;;:::o;14202:366::-;14344:3;14365:67;14429:2;14424:3;14365:67;:::i;:::-;14358:74;;14441:93;14530:3;14441:93;:::i;:::-;14559:2;14554:3;14550:12;14543:19;;14202:366;;;:::o;14574:::-;14716:3;14737:67;14801:2;14796:3;14737:67;:::i;:::-;14730:74;;14813:93;14902:3;14813:93;:::i;:::-;14931:2;14926:3;14922:12;14915:19;;14574:366;;;:::o;14946:::-;15088:3;15109:67;15173:2;15168:3;15109:67;:::i;:::-;15102:74;;15185:93;15274:3;15185:93;:::i;:::-;15303:2;15298:3;15294:12;15287:19;;14946:366;;;:::o;15318:::-;15460:3;15481:67;15545:2;15540:3;15481:67;:::i;:::-;15474:74;;15557:93;15646:3;15557:93;:::i;:::-;15675:2;15670:3;15666:12;15659:19;;15318:366;;;:::o;15690:::-;15832:3;15853:67;15917:2;15912:3;15853:67;:::i;:::-;15846:74;;15929:93;16018:3;15929:93;:::i;:::-;16047:2;16042:3;16038:12;16031:19;;15690:366;;;:::o;16062:::-;16204:3;16225:67;16289:2;16284:3;16225:67;:::i;:::-;16218:74;;16301:93;16390:3;16301:93;:::i;:::-;16419:2;16414:3;16410:12;16403:19;;16062:366;;;:::o;16434:::-;16576:3;16597:67;16661:2;16656:3;16597:67;:::i;:::-;16590:74;;16673:93;16762:3;16673:93;:::i;:::-;16791:2;16786:3;16782:12;16775:19;;16434:366;;;:::o;16806:::-;16948:3;16969:67;17033:2;17028:3;16969:67;:::i;:::-;16962:74;;17045:93;17134:3;17045:93;:::i;:::-;17163:2;17158:3;17154:12;17147:19;;16806:366;;;:::o;17178:::-;17320:3;17341:67;17405:2;17400:3;17341:67;:::i;:::-;17334:74;;17417:93;17506:3;17417:93;:::i;:::-;17535:2;17530:3;17526:12;17519:19;;17178:366;;;:::o;17550:::-;17692:3;17713:67;17777:2;17772:3;17713:67;:::i;:::-;17706:74;;17789:93;17878:3;17789:93;:::i;:::-;17907:2;17902:3;17898:12;17891:19;;17550:366;;;:::o;17922:::-;18064:3;18085:67;18149:2;18144:3;18085:67;:::i;:::-;18078:74;;18161:93;18250:3;18161:93;:::i;:::-;18279:2;18274:3;18270:12;18263:19;;17922:366;;;:::o;18294:::-;18436:3;18457:67;18521:2;18516:3;18457:67;:::i;:::-;18450:74;;18533:93;18622:3;18533:93;:::i;:::-;18651:2;18646:3;18642:12;18635:19;;18294:366;;;:::o;18666:::-;18808:3;18829:67;18893:2;18888:3;18829:67;:::i;:::-;18822:74;;18905:93;18994:3;18905:93;:::i;:::-;19023:2;19018:3;19014:12;19007:19;;18666:366;;;:::o;19038:::-;19180:3;19201:67;19265:2;19260:3;19201:67;:::i;:::-;19194:74;;19277:93;19366:3;19277:93;:::i;:::-;19395:2;19390:3;19386:12;19379:19;;19038:366;;;:::o;19410:::-;19552:3;19573:67;19637:2;19632:3;19573:67;:::i;:::-;19566:74;;19649:93;19738:3;19649:93;:::i;:::-;19767:2;19762:3;19758:12;19751:19;;19410:366;;;:::o;19782:::-;19924:3;19945:67;20009:2;20004:3;19945:67;:::i;:::-;19938:74;;20021:93;20110:3;20021:93;:::i;:::-;20139:2;20134:3;20130:12;20123:19;;19782:366;;;:::o;20154:::-;20296:3;20317:67;20381:2;20376:3;20317:67;:::i;:::-;20310:74;;20393:93;20482:3;20393:93;:::i;:::-;20511:2;20506:3;20502:12;20495:19;;20154:366;;;:::o;20526:::-;20668:3;20689:67;20753:2;20748:3;20689:67;:::i;:::-;20682:74;;20765:93;20854:3;20765:93;:::i;:::-;20883:2;20878:3;20874:12;20867:19;;20526:366;;;:::o;20898:118::-;20985:24;21003:5;20985:24;:::i;:::-;20980:3;20973:37;20898:118;;:::o;21022:275::-;21154:3;21176:95;21267:3;21258:6;21176:95;:::i;:::-;21169:102;;21288:3;21281:10;;21022:275;;;;:::o;21303:435::-;21483:3;21505:95;21596:3;21587:6;21505:95;:::i;:::-;21498:102;;21617:95;21708:3;21699:6;21617:95;:::i;:::-;21610:102;;21729:3;21722:10;;21303:435;;;;;:::o;21744:222::-;21837:4;21875:2;21864:9;21860:18;21852:26;;21888:71;21956:1;21945:9;21941:17;21932:6;21888:71;:::i;:::-;21744:222;;;;:::o;21972:640::-;22167:4;22205:3;22194:9;22190:19;22182:27;;22219:71;22287:1;22276:9;22272:17;22263:6;22219:71;:::i;:::-;22300:72;22368:2;22357:9;22353:18;22344:6;22300:72;:::i;:::-;22382;22450:2;22439:9;22435:18;22426:6;22382:72;:::i;:::-;22501:9;22495:4;22491:20;22486:2;22475:9;22471:18;22464:48;22529:76;22600:4;22591:6;22529:76;:::i;:::-;22521:84;;21972:640;;;;;;;:::o;22618:413::-;22781:4;22819:2;22808:9;22804:18;22796:26;;22868:9;22862:4;22858:20;22854:1;22843:9;22839:17;22832:47;22896:128;23019:4;23010:6;22896:128;:::i;:::-;22888:136;;22618:413;;;;:::o;23037:210::-;23124:4;23162:2;23151:9;23147:18;23139:26;;23175:65;23237:1;23226:9;23222:17;23213:6;23175:65;:::i;:::-;23037:210;;;;:::o;23253:313::-;23366:4;23404:2;23393:9;23389:18;23381:26;;23453:9;23447:4;23443:20;23439:1;23428:9;23424:17;23417:47;23481:78;23554:4;23545:6;23481:78;:::i;:::-;23473:86;;23253:313;;;;:::o;23572:419::-;23738:4;23776:2;23765:9;23761:18;23753:26;;23825:9;23819:4;23815:20;23811:1;23800:9;23796:17;23789:47;23853:131;23979:4;23853:131;:::i;:::-;23845:139;;23572:419;;;:::o;23997:::-;24163:4;24201:2;24190:9;24186:18;24178:26;;24250:9;24244:4;24240:20;24236:1;24225:9;24221:17;24214:47;24278:131;24404:4;24278:131;:::i;:::-;24270:139;;23997:419;;;:::o;24422:::-;24588:4;24626:2;24615:9;24611:18;24603:26;;24675:9;24669:4;24665:20;24661:1;24650:9;24646:17;24639:47;24703:131;24829:4;24703:131;:::i;:::-;24695:139;;24422:419;;;:::o;24847:::-;25013:4;25051:2;25040:9;25036:18;25028:26;;25100:9;25094:4;25090:20;25086:1;25075:9;25071:17;25064:47;25128:131;25254:4;25128:131;:::i;:::-;25120:139;;24847:419;;;:::o;25272:::-;25438:4;25476:2;25465:9;25461:18;25453:26;;25525:9;25519:4;25515:20;25511:1;25500:9;25496:17;25489:47;25553:131;25679:4;25553:131;:::i;:::-;25545:139;;25272:419;;;:::o;25697:::-;25863:4;25901:2;25890:9;25886:18;25878:26;;25950:9;25944:4;25940:20;25936:1;25925:9;25921:17;25914:47;25978:131;26104:4;25978:131;:::i;:::-;25970:139;;25697:419;;;:::o;26122:::-;26288:4;26326:2;26315:9;26311:18;26303:26;;26375:9;26369:4;26365:20;26361:1;26350:9;26346:17;26339:47;26403:131;26529:4;26403:131;:::i;:::-;26395:139;;26122:419;;;:::o;26547:::-;26713:4;26751:2;26740:9;26736:18;26728:26;;26800:9;26794:4;26790:20;26786:1;26775:9;26771:17;26764:47;26828:131;26954:4;26828:131;:::i;:::-;26820:139;;26547:419;;;:::o;26972:::-;27138:4;27176:2;27165:9;27161:18;27153:26;;27225:9;27219:4;27215:20;27211:1;27200:9;27196:17;27189:47;27253:131;27379:4;27253:131;:::i;:::-;27245:139;;26972:419;;;:::o;27397:::-;27563:4;27601:2;27590:9;27586:18;27578:26;;27650:9;27644:4;27640:20;27636:1;27625:9;27621:17;27614:47;27678:131;27804:4;27678:131;:::i;:::-;27670:139;;27397:419;;;:::o;27822:::-;27988:4;28026:2;28015:9;28011:18;28003:26;;28075:9;28069:4;28065:20;28061:1;28050:9;28046:17;28039:47;28103:131;28229:4;28103:131;:::i;:::-;28095:139;;27822:419;;;:::o;28247:::-;28413:4;28451:2;28440:9;28436:18;28428:26;;28500:9;28494:4;28490:20;28486:1;28475:9;28471:17;28464:47;28528:131;28654:4;28528:131;:::i;:::-;28520:139;;28247:419;;;:::o;28672:::-;28838:4;28876:2;28865:9;28861:18;28853:26;;28925:9;28919:4;28915:20;28911:1;28900:9;28896:17;28889:47;28953:131;29079:4;28953:131;:::i;:::-;28945:139;;28672:419;;;:::o;29097:::-;29263:4;29301:2;29290:9;29286:18;29278:26;;29350:9;29344:4;29340:20;29336:1;29325:9;29321:17;29314:47;29378:131;29504:4;29378:131;:::i;:::-;29370:139;;29097:419;;;:::o;29522:::-;29688:4;29726:2;29715:9;29711:18;29703:26;;29775:9;29769:4;29765:20;29761:1;29750:9;29746:17;29739:47;29803:131;29929:4;29803:131;:::i;:::-;29795:139;;29522:419;;;:::o;29947:::-;30113:4;30151:2;30140:9;30136:18;30128:26;;30200:9;30194:4;30190:20;30186:1;30175:9;30171:17;30164:47;30228:131;30354:4;30228:131;:::i;:::-;30220:139;;29947:419;;;:::o;30372:::-;30538:4;30576:2;30565:9;30561:18;30553:26;;30625:9;30619:4;30615:20;30611:1;30600:9;30596:17;30589:47;30653:131;30779:4;30653:131;:::i;:::-;30645:139;;30372:419;;;:::o;30797:::-;30963:4;31001:2;30990:9;30986:18;30978:26;;31050:9;31044:4;31040:20;31036:1;31025:9;31021:17;31014:47;31078:131;31204:4;31078:131;:::i;:::-;31070:139;;30797:419;;;:::o;31222:222::-;31315:4;31353:2;31342:9;31338:18;31330:26;;31366:71;31434:1;31423:9;31419:17;31410:6;31366:71;:::i;:::-;31222:222;;;;:::o;31450:129::-;31484:6;31511:20;;:::i;:::-;31501:30;;31540:33;31568:4;31560:6;31540:33;:::i;:::-;31450:129;;;:::o;31585:75::-;31618:6;31651:2;31645:9;31635:19;;31585:75;:::o;31666:311::-;31743:4;31833:18;31825:6;31822:30;31819:56;;;31855:18;;:::i;:::-;31819:56;31905:4;31897:6;31893:17;31885:25;;31965:4;31959;31955:15;31947:23;;31666:311;;;:::o;31983:321::-;32070:4;32160:18;32152:6;32149:30;32146:56;;;32182:18;;:::i;:::-;32146:56;32232:4;32224:6;32220:17;32212:25;;32292:4;32286;32282:15;32274:23;;31983:321;;;:::o;32310:307::-;32371:4;32461:18;32453:6;32450:30;32447:56;;;32483:18;;:::i;:::-;32447:56;32521:29;32543:6;32521:29;:::i;:::-;32513:37;;32605:4;32599;32595:15;32587:23;;32310:307;;;:::o;32623:308::-;32685:4;32775:18;32767:6;32764:30;32761:56;;;32797:18;;:::i;:::-;32761:56;32835:29;32857:6;32835:29;:::i;:::-;32827:37;;32919:4;32913;32909:15;32901:23;;32623:308;;;:::o;32937:142::-;33014:4;33037:3;33029:11;;33067:4;33062:3;33058:14;33050:22;;32937:142;;;:::o;33085:124::-;33162:6;33196:5;33190:12;33180:22;;33085:124;;;:::o;33215:98::-;33266:6;33300:5;33294:12;33284:22;;33215:98;;;:::o;33319:99::-;33371:6;33405:5;33399:12;33389:22;;33319:99;;;:::o;33424:123::-;33504:4;33536;33531:3;33527:14;33519:22;;33424:123;;;:::o;33553:194::-;33662:11;33696:6;33691:3;33684:19;33736:4;33731:3;33727:14;33712:29;;33553:194;;;;:::o;33753:168::-;33836:11;33870:6;33865:3;33858:19;33910:4;33905:3;33901:14;33886:29;;33753:168;;;;:::o;33927:159::-;34001:11;34035:6;34030:3;34023:19;34075:4;34070:3;34066:14;34051:29;;33927:159;;;;:::o;34092:169::-;34176:11;34210:6;34205:3;34198:19;34250:4;34245:3;34241:14;34226:29;;34092:169;;;;:::o;34267:148::-;34369:11;34406:3;34391:18;;34267:148;;;;:::o;34421:305::-;34461:3;34480:20;34498:1;34480:20;:::i;:::-;34475:25;;34514:20;34532:1;34514:20;:::i;:::-;34509:25;;34668:1;34600:66;34596:74;34593:1;34590:81;34587:107;;;34674:18;;:::i;:::-;34587:107;34718:1;34715;34711:9;34704:16;;34421:305;;;;:::o;34732:185::-;34772:1;34789:20;34807:1;34789:20;:::i;:::-;34784:25;;34823:20;34841:1;34823:20;:::i;:::-;34818:25;;34862:1;34852:35;;34867:18;;:::i;:::-;34852:35;34909:1;34906;34902:9;34897:14;;34732:185;;;;:::o;34923:348::-;34963:7;34986:20;35004:1;34986:20;:::i;:::-;34981:25;;35020:20;35038:1;35020:20;:::i;:::-;35015:25;;35208:1;35140:66;35136:74;35133:1;35130:81;35125:1;35118:9;35111:17;35107:105;35104:131;;;35215:18;;:::i;:::-;35104:131;35263:1;35260;35256:9;35245:20;;34923:348;;;;:::o;35277:191::-;35317:4;35337:20;35355:1;35337:20;:::i;:::-;35332:25;;35371:20;35389:1;35371:20;:::i;:::-;35366:25;;35410:1;35407;35404:8;35401:34;;;35415:18;;:::i;:::-;35401:34;35460:1;35457;35453:9;35445:17;;35277:191;;;;:::o;35474:96::-;35511:7;35540:24;35558:5;35540:24;:::i;:::-;35529:35;;35474:96;;;:::o;35576:90::-;35610:7;35653:5;35646:13;35639:21;35628:32;;35576:90;;;:::o;35672:149::-;35708:7;35748:66;35741:5;35737:78;35726:89;;35672:149;;;:::o;35827:126::-;35864:7;35904:42;35897:5;35893:54;35882:65;;35827:126;;;:::o;35959:77::-;35996:7;36025:5;36014:16;;35959:77;;;:::o;36042:154::-;36126:6;36121:3;36116;36103:30;36188:1;36179:6;36174:3;36170:16;36163:27;36042:154;;;:::o;36202:307::-;36270:1;36280:113;36294:6;36291:1;36288:13;36280:113;;;36379:1;36374:3;36370:11;36364:18;36360:1;36355:3;36351:11;36344:39;36316:2;36313:1;36309:10;36304:15;;36280:113;;;36411:6;36408:1;36405:13;36402:101;;;36491:1;36482:6;36477:3;36473:16;36466:27;36402:101;36251:258;36202:307;;;:::o;36515:320::-;36559:6;36596:1;36590:4;36586:12;36576:22;;36643:1;36637:4;36633:12;36664:18;36654:81;;36720:4;36712:6;36708:17;36698:27;;36654:81;36782:2;36774:6;36771:14;36751:18;36748:38;36745:84;;;36801:18;;:::i;:::-;36745:84;36566:269;36515:320;;;:::o;36841:281::-;36924:27;36946:4;36924:27;:::i;:::-;36916:6;36912:40;37054:6;37042:10;37039:22;37018:18;37006:10;37003:34;37000:62;36997:88;;;37065:18;;:::i;:::-;36997:88;37105:10;37101:2;37094:22;36884:238;36841:281;;:::o;37128:233::-;37167:3;37190:24;37208:5;37190:24;:::i;:::-;37181:33;;37236:66;37229:5;37226:77;37223:103;;;37306:18;;:::i;:::-;37223:103;37353:1;37346:5;37342:13;37335:20;;37128:233;;;:::o;37367:176::-;37399:1;37416:20;37434:1;37416:20;:::i;:::-;37411:25;;37450:20;37468:1;37450:20;:::i;:::-;37445:25;;37489:1;37479:35;;37494:18;;:::i;:::-;37479:35;37535:1;37532;37528:9;37523:14;;37367:176;;;;:::o;37549:180::-;37597:77;37594:1;37587:88;37694:4;37691:1;37684:15;37718:4;37715:1;37708:15;37735:180;37783:77;37780:1;37773:88;37880:4;37877:1;37870:15;37904:4;37901:1;37894:15;37921:180;37969:77;37966:1;37959:88;38066:4;38063:1;38056:15;38090:4;38087:1;38080:15;38107:180;38155:77;38152:1;38145:88;38252:4;38249:1;38242:15;38276:4;38273:1;38266:15;38293:180;38341:77;38338:1;38331:88;38438:4;38435:1;38428:15;38462:4;38459:1;38452:15;38479:180;38527:77;38524:1;38517:88;38624:4;38621:1;38614:15;38648:4;38645:1;38638:15;38665:117;38774:1;38771;38764:12;38788:117;38897:1;38894;38887:12;38911:117;39020:1;39017;39010:12;39034:117;39143:1;39140;39133:12;39157:117;39266:1;39263;39256:12;39280:102;39321:6;39372:2;39368:7;39363:2;39356:5;39352:14;39348:28;39338:38;;39280:102;;;:::o;39388:230::-;39528:34;39524:1;39516:6;39512:14;39505:58;39597:13;39592:2;39584:6;39580:15;39573:38;39388:230;:::o;39624:237::-;39764:34;39760:1;39752:6;39748:14;39741:58;39833:20;39828:2;39820:6;39816:15;39809:45;39624:237;:::o;39867:226::-;40007:34;40003:1;39995:6;39991:14;39984:58;40076:9;40071:2;40063:6;40059:15;40052:34;39867:226;:::o;40099:225::-;40239:34;40235:1;40227:6;40223:14;40216:58;40308:8;40303:2;40295:6;40291:15;40284:33;40099:225;:::o;40330:224::-;40470:34;40466:1;40458:6;40454:14;40447:58;40539:7;40534:2;40526:6;40522:15;40515:32;40330:224;:::o;40560:178::-;40700:30;40696:1;40688:6;40684:14;40677:54;40560:178;:::o;40744:223::-;40884:34;40880:1;40872:6;40868:14;40861:58;40953:6;40948:2;40940:6;40936:15;40929:31;40744:223;:::o;40973:175::-;41113:27;41109:1;41101:6;41097:14;41090:51;40973:175;:::o;41154:228::-;41294:34;41290:1;41282:6;41278:14;41271:58;41363:11;41358:2;41350:6;41346:15;41339:36;41154:228;:::o;41388:224::-;41528:34;41524:1;41516:6;41512:14;41505:58;41597:7;41592:2;41584:6;41580:15;41573:32;41388:224;:::o;41618:249::-;41758:34;41754:1;41746:6;41742:14;41735:58;41827:32;41822:2;41814:6;41810:15;41803:57;41618:249;:::o;41873:182::-;42013:34;42009:1;42001:6;41997:14;41990:58;41873:182;:::o;42061:::-;42201:34;42197:1;42189:6;42185:14;42178:58;42061:182;:::o;42249:174::-;42389:26;42385:1;42377:6;42373:14;42366:50;42249:174;:::o;42429:220::-;42569:34;42565:1;42557:6;42553:14;42546:58;42638:3;42633:2;42625:6;42621:15;42614:28;42429:220;:::o;42655:231::-;42795:34;42791:1;42783:6;42779:14;42772:58;42864:14;42859:2;42851:6;42847:15;42840:39;42655:231;:::o;42892:233::-;43032:34;43028:1;43020:6;43016:14;43009:58;43101:16;43096:2;43088:6;43084:15;43077:41;42892:233;:::o;43131:179::-;43271:31;43267:1;43259:6;43255:14;43248:55;43131:179;:::o;43316:122::-;43389:24;43407:5;43389:24;:::i;:::-;43382:5;43379:35;43369:63;;43428:1;43425;43418:12;43369:63;43316:122;:::o;43444:116::-;43514:21;43529:5;43514:21;:::i;:::-;43507:5;43504:32;43494:60;;43550:1;43547;43540:12;43494:60;43444:116;:::o;43566:120::-;43638:23;43655:5;43638:23;:::i;:::-;43631:5;43628:34;43618:62;;43676:1;43673;43666:12;43618:62;43566:120;:::o;43692:122::-;43765:24;43783:5;43765:24;:::i;:::-;43758:5;43755:35;43745:63;;43804:1;43801;43794:12;43745:63;43692:122;:::o

Swarm Source

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