ETH Price: $2,277.72 (-2.82%)

Token

IndefiniteGames (IGI)
 

Overview

Max Total Supply

324 IGI

Holders

139

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
anfromvietnam.eth
Balance
3 IGI
0xbbe3746ecb684b4cbf374fc2cba3849269d04709
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:
DateFactory

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 2021-10-30
*/

/**
 *Submitted for verification at Etherscan.io on 2021-10-30
*/

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/access/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

pragma solidity ^0.8.0;

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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 of token that is not own");
        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);
    }

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

    /**
     * @dev 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

pragma solidity ^0.8.0;

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

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

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

pragma solidity ^0.8.0;

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


// File contracts/DateFactory.sol

pragma solidity =0.8.7;

contract DateFactory is ERC721, ERC721Enumerable, Ownable {
    // Metadata base URI
    string internal baseURI;
    // Treasury wallet
    address payable treasury;
    // Minter: Ascension portal contract address which will mint resurrected humans
    address minter;

    // Switch to enable burn
    bool public isBurnEnabled;
    // Sale switches
    bool public isPublicSaleActive;
    bool public isPrivateSaleActive;

    // Each user can't mint more than 10 NFTs.
    uint256 public constant MAX_PER_WALLET = 10;
    // Price per NFT: 0.05 ETH
    uint256 private constant MINT_PRICE = 50000000000000000;
    // Maximum deth counts
    uint256 private constant TOTAL_FIRST_DETHS = 3334;
    uint256 private constant TOTAL_RESURRECTED_DETHS = 530;
    // Mint counter
    uint256 public firstDethCounter = 0;
    // Token counter
    using Counters for Counters.Counter;
    Counters.Counter private tokenIdCounter;
    Counters.Counter private resurrectedDethCounter;

    // Ledger of users added to whitelist and their mint count
    mapping(address => uint256) public whitelist;
    // Ledger of NFTs minted by each unique wallet address.
    mapping(address => uint256) public userMintCount;

    // Mint event
    event Mint(address indexed account, uint256 indexed tokenId);
    // Ressurrected event
    event ResurrectMint(
        address indexed account,
        uint256 indexed prevTokenId,
        uint256 indexed currentTokenId
    );

    constructor(string memory _uri, address payable _treasury)
        ERC721("IndefiniteGames", "IGI")
    {
        baseURI = _uri;
        treasury = _treasury;
        _mintDates(treasury, 1);
    }

    /**
     * @dev Allows withdrawing the Ether in the contract to the treasury account.
     */
    function withdraw() external {
        require(
            msg.sender == owner() || msg.sender == treasury,
            "Caller is not owner or treasury"
        );
        payable(treasury).transfer(address(this).balance);
    }

    /**
     * @dev Sets the base URI for the API that provides the NFT data.
     */
    function setBaseURI(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }

    /**
     * @dev Public sale switch
     */
    function setPublicSaleState(bool _state) external onlyOwner {
        isPublicSaleActive = _state;
    }

    /**
     * @dev Private sale switch
     */
    function setPrivateSaleState(bool _state) external onlyOwner {
        isPrivateSaleActive = _state;
    }

    /**
     * @dev Enable/Disable burning.
     */
    function setIsBurnEnabled(bool _isBurnEnabled) external onlyOwner {
        isBurnEnabled = _isBurnEnabled;
    }

    /**
     * @dev Add to Whitelist
     */
    function addWhitelist(address[] memory _adds, uint256 _count)
        external
        onlyOwner
    {
        require(_count > 0, "Count can not be zero");
        for (uint256 i = 0; i < _adds.length; i++) {
            whitelist[_adds[i]] = _count;
        }
    }

    /**
     * @dev Remove from Whitelist
     */
    function removeWhitelist(address[] memory _adds) external onlyOwner {
        for (uint256 i = 0; i < _adds.length; i++) {
            whitelist[_adds[i]] = 0;
        }
    }

    /**
     * @dev Sets minter: only minter will be able to mint resurrected deths
     */
    function setMinter(address _minter) external onlyOwner {
        minter = _minter;
    }

    /**
     * @dev Claim dates as per the whitelisted user limit
     */
    function privateMintDates(uint256 _tokensCount) external payable {
        require(isPrivateSaleActive, "Sale is not active at the moment");
        require(whitelist[msg.sender] != 0, "Address not found in whitelist");
        _checkDateSale(_tokensCount, whitelist[msg.sender]);
        _mintDates(msg.sender, _tokensCount);
    }

    /**
     * @dev Claim up to 10 dates at once
     */
    function publicMintDates(uint256 _tokensCount) external payable {
        require(isPublicSaleActive, "Sale is not active at the moment");
        _checkDateSale(_tokensCount, MAX_PER_WALLET);
        _mintDates(msg.sender, _tokensCount);
    }

    /**
     * @dev Allows ascension portal (minter) to mint resurrected human
     */
    function mintResurrected(address _to, uint256 _prevTokenId) external {
        require(msg.sender == minter, "Caller is not a minter");
        require(
            resurrectedDethCounter.current() < TOTAL_RESURRECTED_DETHS,
            "No dates left to be claimed"
        );
        tokenIdCounter.increment();
        _safeMint(_to, tokenIdCounter.current());
        emit ResurrectMint(_to, _prevTokenId, tokenIdCounter.current());
        resurrectedDethCounter.increment();
    }

    /**
     * @dev Allows burning tokens when burning is enabled.
     */
    function burn(uint256 tokenId) external {
        require(isBurnEnabled, "Burning disabled");
        require(
            _isApprovedOrOwner(msg.sender, tokenId),
            "not owner nor approved"
        );
        _burn(tokenId);
    }

    /**
     * @dev Gets the count of Date Mints left for a given account
     */
    function getDatesLeft(address _account) external view returns (uint256) {
        uint256 datesLeft;
        if (isPrivateSaleActive) {
            datesLeft = whitelist[_account] - userMintCount[_account];
        } else if (isPublicSaleActive) {
            datesLeft = MAX_PER_WALLET - userMintCount[_account];
        }
        return datesLeft;
    }

    /**
     * @dev Gets the list of token IDs of the requested owner.
     */
    function tokensOfOwner(address _owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_owner);
        uint256[] memory result = new uint256[](tokenCount);
        for (uint256 index = 0; index < tokenCount; index++) {
            result[index] = tokenOfOwnerByIndex(_owner, index);
        }
        return result;
    }

    /**
     * @dev See {IERC721Enumerable}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }

    /**
     * @dev Checking all the requirements needed for minting
     */
    function _checkDateSale(uint256 _tokensCount, uint256 maxMint)
        internal
        view
    {
        require(
            tx.origin == msg.sender,
            "The caller can only be a user and not a contract"
        );
        require(_tokensCount > 0, "Can't mint 0 dates");
        require(
            firstDethCounter < TOTAL_FIRST_DETHS,
            "No dates left to be claimed"
        );
        require(
            (firstDethCounter + _tokensCount) <= TOTAL_FIRST_DETHS,
            "Not enough dates to be claimed"
        );
        require(
            userMintCount[msg.sender] + _tokensCount <= maxMint,
            "Can not mint more than alloted dates"
        );
        require(
            msg.value >= MINT_PRICE * _tokensCount,
            "Not enough Ether to claim the dates"
        );
    }

    /**
     * @dev Internal function to mint dates
     */
    function _mintDates(address _to, uint256 _tokensCount) internal {
        for (uint256 i = 0; i < _tokensCount; i++) {
            tokenIdCounter.increment();
            _safeMint(_to, tokenIdCounter.current());
            emit Mint(_to, tokenIdCounter.current());
        }
        userMintCount[_to] += _tokensCount;
        firstDethCounter += _tokensCount;
    }

    /**
     * @dev See {ERC721}.
     */
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address payable","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"prevTokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"currentTokenId","type":"uint256"}],"name":"ResurrectMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adds","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstDethCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getDatesLeft","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":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPrivateSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_prevTokenId","type":"uint256"}],"name":"mintResurrected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokensCount","type":"uint256"}],"name":"privateMintDates","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokensCount","type":"uint256"}],"name":"publicMintDates","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adds","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","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":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBurnEnabled","type":"bool"}],"name":"setIsBurnEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPrivateSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicSaleState","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"userMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600e553480156200001657600080fd5b5060405162006a2238038062006a2283398181016040528101906200003c919062000f4b565b6040518060400160405280600f81526020017f496e646566696e69746547616d657300000000000000000000000000000000008152506040518060400160405280600381526020017f49474900000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000c092919062000dbd565b508060019080519060200190620000d992919062000dbd565b505050620000fc620000f06200019360201b60201c565b6200019b60201b60201c565b81600b90805190602001906200011492919062000dbd565b5080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200018b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200026160201b60201c565b505062001652565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156200031c5762000284600f6200039460201b6200206e1760201c565b620002ac83620002a0600f620003aa60201b620020841760201c565b620003b860201b60201c565b620002c3600f620003aa60201b620020841760201c565b8373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a380806200031390620013d0565b91505062000264565b5080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200036e919062001218565b9250508190555080600e600082825462000389919062001218565b925050819055505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b620003da828260405180602001604052806000815250620003de60201b60201c565b5050565b620003f083836200044c60201b60201c565b6200040560008484846200063260201b60201c565b62000447576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043e9062001104565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b6906200116a565b60405180910390fd5b620004d081620007ec60201b60201c565b1562000513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050a9062001126565b60405180910390fd5b62000527600083836200085860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000579919062001218565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006608473ffffffffffffffffffffffffffffffffffffffff166200087560201b620020921760201c565b15620007df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006926200019360201b60201c565b8786866040518563ffffffff1660e01b8152600401620006b69493929190620010b0565b602060405180830381600087803b158015620006d157600080fd5b505af19250505080156200070557506040513d601f19601f8201168201806040525081019062000702919062000f19565b60015b6200078e573d806000811462000738576040519150601f19603f3d011682016040523d82523d6000602084013e6200073d565b606091505b5060008151141562000786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077d9062001104565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007e4565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008708383836200088860201b620020a51760201c565b505050565b600080823b905060008111915050919050565b620008a0838383620009cf60201b620021b91760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008ed57620008e781620009d460201b60201c565b62000935565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009345762000933838262000a1d60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000982576200097c8162000b9a60201b60201c565b620009ca565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009c957620009c8828262000c7660201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a378462000d0260201b6200178b1760201c565b62000a43919062001275565b905060006007600084815260200190815260200160002054905081811462000b29576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000bb0919062001275565b905060006009600084815260200190815260200160002054905060006008838154811062000be35762000be2620014ab565b5b90600052602060002001549050806008838154811062000c085762000c07620014ab565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c5a5762000c596200147c565b5b6001900381819060005260206000200160009055905550505050565b600062000c8e8362000d0260201b6200178b1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d6d9062001148565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000dcb9062001364565b90600052602060002090601f01602090048101928262000def576000855562000e3b565b82601f1062000e0a57805160ff191683800117855562000e3b565b8280016001018555821562000e3b579182015b8281111562000e3a57825182559160200191906001019062000e1d565b5b50905062000e4a919062000e4e565b5090565b5b8082111562000e6957600081600090555060010162000e4f565b5090565b600062000e8462000e7e84620011b5565b6200118c565b90508281526020810184848401111562000ea35762000ea26200150e565b5b62000eb08482856200132e565b509392505050565b60008151905062000ec9816200161e565b92915050565b60008151905062000ee08162001638565b92915050565b600082601f83011262000efe5762000efd62001509565b5b815162000f1084826020860162000e6d565b91505092915050565b60006020828403121562000f325762000f3162001518565b5b600062000f428482850162000ecf565b91505092915050565b6000806040838503121562000f655762000f6462001518565b5b600083015167ffffffffffffffff81111562000f865762000f8562001513565b5b62000f948582860162000ee6565b925050602062000fa78582860162000eb8565b9150509250929050565b62000fbc81620012b0565b82525050565b600062000fcf82620011eb565b62000fdb8185620011f6565b935062000fed8185602086016200132e565b62000ff8816200151d565b840191505092915050565b60006200101260328362001207565b91506200101f826200152e565b604082019050919050565b600062001039601c8362001207565b915062001046826200157d565b602082019050919050565b600062001060602a8362001207565b91506200106d82620015a6565b604082019050919050565b60006200108760208362001207565b91506200109482620015f5565b602082019050919050565b620010aa8162001324565b82525050565b6000608082019050620010c7600083018762000fb1565b620010d6602083018662000fb1565b620010e560408301856200109f565b8181036060830152620010f9818462000fc2565b905095945050505050565b600060208201905081810360008301526200111f8162001003565b9050919050565b6000602082019050818103600083015262001141816200102a565b9050919050565b60006020820190508181036000830152620011638162001051565b9050919050565b60006020820190508181036000830152620011858162001078565b9050919050565b600062001198620011ab565b9050620011a682826200139a565b919050565b6000604051905090565b600067ffffffffffffffff821115620011d357620011d2620014da565b5b620011de826200151d565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620012258262001324565b9150620012328362001324565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200126a57620012696200141e565b5b828201905092915050565b6000620012828262001324565b91506200128f8362001324565b925082821015620012a557620012a46200141e565b5b828203905092915050565b6000620012bd8262001304565b9050919050565b6000620012d18262001304565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200134e57808201518184015260208101905062001331565b838111156200135e576000848401525b50505050565b600060028204905060018216806200137d57607f821691505b602082108114156200139457620013936200144d565b5b50919050565b620013a5826200151d565b810181811067ffffffffffffffff82111715620013c757620013c6620014da565b5b80604052505050565b6000620013dd8262001324565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200141357620014126200141e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6200162981620012c4565b81146200163557600080fd5b50565b6200164381620012d8565b81146200164f57600080fd5b50565b6153c080620016626000396000f3fe60806040526004361061023b5760003560e01c806355f804b31161012e57806395d89b41116100ab578063d8a9e1e91161006f578063d8a9e1e914610889578063e985e9c5146108b4578063eb0fd03d146108f1578063f2fde38b1461091a578063fca3b5aa146109435761023b565b806395d89b41146107925780639b19251a146107bd578063a22cb465146107fa578063b88d4fde14610823578063c87b56dd1461084c5761023b565b8063715018a6116100f2578063715018a6146106bf57806373e15275146106d65780638462151c146107015780638da5cb5b1461073e5780639293a5c7146107695761023b565b806355f804b3146105ca5780636352211e146105f3578063645b6701146106305780636e0e5b191461065957806370a08231146106825761023b565b806323b872dd116101bc57806342842e0e1161018057806342842e0e146104d557806342966c68146104fe57806344df0555146105275780634b8bf313146105505780634f6ccce71461058d5761023b565b806323b872dd146103ff5780632f745c5914610428578063346802a3146104655780633950891f146104815780633ccfd60b146104be5761023b565b80630d78fbdd116102035780630d78fbdd146103395780630f2cdd6c1461035557806318160ddd146103805780631e84c413146103ab57806323245216146103d65761023b565b806301ffc9a71461024057806306fdde031461027d57806307ebec27146102a8578063081812fc146102d3578063095ea7b314610310575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613b4f565b61096c565b604051610274919061425e565b60405180910390f35b34801561028957600080fd5b5061029261097e565b60405161029f9190614279565b60405180910390f35b3480156102b457600080fd5b506102bd610a10565b6040516102ca919061425e565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613bf2565b610a23565b60405161030791906141d5565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190613a3d565b610aa8565b005b610353600480360381019061034e9190613bf2565b610bc0565b005b34801561036157600080fd5b5061036a610c27565b604051610377919061467b565b60405180910390f35b34801561038c57600080fd5b50610395610c2c565b6040516103a2919061467b565b60405180910390f35b3480156103b757600080fd5b506103c0610c39565b6040516103cd919061425e565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613a7d565b610c4c565b005b34801561040b57600080fd5b5061042660048036038101906104219190613927565b610d4a565b005b34801561043457600080fd5b5061044f600480360381019061044a9190613a3d565b610daa565b60405161045c919061467b565b60405180910390f35b61047f600480360381019061047a9190613bf2565b610e4f565b005b34801561048d57600080fd5b506104a860048036038101906104a391906138ba565b610f77565b6040516104b5919061467b565b60405180910390f35b3480156104ca57600080fd5b506104d3610f8f565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613927565b6110c7565b005b34801561050a57600080fd5b5061052560048036038101906105209190613bf2565b6110e7565b005b34801561053357600080fd5b5061054e60048036038101906105499190613a3d565b61118b565b005b34801561055c57600080fd5b50610577600480360381019061057291906138ba565b6112e1565b604051610584919061467b565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613bf2565b6113f8565b6040516105c1919061467b565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613ba9565b611469565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613bf2565b6114ff565b60405161062791906141d5565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613ac6565b6115b1565b005b34801561066557600080fd5b50610680600480360381019061067b9190613b22565b6116f2565b005b34801561068e57600080fd5b506106a960048036038101906106a491906138ba565b61178b565b6040516106b6919061467b565b60405180910390f35b3480156106cb57600080fd5b506106d4611843565b005b3480156106e257600080fd5b506106eb6118cb565b6040516106f8919061467b565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906138ba565b6118d1565b604051610735919061423c565b60405180910390f35b34801561074a57600080fd5b5061075361197f565b60405161076091906141d5565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190613b22565b6119a9565b005b34801561079e57600080fd5b506107a7611a42565b6040516107b49190614279565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906138ba565b611ad4565b6040516107f1919061467b565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c91906139fd565b611aec565b005b34801561082f57600080fd5b5061084a6004803603810190610845919061397a565b611c6d565b005b34801561085857600080fd5b50610873600480360381019061086e9190613bf2565b611ccf565b6040516108809190614279565b60405180910390f35b34801561089557600080fd5b5061089e611d76565b6040516108ab919061425e565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d691906138e7565b611d89565b6040516108e8919061425e565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613b22565b611e1d565b005b34801561092657600080fd5b50610941600480360381019061093c91906138ba565b611eb6565b005b34801561094f57600080fd5b5061096a600480360381019061096591906138ba565b611fae565b005b6000610977826121be565b9050919050565b60606000805461098d90614990565b80601f01602080910402602001604051908101604052809291908181526020018280546109b990614990565b8015610a065780601f106109db57610100808354040283529160200191610a06565b820191906000526020600020905b8154815290600101906020018083116109e957829003601f168201915b5050505050905090565b600d60149054906101000a900460ff1681565b6000610a2e82612238565b610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a64906144db565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab3826114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b9061459b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b436122a4565b73ffffffffffffffffffffffffffffffffffffffff161480610b725750610b7181610b6c6122a4565b611d89565b5b610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba8906143fb565b60405180910390fd5b610bbb83836122ac565b505050565b600d60159054906101000a900460ff16610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c069061463b565b60405180910390fd5b610c1a81600a612365565b610c243382612594565b50565b600a81565b6000600880549050905090565b600d60159054906101000a900460ff1681565b610c546122a4565b73ffffffffffffffffffffffffffffffffffffffff16610c7261197f565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf9061451b565b60405180910390fd5b60005b8151811015610d4657600060116000848481518110610ced57610cec614b29565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d3e906149f3565b915050610ccb565b5050565b610d5b610d556122a4565b82612690565b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906145db565b60405180910390fd5b610da583838361276e565b505050565b6000610db58361178b565b8210610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906142bb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d60169054906101000a900460ff16610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061463b565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f189061449b565b60405180910390fd5b610f6a81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612365565b610f743382612594565b50565b60126020528060005260406000206000915090505481565b610f9761197f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061101d5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61105c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110539061457b565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110c4573d6000803e3d6000fd5b50565b6110e283838360405180602001604052806000815250611c6d565b505050565b600d60149054906101000a900460ff16611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061447b565b60405180910390fd5b6111403382612690565b61117f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111769061429b565b60405180910390fd5b611188816129ca565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112129061441b565b60405180910390fd5b6102126112286010612084565b10611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f906143bb565b60405180910390fd5b611272600f61206e565b61128582611280600f612084565b612adb565b61128f600f612084565b818373ffffffffffffffffffffffffffffffffffffffff167f25fcc4a38797b6bb2909d01ce1e2a65ee0771f45075666c208797cb7c15eacb760405160405180910390a46112dd601061206e565b5050565b600080600d60169054906101000a900460ff161561138a57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138391906148a6565b90506113ef565b600d60159054906101000a900460ff16156113ee57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a6113eb91906148a6565b90505b5b80915050919050565b6000611402610c2c565b8210611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906145fb565b60405180910390fd5b6008828154811061145757611456614b29565b5b90600052602060002001549050919050565b6114716122a4565b73ffffffffffffffffffffffffffffffffffffffff1661148f61197f565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061451b565b60405180910390fd5b80600b90805190602001906114fb929190613630565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f9061445b565b60405180910390fd5b80915050919050565b6115b96122a4565b73ffffffffffffffffffffffffffffffffffffffff166115d761197f565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116249061451b565b60405180910390fd5b60008111611670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116679061461b565b60405180910390fd5b60005b82518110156116ed57816011600085848151811061169457611693614b29565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806116e5906149f3565b915050611673565b505050565b6116fa6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661171861197f565b73ffffffffffffffffffffffffffffffffffffffff161461176e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117659061451b565b60405180910390fd5b80600d60146101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f39061443b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61184b6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661186961197f565b73ffffffffffffffffffffffffffffffffffffffff16146118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b69061451b565b60405180910390fd5b6118c96000612af9565b565b600e5481565b606060006118de8361178b565b905060008167ffffffffffffffff8111156118fc576118fb614b58565b5b60405190808252806020026020018201604052801561192a5781602001602082028036833780820191505090505b50905060005b82811015611974576119428582610daa565b82828151811061195557611954614b29565b5b602002602001018181525050808061196c906149f3565b915050611930565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119b16122a4565b73ffffffffffffffffffffffffffffffffffffffff166119cf61197f565b73ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061451b565b60405180910390fd5b80600d60156101000a81548160ff02191690831515021790555050565b606060018054611a5190614990565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7d90614990565b8015611aca5780601f10611a9f57610100808354040283529160200191611aca565b820191906000526020600020905b815481529060010190602001808311611aad57829003601f168201915b5050505050905090565b60116020528060005260406000206000915090505481565b611af46122a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b599061439b565b60405180910390fd5b8060056000611b6f6122a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c1c6122a4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c61919061425e565b60405180910390a35050565b611c7e611c786122a4565b83612690565b611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb4906145db565b60405180910390fd5b611cc984848484612bbf565b50505050565b6060611cda82612238565b611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d109061455b565b60405180910390fd5b6000611d23612c1b565b90506000815111611d435760405180602001604052806000815250611d6e565b80611d4d84612cad565b604051602001611d5e9291906141b1565b6040516020818303038152906040525b915050919050565b600d60169054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e256122a4565b73ffffffffffffffffffffffffffffffffffffffff16611e4361197f565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e909061451b565b60405180910390fd5b80600d60166101000a81548160ff02191690831515021790555050565b611ebe6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611edc61197f565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061451b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f999061431b565b60405180910390fd5b611fab81612af9565b50565b611fb66122a4565b73ffffffffffffffffffffffffffffffffffffffff16611fd461197f565b73ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120219061451b565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b6120b08383836121b9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120f3576120ee81612e0e565b612132565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612131576121308382612e57565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121755761217081612fc4565b6121b4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121b3576121b28282613095565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612231575061223082613114565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661231f836114ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906142fb565b60405180910390fd5b60008211612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d9061465b565b60405180910390fd5b610d06600e541061245c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612453906143bb565b60405180910390fd5b610d0682600e5461246d91906147c5565b11156124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a59061435b565b60405180910390fd5b8082601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124fa91906147c5565b111561253b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612532906145bb565b60405180910390fd5b8166b1a2bc2ec5000061254e919061484c565b341015612590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612587906144fb565b60405180910390fd5b5050565b60005b8181101561261c576125a9600f61206e565b6125bc836125b7600f612084565b612adb565b6125c6600f612084565b8373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a38080612614906149f3565b915050612597565b5080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266c91906147c5565b9250508190555080600e600082825461268591906147c5565b925050819055505050565b600061269b82612238565b6126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d1906143db565b60405180910390fd5b60006126e5836114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061275457508373ffffffffffffffffffffffffffffffffffffffff1661273c84610a23565b73ffffffffffffffffffffffffffffffffffffffff16145b8061276557506127648185611d89565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278e826114ff565b73ffffffffffffffffffffffffffffffffffffffff16146127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db9061453b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b9061437b565b60405180910390fd5b61285f8383836131f6565b61286a6000826122ac565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ba91906148a6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291191906147c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129d5826114ff565b90506129e3816000846131f6565b6129ee6000836122ac565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3e91906148a6565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612af5828260405180602001604052806000815250613206565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bca84848461276e565b612bd684848484613261565b612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c906142db565b60405180910390fd5b50505050565b6060600b8054612c2a90614990565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5690614990565b8015612ca35780601f10612c7857610100808354040283529160200191612ca3565b820191906000526020600020905b815481529060010190602001808311612c8657829003601f168201915b5050505050905090565b60606000821415612cf5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e09565b600082905060005b60008214612d27578080612d10906149f3565b915050600a82612d20919061481b565b9150612cfd565b60008167ffffffffffffffff811115612d4357612d42614b58565b5b6040519080825280601f01601f191660200182016040528015612d755781602001600182028036833780820191505090505b5090505b60008514612e0257600182612d8e91906148a6565b9150600a85612d9d9190614a3c565b6030612da991906147c5565b60f81b818381518110612dbf57612dbe614b29565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dfb919061481b565b9450612d79565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e648461178b565b612e6e91906148a6565b9050600060076000848152602001908152602001600020549050818114612f53576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fd891906148a6565b905060006009600084815260200190815260200160002054905060006008838154811061300857613007614b29565b5b90600052602060002001549050806008838154811061302a57613029614b29565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061307957613078614afa565b5b6001900381819060005260206000200160009055905550505050565b60006130a08361178b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131df57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131ef57506131ee826133f8565b5b9050919050565b6132018383836120a5565b505050565b6132108383613462565b61321d6000848484613261565b61325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906142db565b60405180910390fd5b505050565b60006132828473ffffffffffffffffffffffffffffffffffffffff16612092565b156133eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132ab6122a4565b8786866040518563ffffffff1660e01b81526004016132cd94939291906141f0565b602060405180830381600087803b1580156132e757600080fd5b505af192505050801561331857506040513d601f19601f820116820180604052508101906133159190613b7c565b60015b61339b573d8060008114613348576040519150601f19603f3d011682016040523d82523d6000602084013e61334d565b606091505b50600081511415613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a906142db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133f0565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c9906144bb565b60405180910390fd5b6134db81612238565b1561351b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135129061433b565b60405180910390fd5b613527600083836131f6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357791906147c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461363c90614990565b90600052602060002090601f01602090048101928261365e57600085556136a5565b82601f1061367757805160ff19168380011785556136a5565b828001600101855582156136a5579182015b828111156136a4578251825591602001919060010190613689565b5b5090506136b291906136b6565b5090565b5b808211156136cf5760008160009055506001016136b7565b5090565b60006136e66136e1846146bb565b614696565b9050808382526020820190508285602086028201111561370957613708614b8c565b5b60005b85811015613739578161371f88826137c7565b84526020840193506020830192505060018101905061370c565b5050509392505050565b6000613756613751846146e7565b614696565b90508281526020810184848401111561377257613771614b91565b5b61377d84828561494e565b509392505050565b600061379861379384614718565b614696565b9050828152602081018484840111156137b4576137b3614b91565b5b6137bf84828561494e565b509392505050565b6000813590506137d68161532e565b92915050565b600082601f8301126137f1576137f0614b87565b5b81356138018482602086016136d3565b91505092915050565b60008135905061381981615345565b92915050565b60008135905061382e8161535c565b92915050565b6000815190506138438161535c565b92915050565b600082601f83011261385e5761385d614b87565b5b813561386e848260208601613743565b91505092915050565b600082601f83011261388c5761388b614b87565b5b813561389c848260208601613785565b91505092915050565b6000813590506138b481615373565b92915050565b6000602082840312156138d0576138cf614b9b565b5b60006138de848285016137c7565b91505092915050565b600080604083850312156138fe576138fd614b9b565b5b600061390c858286016137c7565b925050602061391d858286016137c7565b9150509250929050565b6000806000606084860312156139405761393f614b9b565b5b600061394e868287016137c7565b935050602061395f868287016137c7565b9250506040613970868287016138a5565b9150509250925092565b6000806000806080858703121561399457613993614b9b565b5b60006139a2878288016137c7565b94505060206139b3878288016137c7565b93505060406139c4878288016138a5565b925050606085013567ffffffffffffffff8111156139e5576139e4614b96565b5b6139f187828801613849565b91505092959194509250565b60008060408385031215613a1457613a13614b9b565b5b6000613a22858286016137c7565b9250506020613a338582860161380a565b9150509250929050565b60008060408385031215613a5457613a53614b9b565b5b6000613a62858286016137c7565b9250506020613a73858286016138a5565b9150509250929050565b600060208284031215613a9357613a92614b9b565b5b600082013567ffffffffffffffff811115613ab157613ab0614b96565b5b613abd848285016137dc565b91505092915050565b60008060408385031215613add57613adc614b9b565b5b600083013567ffffffffffffffff811115613afb57613afa614b96565b5b613b07858286016137dc565b9250506020613b18858286016138a5565b9150509250929050565b600060208284031215613b3857613b37614b9b565b5b6000613b468482850161380a565b91505092915050565b600060208284031215613b6557613b64614b9b565b5b6000613b738482850161381f565b91505092915050565b600060208284031215613b9257613b91614b9b565b5b6000613ba084828501613834565b91505092915050565b600060208284031215613bbf57613bbe614b9b565b5b600082013567ffffffffffffffff811115613bdd57613bdc614b96565b5b613be984828501613877565b91505092915050565b600060208284031215613c0857613c07614b9b565b5b6000613c16848285016138a5565b91505092915050565b6000613c2b8383614193565b60208301905092915050565b613c40816148da565b82525050565b6000613c5182614759565b613c5b8185614787565b9350613c6683614749565b8060005b83811015613c97578151613c7e8882613c1f565b9750613c898361477a565b925050600181019050613c6a565b5085935050505092915050565b613cad816148ec565b82525050565b6000613cbe82614764565b613cc88185614798565b9350613cd881856020860161495d565b613ce181614ba0565b840191505092915050565b6000613cf78261476f565b613d0181856147a9565b9350613d1181856020860161495d565b613d1a81614ba0565b840191505092915050565b6000613d308261476f565b613d3a81856147ba565b9350613d4a81856020860161495d565b80840191505092915050565b6000613d636016836147a9565b9150613d6e82614bb1565b602082019050919050565b6000613d86602b836147a9565b9150613d9182614bda565b604082019050919050565b6000613da96032836147a9565b9150613db482614c29565b604082019050919050565b6000613dcc6030836147a9565b9150613dd782614c78565b604082019050919050565b6000613def6026836147a9565b9150613dfa82614cc7565b604082019050919050565b6000613e12601c836147a9565b9150613e1d82614d16565b602082019050919050565b6000613e35601e836147a9565b9150613e4082614d3f565b602082019050919050565b6000613e586024836147a9565b9150613e6382614d68565b604082019050919050565b6000613e7b6019836147a9565b9150613e8682614db7565b602082019050919050565b6000613e9e601b836147a9565b9150613ea982614de0565b602082019050919050565b6000613ec1602c836147a9565b9150613ecc82614e09565b604082019050919050565b6000613ee46038836147a9565b9150613eef82614e58565b604082019050919050565b6000613f076016836147a9565b9150613f1282614ea7565b602082019050919050565b6000613f2a602a836147a9565b9150613f3582614ed0565b604082019050919050565b6000613f4d6029836147a9565b9150613f5882614f1f565b604082019050919050565b6000613f706010836147a9565b9150613f7b82614f6e565b602082019050919050565b6000613f93601e836147a9565b9150613f9e82614f97565b602082019050919050565b6000613fb66020836147a9565b9150613fc182614fc0565b602082019050919050565b6000613fd9602c836147a9565b9150613fe482614fe9565b604082019050919050565b6000613ffc6023836147a9565b915061400782615038565b604082019050919050565b600061401f6020836147a9565b915061402a82615087565b602082019050919050565b60006140426029836147a9565b915061404d826150b0565b604082019050919050565b6000614065602f836147a9565b9150614070826150ff565b604082019050919050565b6000614088601f836147a9565b91506140938261514e565b602082019050919050565b60006140ab6021836147a9565b91506140b682615177565b604082019050919050565b60006140ce6024836147a9565b91506140d9826151c6565b604082019050919050565b60006140f16031836147a9565b91506140fc82615215565b604082019050919050565b6000614114602c836147a9565b915061411f82615264565b604082019050919050565b60006141376015836147a9565b9150614142826152b3565b602082019050919050565b600061415a6020836147a9565b9150614165826152dc565b602082019050919050565b600061417d6012836147a9565b915061418882615305565b602082019050919050565b61419c81614944565b82525050565b6141ab81614944565b82525050565b60006141bd8285613d25565b91506141c98284613d25565b91508190509392505050565b60006020820190506141ea6000830184613c37565b92915050565b60006080820190506142056000830187613c37565b6142126020830186613c37565b61421f60408301856141a2565b81810360608301526142318184613cb3565b905095945050505050565b600060208201905081810360008301526142568184613c46565b905092915050565b60006020820190506142736000830184613ca4565b92915050565b600060208201905081810360008301526142938184613cec565b905092915050565b600060208201905081810360008301526142b481613d56565b9050919050565b600060208201905081810360008301526142d481613d79565b9050919050565b600060208201905081810360008301526142f481613d9c565b9050919050565b6000602082019050818103600083015261431481613dbf565b9050919050565b6000602082019050818103600083015261433481613de2565b9050919050565b6000602082019050818103600083015261435481613e05565b9050919050565b6000602082019050818103600083015261437481613e28565b9050919050565b6000602082019050818103600083015261439481613e4b565b9050919050565b600060208201905081810360008301526143b481613e6e565b9050919050565b600060208201905081810360008301526143d481613e91565b9050919050565b600060208201905081810360008301526143f481613eb4565b9050919050565b6000602082019050818103600083015261441481613ed7565b9050919050565b6000602082019050818103600083015261443481613efa565b9050919050565b6000602082019050818103600083015261445481613f1d565b9050919050565b6000602082019050818103600083015261447481613f40565b9050919050565b6000602082019050818103600083015261449481613f63565b9050919050565b600060208201905081810360008301526144b481613f86565b9050919050565b600060208201905081810360008301526144d481613fa9565b9050919050565b600060208201905081810360008301526144f481613fcc565b9050919050565b6000602082019050818103600083015261451481613fef565b9050919050565b6000602082019050818103600083015261453481614012565b9050919050565b6000602082019050818103600083015261455481614035565b9050919050565b6000602082019050818103600083015261457481614058565b9050919050565b600060208201905081810360008301526145948161407b565b9050919050565b600060208201905081810360008301526145b48161409e565b9050919050565b600060208201905081810360008301526145d4816140c1565b9050919050565b600060208201905081810360008301526145f4816140e4565b9050919050565b6000602082019050818103600083015261461481614107565b9050919050565b600060208201905081810360008301526146348161412a565b9050919050565b600060208201905081810360008301526146548161414d565b9050919050565b6000602082019050818103600083015261467481614170565b9050919050565b600060208201905061469060008301846141a2565b92915050565b60006146a06146b1565b90506146ac82826149c2565b919050565b6000604051905090565b600067ffffffffffffffff8211156146d6576146d5614b58565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561470257614701614b58565b5b61470b82614ba0565b9050602081019050919050565b600067ffffffffffffffff82111561473357614732614b58565b5b61473c82614ba0565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147d082614944565b91506147db83614944565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148105761480f614a6d565b5b828201905092915050565b600061482682614944565b915061483183614944565b92508261484157614840614a9c565b5b828204905092915050565b600061485782614944565b915061486283614944565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561489b5761489a614a6d565b5b828202905092915050565b60006148b182614944565b91506148bc83614944565b9250828210156148cf576148ce614a6d565b5b828203905092915050565b60006148e582614924565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561497b578082015181840152602081019050614960565b8381111561498a576000848401525b50505050565b600060028204905060018216806149a857607f821691505b602082108114156149bc576149bb614acb565b5b50919050565b6149cb82614ba0565b810181811067ffffffffffffffff821117156149ea576149e9614b58565b5b80604052505050565b60006149fe82614944565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a3157614a30614a6d565b5b600182019050919050565b6000614a4782614944565b9150614a5283614944565b925082614a6257614a61614a9c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6e6f74206f776e6572206e6f7220617070726f76656400000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5468652063616c6c65722063616e206f6e6c792062652061207573657220616e60008201527f64206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f75676820646174657320746f20626520636c61696d65640000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f206461746573206c65667420746f20626520636c61696d65640000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616c6c6572206973206e6f742061206d696e74657200000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4275726e696e672064697361626c656400000000000000000000000000000000600082015250565b7f41646472657373206e6f7420666f756e6420696e2077686974656c6973740000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520646160008201527f7465730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f74206f776e6572206f7220747265617375727900600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e20616c6c6f746564206460008201527f6174657300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f436f756e742063616e206e6f74206265207a65726f0000000000000000000000600082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b7f43616e2774206d696e7420302064617465730000000000000000000000000000600082015250565b615337816148da565b811461534257600080fd5b50565b61534e816148ec565b811461535957600080fd5b50565b615365816148f8565b811461537057600080fd5b50565b61537c81614944565b811461538757600080fd5b5056fea26469706673582212206cbae2601887d73838ee912d82f5d353faa2a4f41f9a6219f4d5f7d7aea29f9c64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000004a8e3dbe4b48a875733fe590856b95f633fed1fc000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6170692e646574686e66742e696f2f6170692f312e302f6f70656e7365612f6173736574732f000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061023b5760003560e01c806355f804b31161012e57806395d89b41116100ab578063d8a9e1e91161006f578063d8a9e1e914610889578063e985e9c5146108b4578063eb0fd03d146108f1578063f2fde38b1461091a578063fca3b5aa146109435761023b565b806395d89b41146107925780639b19251a146107bd578063a22cb465146107fa578063b88d4fde14610823578063c87b56dd1461084c5761023b565b8063715018a6116100f2578063715018a6146106bf57806373e15275146106d65780638462151c146107015780638da5cb5b1461073e5780639293a5c7146107695761023b565b806355f804b3146105ca5780636352211e146105f3578063645b6701146106305780636e0e5b191461065957806370a08231146106825761023b565b806323b872dd116101bc57806342842e0e1161018057806342842e0e146104d557806342966c68146104fe57806344df0555146105275780634b8bf313146105505780634f6ccce71461058d5761023b565b806323b872dd146103ff5780632f745c5914610428578063346802a3146104655780633950891f146104815780633ccfd60b146104be5761023b565b80630d78fbdd116102035780630d78fbdd146103395780630f2cdd6c1461035557806318160ddd146103805780631e84c413146103ab57806323245216146103d65761023b565b806301ffc9a71461024057806306fdde031461027d57806307ebec27146102a8578063081812fc146102d3578063095ea7b314610310575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613b4f565b61096c565b604051610274919061425e565b60405180910390f35b34801561028957600080fd5b5061029261097e565b60405161029f9190614279565b60405180910390f35b3480156102b457600080fd5b506102bd610a10565b6040516102ca919061425e565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613bf2565b610a23565b60405161030791906141d5565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190613a3d565b610aa8565b005b610353600480360381019061034e9190613bf2565b610bc0565b005b34801561036157600080fd5b5061036a610c27565b604051610377919061467b565b60405180910390f35b34801561038c57600080fd5b50610395610c2c565b6040516103a2919061467b565b60405180910390f35b3480156103b757600080fd5b506103c0610c39565b6040516103cd919061425e565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613a7d565b610c4c565b005b34801561040b57600080fd5b5061042660048036038101906104219190613927565b610d4a565b005b34801561043457600080fd5b5061044f600480360381019061044a9190613a3d565b610daa565b60405161045c919061467b565b60405180910390f35b61047f600480360381019061047a9190613bf2565b610e4f565b005b34801561048d57600080fd5b506104a860048036038101906104a391906138ba565b610f77565b6040516104b5919061467b565b60405180910390f35b3480156104ca57600080fd5b506104d3610f8f565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613927565b6110c7565b005b34801561050a57600080fd5b5061052560048036038101906105209190613bf2565b6110e7565b005b34801561053357600080fd5b5061054e60048036038101906105499190613a3d565b61118b565b005b34801561055c57600080fd5b50610577600480360381019061057291906138ba565b6112e1565b604051610584919061467b565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613bf2565b6113f8565b6040516105c1919061467b565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613ba9565b611469565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613bf2565b6114ff565b60405161062791906141d5565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613ac6565b6115b1565b005b34801561066557600080fd5b50610680600480360381019061067b9190613b22565b6116f2565b005b34801561068e57600080fd5b506106a960048036038101906106a491906138ba565b61178b565b6040516106b6919061467b565b60405180910390f35b3480156106cb57600080fd5b506106d4611843565b005b3480156106e257600080fd5b506106eb6118cb565b6040516106f8919061467b565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906138ba565b6118d1565b604051610735919061423c565b60405180910390f35b34801561074a57600080fd5b5061075361197f565b60405161076091906141d5565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190613b22565b6119a9565b005b34801561079e57600080fd5b506107a7611a42565b6040516107b49190614279565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df91906138ba565b611ad4565b6040516107f1919061467b565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c91906139fd565b611aec565b005b34801561082f57600080fd5b5061084a6004803603810190610845919061397a565b611c6d565b005b34801561085857600080fd5b50610873600480360381019061086e9190613bf2565b611ccf565b6040516108809190614279565b60405180910390f35b34801561089557600080fd5b5061089e611d76565b6040516108ab919061425e565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d691906138e7565b611d89565b6040516108e8919061425e565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613b22565b611e1d565b005b34801561092657600080fd5b50610941600480360381019061093c91906138ba565b611eb6565b005b34801561094f57600080fd5b5061096a600480360381019061096591906138ba565b611fae565b005b6000610977826121be565b9050919050565b60606000805461098d90614990565b80601f01602080910402602001604051908101604052809291908181526020018280546109b990614990565b8015610a065780601f106109db57610100808354040283529160200191610a06565b820191906000526020600020905b8154815290600101906020018083116109e957829003601f168201915b5050505050905090565b600d60149054906101000a900460ff1681565b6000610a2e82612238565b610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a64906144db565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab3826114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b9061459b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b436122a4565b73ffffffffffffffffffffffffffffffffffffffff161480610b725750610b7181610b6c6122a4565b611d89565b5b610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba8906143fb565b60405180910390fd5b610bbb83836122ac565b505050565b600d60159054906101000a900460ff16610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c069061463b565b60405180910390fd5b610c1a81600a612365565b610c243382612594565b50565b600a81565b6000600880549050905090565b600d60159054906101000a900460ff1681565b610c546122a4565b73ffffffffffffffffffffffffffffffffffffffff16610c7261197f565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf9061451b565b60405180910390fd5b60005b8151811015610d4657600060116000848481518110610ced57610cec614b29565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d3e906149f3565b915050610ccb565b5050565b610d5b610d556122a4565b82612690565b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906145db565b60405180910390fd5b610da583838361276e565b505050565b6000610db58361178b565b8210610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906142bb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d60169054906101000a900460ff16610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061463b565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f189061449b565b60405180910390fd5b610f6a81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612365565b610f743382612594565b50565b60126020528060005260406000206000915090505481565b610f9761197f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061101d5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61105c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110539061457b565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110c4573d6000803e3d6000fd5b50565b6110e283838360405180602001604052806000815250611c6d565b505050565b600d60149054906101000a900460ff16611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061447b565b60405180910390fd5b6111403382612690565b61117f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111769061429b565b60405180910390fd5b611188816129ca565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112129061441b565b60405180910390fd5b6102126112286010612084565b10611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f906143bb565b60405180910390fd5b611272600f61206e565b61128582611280600f612084565b612adb565b61128f600f612084565b818373ffffffffffffffffffffffffffffffffffffffff167f25fcc4a38797b6bb2909d01ce1e2a65ee0771f45075666c208797cb7c15eacb760405160405180910390a46112dd601061206e565b5050565b600080600d60169054906101000a900460ff161561138a57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138391906148a6565b90506113ef565b600d60159054906101000a900460ff16156113ee57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a6113eb91906148a6565b90505b5b80915050919050565b6000611402610c2c565b8210611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906145fb565b60405180910390fd5b6008828154811061145757611456614b29565b5b90600052602060002001549050919050565b6114716122a4565b73ffffffffffffffffffffffffffffffffffffffff1661148f61197f565b73ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc9061451b565b60405180910390fd5b80600b90805190602001906114fb929190613630565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f9061445b565b60405180910390fd5b80915050919050565b6115b96122a4565b73ffffffffffffffffffffffffffffffffffffffff166115d761197f565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116249061451b565b60405180910390fd5b60008111611670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116679061461b565b60405180910390fd5b60005b82518110156116ed57816011600085848151811061169457611693614b29565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806116e5906149f3565b915050611673565b505050565b6116fa6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661171861197f565b73ffffffffffffffffffffffffffffffffffffffff161461176e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117659061451b565b60405180910390fd5b80600d60146101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f39061443b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61184b6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661186961197f565b73ffffffffffffffffffffffffffffffffffffffff16146118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b69061451b565b60405180910390fd5b6118c96000612af9565b565b600e5481565b606060006118de8361178b565b905060008167ffffffffffffffff8111156118fc576118fb614b58565b5b60405190808252806020026020018201604052801561192a5781602001602082028036833780820191505090505b50905060005b82811015611974576119428582610daa565b82828151811061195557611954614b29565b5b602002602001018181525050808061196c906149f3565b915050611930565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119b16122a4565b73ffffffffffffffffffffffffffffffffffffffff166119cf61197f565b73ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061451b565b60405180910390fd5b80600d60156101000a81548160ff02191690831515021790555050565b606060018054611a5190614990565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7d90614990565b8015611aca5780601f10611a9f57610100808354040283529160200191611aca565b820191906000526020600020905b815481529060010190602001808311611aad57829003601f168201915b5050505050905090565b60116020528060005260406000206000915090505481565b611af46122a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b599061439b565b60405180910390fd5b8060056000611b6f6122a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c1c6122a4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c61919061425e565b60405180910390a35050565b611c7e611c786122a4565b83612690565b611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb4906145db565b60405180910390fd5b611cc984848484612bbf565b50505050565b6060611cda82612238565b611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d109061455b565b60405180910390fd5b6000611d23612c1b565b90506000815111611d435760405180602001604052806000815250611d6e565b80611d4d84612cad565b604051602001611d5e9291906141b1565b6040516020818303038152906040525b915050919050565b600d60169054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e256122a4565b73ffffffffffffffffffffffffffffffffffffffff16611e4361197f565b73ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e909061451b565b60405180910390fd5b80600d60166101000a81548160ff02191690831515021790555050565b611ebe6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611edc61197f565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061451b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f999061431b565b60405180910390fd5b611fab81612af9565b50565b611fb66122a4565b73ffffffffffffffffffffffffffffffffffffffff16611fd461197f565b73ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120219061451b565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b6120b08383836121b9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120f3576120ee81612e0e565b612132565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612131576121308382612e57565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121755761217081612fc4565b6121b4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121b3576121b28282613095565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612231575061223082613114565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661231f836114ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906142fb565b60405180910390fd5b60008211612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d9061465b565b60405180910390fd5b610d06600e541061245c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612453906143bb565b60405180910390fd5b610d0682600e5461246d91906147c5565b11156124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a59061435b565b60405180910390fd5b8082601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124fa91906147c5565b111561253b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612532906145bb565b60405180910390fd5b8166b1a2bc2ec5000061254e919061484c565b341015612590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612587906144fb565b60405180910390fd5b5050565b60005b8181101561261c576125a9600f61206e565b6125bc836125b7600f612084565b612adb565b6125c6600f612084565b8373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a38080612614906149f3565b915050612597565b5080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266c91906147c5565b9250508190555080600e600082825461268591906147c5565b925050819055505050565b600061269b82612238565b6126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d1906143db565b60405180910390fd5b60006126e5836114ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061275457508373ffffffffffffffffffffffffffffffffffffffff1661273c84610a23565b73ffffffffffffffffffffffffffffffffffffffff16145b8061276557506127648185611d89565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278e826114ff565b73ffffffffffffffffffffffffffffffffffffffff16146127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db9061453b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b9061437b565b60405180910390fd5b61285f8383836131f6565b61286a6000826122ac565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ba91906148a6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291191906147c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006129d5826114ff565b90506129e3816000846131f6565b6129ee6000836122ac565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3e91906148a6565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612af5828260405180602001604052806000815250613206565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bca84848461276e565b612bd684848484613261565b612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c906142db565b60405180910390fd5b50505050565b6060600b8054612c2a90614990565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5690614990565b8015612ca35780601f10612c7857610100808354040283529160200191612ca3565b820191906000526020600020905b815481529060010190602001808311612c8657829003601f168201915b5050505050905090565b60606000821415612cf5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e09565b600082905060005b60008214612d27578080612d10906149f3565b915050600a82612d20919061481b565b9150612cfd565b60008167ffffffffffffffff811115612d4357612d42614b58565b5b6040519080825280601f01601f191660200182016040528015612d755781602001600182028036833780820191505090505b5090505b60008514612e0257600182612d8e91906148a6565b9150600a85612d9d9190614a3c565b6030612da991906147c5565b60f81b818381518110612dbf57612dbe614b29565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dfb919061481b565b9450612d79565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e648461178b565b612e6e91906148a6565b9050600060076000848152602001908152602001600020549050818114612f53576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fd891906148a6565b905060006009600084815260200190815260200160002054905060006008838154811061300857613007614b29565b5b90600052602060002001549050806008838154811061302a57613029614b29565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061307957613078614afa565b5b6001900381819060005260206000200160009055905550505050565b60006130a08361178b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131df57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131ef57506131ee826133f8565b5b9050919050565b6132018383836120a5565b505050565b6132108383613462565b61321d6000848484613261565b61325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906142db565b60405180910390fd5b505050565b60006132828473ffffffffffffffffffffffffffffffffffffffff16612092565b156133eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132ab6122a4565b8786866040518563ffffffff1660e01b81526004016132cd94939291906141f0565b602060405180830381600087803b1580156132e757600080fd5b505af192505050801561331857506040513d601f19601f820116820180604052508101906133159190613b7c565b60015b61339b573d8060008114613348576040519150601f19603f3d011682016040523d82523d6000602084013e61334d565b606091505b50600081511415613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a906142db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133f0565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c9906144bb565b60405180910390fd5b6134db81612238565b1561351b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135129061433b565b60405180910390fd5b613527600083836131f6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357791906147c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461363c90614990565b90600052602060002090601f01602090048101928261365e57600085556136a5565b82601f1061367757805160ff19168380011785556136a5565b828001600101855582156136a5579182015b828111156136a4578251825591602001919060010190613689565b5b5090506136b291906136b6565b5090565b5b808211156136cf5760008160009055506001016136b7565b5090565b60006136e66136e1846146bb565b614696565b9050808382526020820190508285602086028201111561370957613708614b8c565b5b60005b85811015613739578161371f88826137c7565b84526020840193506020830192505060018101905061370c565b5050509392505050565b6000613756613751846146e7565b614696565b90508281526020810184848401111561377257613771614b91565b5b61377d84828561494e565b509392505050565b600061379861379384614718565b614696565b9050828152602081018484840111156137b4576137b3614b91565b5b6137bf84828561494e565b509392505050565b6000813590506137d68161532e565b92915050565b600082601f8301126137f1576137f0614b87565b5b81356138018482602086016136d3565b91505092915050565b60008135905061381981615345565b92915050565b60008135905061382e8161535c565b92915050565b6000815190506138438161535c565b92915050565b600082601f83011261385e5761385d614b87565b5b813561386e848260208601613743565b91505092915050565b600082601f83011261388c5761388b614b87565b5b813561389c848260208601613785565b91505092915050565b6000813590506138b481615373565b92915050565b6000602082840312156138d0576138cf614b9b565b5b60006138de848285016137c7565b91505092915050565b600080604083850312156138fe576138fd614b9b565b5b600061390c858286016137c7565b925050602061391d858286016137c7565b9150509250929050565b6000806000606084860312156139405761393f614b9b565b5b600061394e868287016137c7565b935050602061395f868287016137c7565b9250506040613970868287016138a5565b9150509250925092565b6000806000806080858703121561399457613993614b9b565b5b60006139a2878288016137c7565b94505060206139b3878288016137c7565b93505060406139c4878288016138a5565b925050606085013567ffffffffffffffff8111156139e5576139e4614b96565b5b6139f187828801613849565b91505092959194509250565b60008060408385031215613a1457613a13614b9b565b5b6000613a22858286016137c7565b9250506020613a338582860161380a565b9150509250929050565b60008060408385031215613a5457613a53614b9b565b5b6000613a62858286016137c7565b9250506020613a73858286016138a5565b9150509250929050565b600060208284031215613a9357613a92614b9b565b5b600082013567ffffffffffffffff811115613ab157613ab0614b96565b5b613abd848285016137dc565b91505092915050565b60008060408385031215613add57613adc614b9b565b5b600083013567ffffffffffffffff811115613afb57613afa614b96565b5b613b07858286016137dc565b9250506020613b18858286016138a5565b9150509250929050565b600060208284031215613b3857613b37614b9b565b5b6000613b468482850161380a565b91505092915050565b600060208284031215613b6557613b64614b9b565b5b6000613b738482850161381f565b91505092915050565b600060208284031215613b9257613b91614b9b565b5b6000613ba084828501613834565b91505092915050565b600060208284031215613bbf57613bbe614b9b565b5b600082013567ffffffffffffffff811115613bdd57613bdc614b96565b5b613be984828501613877565b91505092915050565b600060208284031215613c0857613c07614b9b565b5b6000613c16848285016138a5565b91505092915050565b6000613c2b8383614193565b60208301905092915050565b613c40816148da565b82525050565b6000613c5182614759565b613c5b8185614787565b9350613c6683614749565b8060005b83811015613c97578151613c7e8882613c1f565b9750613c898361477a565b925050600181019050613c6a565b5085935050505092915050565b613cad816148ec565b82525050565b6000613cbe82614764565b613cc88185614798565b9350613cd881856020860161495d565b613ce181614ba0565b840191505092915050565b6000613cf78261476f565b613d0181856147a9565b9350613d1181856020860161495d565b613d1a81614ba0565b840191505092915050565b6000613d308261476f565b613d3a81856147ba565b9350613d4a81856020860161495d565b80840191505092915050565b6000613d636016836147a9565b9150613d6e82614bb1565b602082019050919050565b6000613d86602b836147a9565b9150613d9182614bda565b604082019050919050565b6000613da96032836147a9565b9150613db482614c29565b604082019050919050565b6000613dcc6030836147a9565b9150613dd782614c78565b604082019050919050565b6000613def6026836147a9565b9150613dfa82614cc7565b604082019050919050565b6000613e12601c836147a9565b9150613e1d82614d16565b602082019050919050565b6000613e35601e836147a9565b9150613e4082614d3f565b602082019050919050565b6000613e586024836147a9565b9150613e6382614d68565b604082019050919050565b6000613e7b6019836147a9565b9150613e8682614db7565b602082019050919050565b6000613e9e601b836147a9565b9150613ea982614de0565b602082019050919050565b6000613ec1602c836147a9565b9150613ecc82614e09565b604082019050919050565b6000613ee46038836147a9565b9150613eef82614e58565b604082019050919050565b6000613f076016836147a9565b9150613f1282614ea7565b602082019050919050565b6000613f2a602a836147a9565b9150613f3582614ed0565b604082019050919050565b6000613f4d6029836147a9565b9150613f5882614f1f565b604082019050919050565b6000613f706010836147a9565b9150613f7b82614f6e565b602082019050919050565b6000613f93601e836147a9565b9150613f9e82614f97565b602082019050919050565b6000613fb66020836147a9565b9150613fc182614fc0565b602082019050919050565b6000613fd9602c836147a9565b9150613fe482614fe9565b604082019050919050565b6000613ffc6023836147a9565b915061400782615038565b604082019050919050565b600061401f6020836147a9565b915061402a82615087565b602082019050919050565b60006140426029836147a9565b915061404d826150b0565b604082019050919050565b6000614065602f836147a9565b9150614070826150ff565b604082019050919050565b6000614088601f836147a9565b91506140938261514e565b602082019050919050565b60006140ab6021836147a9565b91506140b682615177565b604082019050919050565b60006140ce6024836147a9565b91506140d9826151c6565b604082019050919050565b60006140f16031836147a9565b91506140fc82615215565b604082019050919050565b6000614114602c836147a9565b915061411f82615264565b604082019050919050565b60006141376015836147a9565b9150614142826152b3565b602082019050919050565b600061415a6020836147a9565b9150614165826152dc565b602082019050919050565b600061417d6012836147a9565b915061418882615305565b602082019050919050565b61419c81614944565b82525050565b6141ab81614944565b82525050565b60006141bd8285613d25565b91506141c98284613d25565b91508190509392505050565b60006020820190506141ea6000830184613c37565b92915050565b60006080820190506142056000830187613c37565b6142126020830186613c37565b61421f60408301856141a2565b81810360608301526142318184613cb3565b905095945050505050565b600060208201905081810360008301526142568184613c46565b905092915050565b60006020820190506142736000830184613ca4565b92915050565b600060208201905081810360008301526142938184613cec565b905092915050565b600060208201905081810360008301526142b481613d56565b9050919050565b600060208201905081810360008301526142d481613d79565b9050919050565b600060208201905081810360008301526142f481613d9c565b9050919050565b6000602082019050818103600083015261431481613dbf565b9050919050565b6000602082019050818103600083015261433481613de2565b9050919050565b6000602082019050818103600083015261435481613e05565b9050919050565b6000602082019050818103600083015261437481613e28565b9050919050565b6000602082019050818103600083015261439481613e4b565b9050919050565b600060208201905081810360008301526143b481613e6e565b9050919050565b600060208201905081810360008301526143d481613e91565b9050919050565b600060208201905081810360008301526143f481613eb4565b9050919050565b6000602082019050818103600083015261441481613ed7565b9050919050565b6000602082019050818103600083015261443481613efa565b9050919050565b6000602082019050818103600083015261445481613f1d565b9050919050565b6000602082019050818103600083015261447481613f40565b9050919050565b6000602082019050818103600083015261449481613f63565b9050919050565b600060208201905081810360008301526144b481613f86565b9050919050565b600060208201905081810360008301526144d481613fa9565b9050919050565b600060208201905081810360008301526144f481613fcc565b9050919050565b6000602082019050818103600083015261451481613fef565b9050919050565b6000602082019050818103600083015261453481614012565b9050919050565b6000602082019050818103600083015261455481614035565b9050919050565b6000602082019050818103600083015261457481614058565b9050919050565b600060208201905081810360008301526145948161407b565b9050919050565b600060208201905081810360008301526145b48161409e565b9050919050565b600060208201905081810360008301526145d4816140c1565b9050919050565b600060208201905081810360008301526145f4816140e4565b9050919050565b6000602082019050818103600083015261461481614107565b9050919050565b600060208201905081810360008301526146348161412a565b9050919050565b600060208201905081810360008301526146548161414d565b9050919050565b6000602082019050818103600083015261467481614170565b9050919050565b600060208201905061469060008301846141a2565b92915050565b60006146a06146b1565b90506146ac82826149c2565b919050565b6000604051905090565b600067ffffffffffffffff8211156146d6576146d5614b58565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561470257614701614b58565b5b61470b82614ba0565b9050602081019050919050565b600067ffffffffffffffff82111561473357614732614b58565b5b61473c82614ba0565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147d082614944565b91506147db83614944565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148105761480f614a6d565b5b828201905092915050565b600061482682614944565b915061483183614944565b92508261484157614840614a9c565b5b828204905092915050565b600061485782614944565b915061486283614944565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561489b5761489a614a6d565b5b828202905092915050565b60006148b182614944565b91506148bc83614944565b9250828210156148cf576148ce614a6d565b5b828203905092915050565b60006148e582614924565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561497b578082015181840152602081019050614960565b8381111561498a576000848401525b50505050565b600060028204905060018216806149a857607f821691505b602082108114156149bc576149bb614acb565b5b50919050565b6149cb82614ba0565b810181811067ffffffffffffffff821117156149ea576149e9614b58565b5b80604052505050565b60006149fe82614944565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a3157614a30614a6d565b5b600182019050919050565b6000614a4782614944565b9150614a5283614944565b925082614a6257614a61614a9c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6e6f74206f776e6572206e6f7220617070726f76656400000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5468652063616c6c65722063616e206f6e6c792062652061207573657220616e60008201527f64206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f75676820646174657320746f20626520636c61696d65640000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f206461746573206c65667420746f20626520636c61696d65640000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616c6c6572206973206e6f742061206d696e74657200000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4275726e696e672064697361626c656400000000000000000000000000000000600082015250565b7f41646472657373206e6f7420666f756e6420696e2077686974656c6973740000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820457468657220746f20636c61696d2074686520646160008201527f7465730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f74206f776e6572206f7220747265617375727900600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e20616c6c6f746564206460008201527f6174657300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f436f756e742063616e206e6f74206265207a65726f0000000000000000000000600082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b7f43616e2774206d696e7420302064617465730000000000000000000000000000600082015250565b615337816148da565b811461534257600080fd5b50565b61534e816148ec565b811461535957600080fd5b50565b615365816148f8565b811461537057600080fd5b50565b61537c81614944565b811461538757600080fd5b5056fea26469706673582212206cbae2601887d73838ee912d82f5d353faa2a4f41f9a6219f4d5f7d7aea29f9c64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000004a8e3dbe4b48a875733fe590856b95f633fed1fc000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6170692e646574686e66742e696f2f6170692f312e302f6f70656e7365612f6173736574732f000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): https://api.dethnft.io/api/1.0/opensea/assets/
Arg [1] : _treasury (address): 0x4A8e3dbE4B48a875733Fe590856b95f633FED1FC

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000004a8e3dbe4b48a875733fe590856b95f633fed1fc
Arg [2] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [3] : 68747470733a2f2f6170692e646574686e66742e696f2f6170692f312e302f6f
Arg [4] : 70656e7365612f6173736574732f000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44481:8295:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50668:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25166:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44795:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26725:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26248:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48487:248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44974:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38907:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44849:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47625:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27615:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38575:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48082:337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45668:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46299:236;;;;;;;;;;;;;:::i;:::-;;28025:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49415:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48833:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49756:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39097:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46632:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24860:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47289:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47118:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24590:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2595:94;;;;;;;;;;;;;:::i;:::-;;45284:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50209:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1944:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46782:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25335:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45556:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27018:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28281:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25510:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44886:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27384:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46947:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2844:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47907:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50668:212;50807:4;50836:36;50860:11;50836:23;:36::i;:::-;50829:43;;50668:212;;;:::o;25166:100::-;25220:13;25253:5;25246:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25166:100;:::o;44795:25::-;;;;;;;;;;;;;:::o;26725:221::-;26801:7;26829:16;26837:7;26829;:16::i;:::-;26821:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26914:15;:24;26930:7;26914:24;;;;;;;;;;;;;;;;;;;;;26907:31;;26725:221;;;:::o;26248:411::-;26329:13;26345:23;26360:7;26345:14;:23::i;:::-;26329:39;;26393:5;26387:11;;:2;:11;;;;26379:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26487:5;26471:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26496:37;26513:5;26520:12;:10;:12::i;:::-;26496:16;:37::i;:::-;26471:62;26449:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26630:21;26639:2;26643:7;26630:8;:21::i;:::-;26318:341;26248:411;;:::o;48487:248::-;48570:18;;;;;;;;;;;48562:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;48636:44;48651:12;45015:2;48636:14;:44::i;:::-;48691:36;48702:10;48714:12;48691:10;:36::i;:::-;48487:248;:::o;44974:43::-;45015:2;44974:43;:::o;38907:113::-;38968:7;38995:10;:17;;;;38988:24;;38907:113;:::o;44849:30::-;;;;;;;;;;;;;:::o;47625:179::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47709:9:::1;47704:93;47728:5;:12;47724:1;:16;47704:93;;;47784:1;47762:9;:19;47772:5;47778:1;47772:8;;;;;;;;:::i;:::-;;;;;;;;47762:19;;;;;;;;;;;;;;;:23;;;;47742:3;;;;;:::i;:::-;;;;47704:93;;;;47625:179:::0;:::o;27615:339::-;27810:41;27829:12;:10;:12::i;:::-;27843:7;27810:18;:41::i;:::-;27802:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27918:28;27928:4;27934:2;27938:7;27918:9;:28::i;:::-;27615:339;;;:::o;38575:256::-;38672:7;38708:23;38725:5;38708:16;:23::i;:::-;38700:5;:31;38692:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38797:12;:19;38810:5;38797:19;;;;;;;;;;;;;;;:26;38817:5;38797:26;;;;;;;;;;;;38790:33;;38575:256;;;;:::o;48082:337::-;48166:19;;;;;;;;;;;48158:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48266:1;48241:9;:21;48251:10;48241:21;;;;;;;;;;;;;;;;:26;;48233:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;48313:51;48328:12;48342:9;:21;48352:10;48342:21;;;;;;;;;;;;;;;;48313:14;:51::i;:::-;48375:36;48386:10;48398:12;48375:10;:36::i;:::-;48082:337;:::o;45668:48::-;;;;;;;;;;;;;;;;;:::o;46299:236::-;46375:7;:5;:7::i;:::-;46361:21;;:10;:21;;;:47;;;;46400:8;;;;;;;;;;;46386:22;;:10;:22;;;46361:47;46339:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;46486:8;;;;;;;;;;;46478:26;;:49;46505:21;46478:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46299:236::o;28025:185::-;28163:39;28180:4;28186:2;28190:7;28163:39;;;;;;;;;;;;:16;:39::i;:::-;28025:185;;;:::o;49415:248::-;49474:13;;;;;;;;;;;49466:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;49541:39;49560:10;49572:7;49541:18;:39::i;:::-;49519:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;49641:14;49647:7;49641:5;:14::i;:::-;49415:248;:::o;48833:496::-;48935:6;;;;;;;;;;;48921:20;;:10;:20;;;48913:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45253:3;49001:32;:22;:30;:32::i;:::-;:58;48979:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;49125:26;:14;:24;:26::i;:::-;49162:40;49172:3;49177:24;:14;:22;:24::i;:::-;49162:9;:40::i;:::-;49251:24;:14;:22;:24::i;:::-;49237:12;49232:3;49218:58;;;;;;;;;;;;49287:34;:22;:32;:34::i;:::-;48833:496;;:::o;49756:363::-;49819:7;49839:17;49871:19;;;;;;;;;;;49867:218;;;49941:13;:23;49955:8;49941:23;;;;;;;;;;;;;;;;49919:9;:19;49929:8;49919:19;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;49907:57;;49867:218;;;49986:18;;;;;;;;;;;49982:103;;;50050:13;:23;50064:8;50050:23;;;;;;;;;;;;;;;;45015:2;50033:40;;;;:::i;:::-;50021:52;;49982:103;49867:218;50102:9;50095:16;;;49756:363;;;:::o;39097:233::-;39172:7;39208:30;:28;:30::i;:::-;39200:5;:38;39192:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39305:10;39316:5;39305:17;;;;;;;;:::i;:::-;;;;;;;;;;39298:24;;39097:233;;;:::o;46632:92::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46712:4:::1;46702:7;:14;;;;;;;;;;;;:::i;:::-;;46632:92:::0;:::o;24860:239::-;24932:7;24952:13;24968:7;:16;24976:7;24968:16;;;;;;;;;;;;;;;;;;;;;24952:32;;25020:1;25003:19;;:5;:19;;;;24995:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25086:5;25079:12;;;24860:239;;;:::o;47289:275::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47421:1:::1;47412:6;:10;47404:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47464:9;47459:98;47483:5;:12;47479:1;:16;47459:98;;;47539:6;47517:9;:19;47527:5;47533:1;47527:8;;;;;;;;:::i;:::-;;;;;;;;47517:19;;;;;;;;;;;;;;;:28;;;;47497:3;;;;;:::i;:::-;;;;47459:98;;;;47289:275:::0;;:::o;47118:115::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47211:14:::1;47195:13;;:30;;;;;;;;;;;;;;;;;;47118:115:::0;:::o;24590:208::-;24662:7;24707:1;24690:19;;:5;:19;;;;24682:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24774:9;:16;24784:5;24774:16;;;;;;;;;;;;;;;;24767:23;;24590:208;;;:::o;2595:94::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2660:21:::1;2678:1;2660:9;:21::i;:::-;2595:94::o:0;45284:35::-;;;;:::o;50209:395::-;50298:16;50332:18;50353:17;50363:6;50353:9;:17::i;:::-;50332:38;;50381:23;50421:10;50407:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50381:51;;50448:13;50443:130;50475:10;50467:5;:18;50443:130;;;50527:34;50547:6;50555:5;50527:19;:34::i;:::-;50511:6;50518:5;50511:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;50487:7;;;;;:::i;:::-;;;;50443:130;;;;50590:6;50583:13;;;;50209:395;;;:::o;1944:87::-;1990:7;2017:6;;;;;;;;;;;2010:13;;1944:87;:::o;46782:106::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46874:6:::1;46853:18;;:27;;;;;;;;;;;;;;;;;;46782:106:::0;:::o;25335:104::-;25391:13;25424:7;25417:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25335:104;:::o;45556:44::-;;;;;;;;;;;;;;;;;:::o;27018:295::-;27133:12;:10;:12::i;:::-;27121:24;;:8;:24;;;;27113:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27233:8;27188:18;:32;27207:12;:10;:12::i;:::-;27188:32;;;;;;;;;;;;;;;:42;27221:8;27188:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27286:8;27257:48;;27272:12;:10;:12::i;:::-;27257:48;;;27296:8;27257:48;;;;;;:::i;:::-;;;;;;;;27018:295;;:::o;28281:328::-;28456:41;28475:12;:10;:12::i;:::-;28489:7;28456:18;:41::i;:::-;28448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28562:39;28576:4;28582:2;28586:7;28595:5;28562:13;:39::i;:::-;28281:328;;;;:::o;25510:334::-;25583:13;25617:16;25625:7;25617;:16::i;:::-;25609:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25698:21;25722:10;:8;:10::i;:::-;25698:34;;25774:1;25756:7;25750:21;:25;:86;;;;;;;;;;;;;;;;;25802:7;25811:18;:7;:16;:18::i;:::-;25785:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25750:86;25743:93;;;25510:334;;;:::o;44886:31::-;;;;;;;;;;;;;:::o;27384:164::-;27481:4;27505:18;:25;27524:5;27505:25;;;;;;;;;;;;;;;:35;27531:8;27505:35;;;;;;;;;;;;;;;;;;;;;;;;;27498:42;;27384:164;;;;:::o;46947:108::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47041:6:::1;47019:19;;:28;;;;;;;;;;;;;;;;;;46947:108:::0;:::o;2844:192::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2953:1:::1;2933:22;;:8;:22;;;;2925:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3009:19;3019:8;3009:9;:19::i;:::-;2844:192:::0;:::o;47907:90::-;2175:12;:10;:12::i;:::-;2164:23;;:7;:5;:7::i;:::-;:23;;;2156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47982:7:::1;47973:6;;:16;;;;;;;;;;;;;;;;;;47907:90:::0;:::o;4165:127::-;4272:1;4254:7;:14;;;:19;;;;;;;;;;;4165:127;:::o;4043:114::-;4108:7;4135;:14;;;4128:21;;4043:114;;;:::o;12753:387::-;12813:4;13021:12;13088:7;13076:20;13068:28;;13131:1;13124:4;:8;13117:15;;;12753:387;;;:::o;39943:589::-;40087:45;40114:4;40120:2;40124:7;40087:26;:45::i;:::-;40165:1;40149:18;;:4;:18;;;40145:187;;;40184:40;40216:7;40184:31;:40::i;:::-;40145:187;;;40254:2;40246:10;;:4;:10;;;40242:90;;40273:47;40306:4;40312:7;40273:32;:47::i;:::-;40242:90;40145:187;40360:1;40346:16;;:2;:16;;;40342:183;;;40379:45;40416:7;40379:36;:45::i;:::-;40342:183;;;40452:4;40446:10;;:2;:10;;;40442:83;;40473:40;40501:2;40505:7;40473:27;:40::i;:::-;40442:83;40342:183;39943:589;;;:::o;36215:126::-;;;;:::o;38267:224::-;38369:4;38408:35;38393:50;;;:11;:50;;;;:90;;;;38447:36;38471:11;38447:23;:36::i;:::-;38393:90;38386:97;;38267:224;;;:::o;30119:127::-;30184:4;30236:1;30208:30;;:7;:16;30216:7;30208:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30201:37;;30119:127;;;:::o;732:98::-;785:7;812:10;805:17;;732:98;:::o;34101:174::-;34203:2;34176:15;:24;34192:7;34176:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34259:7;34255:2;34221:46;;34230:23;34245:7;34230:14;:23::i;:::-;34221:46;;;;;;;;;;;;34101:174;;:::o;50968:849::-;51114:10;51101:23;;:9;:23;;;51079:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;51234:1;51219:12;:16;51211:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45191:4;51291:16;;:36;51269:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;45191:4;51435:12;51416:16;;:31;;;;:::i;:::-;51415:54;;51393:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;51604:7;51588:12;51560:13;:25;51574:10;51560:25;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:51;;51538:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;51734:12;45094:17;51721:25;;;;:::i;:::-;51708:9;:38;;51686:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;50968:849;;:::o;51888:376::-;51968:9;51963:206;51987:12;51983:1;:16;51963:206;;;52021:26;:14;:24;:26::i;:::-;52062:40;52072:3;52077:24;:14;:22;:24::i;:::-;52062:9;:40::i;:::-;52132:24;:14;:22;:24::i;:::-;52127:3;52122:35;;;;;;;;;;;;52001:3;;;;;:::i;:::-;;;;51963:206;;;;52201:12;52179:13;:18;52193:3;52179:18;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;52244:12;52224:16;;:32;;;;;;;:::i;:::-;;;;;;;;51888:376;;:::o;30413:348::-;30506:4;30531:16;30539:7;30531;:16::i;:::-;30523:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30607:13;30623:23;30638:7;30623:14;:23::i;:::-;30607:39;;30676:5;30665:16;;:7;:16;;;:51;;;;30709:7;30685:31;;:20;30697:7;30685:11;:20::i;:::-;:31;;;30665:51;:87;;;;30720:32;30737:5;30744:7;30720:16;:32::i;:::-;30665:87;30657:96;;;30413:348;;;;:::o;33405:578::-;33564:4;33537:31;;:23;33552:7;33537:14;:23::i;:::-;:31;;;33529:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33647:1;33633:16;;:2;:16;;;;33625:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33703:39;33724:4;33730:2;33734:7;33703:20;:39::i;:::-;33807:29;33824:1;33828:7;33807:8;:29::i;:::-;33868:1;33849:9;:15;33859:4;33849:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33897:1;33880:9;:13;33890:2;33880:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33928:2;33909:7;:16;33917:7;33909:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33967:7;33963:2;33948:27;;33957:4;33948:27;;;;;;;;;;;;33405:578;;;:::o;32708:360::-;32768:13;32784:23;32799:7;32784:14;:23::i;:::-;32768:39;;32820:48;32841:5;32856:1;32860:7;32820:20;:48::i;:::-;32909:29;32926:1;32930:7;32909:8;:29::i;:::-;32971:1;32951:9;:16;32961:5;32951:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32990:7;:16;32998:7;32990:16;;;;;;;;;;;;32983:23;;;;;;;;;;;33052:7;33048:1;33024:36;;33033:5;33024:36;;;;;;;;;;;;32757:311;32708:360;:::o;31103:110::-;31179:26;31189:2;31193:7;31179:26;;;;;;;;;;;;:9;:26::i;:::-;31103:110;;:::o;3044:173::-;3100:16;3119:6;;;;;;;;;;;3100:25;;3145:8;3136:6;;:17;;;;;;;;;;;;;;;;;;3200:8;3169:40;;3190:8;3169:40;;;;;;;;;;;;3089:128;3044:173;:::o;29491:315::-;29648:28;29658:4;29664:2;29668:7;29648:9;:28::i;:::-;29695:48;29718:4;29724:2;29728:7;29737:5;29695:22;:48::i;:::-;29687:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29491:315;;;;:::o;52317:108::-;52377:13;52410:7;52403:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52317:108;:::o;20180:723::-;20236:13;20466:1;20457:5;:10;20453:53;;;20484:10;;;;;;;;;;;;;;;;;;;;;20453:53;20516:12;20531:5;20516:20;;20547:14;20572:78;20587:1;20579:4;:9;20572:78;;20605:8;;;;;:::i;:::-;;;;20636:2;20628:10;;;;;:::i;:::-;;;20572:78;;;20660:19;20692:6;20682:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20660:39;;20710:154;20726:1;20717:5;:10;20710:154;;20754:1;20744:11;;;;;:::i;:::-;;;20821:2;20813:5;:10;;;;:::i;:::-;20800:2;:24;;;;:::i;:::-;20787:39;;20770:6;20777;20770:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20850:2;20841:11;;;;;:::i;:::-;;;20710:154;;;20888:6;20874:21;;;;;20180:723;;;;:::o;41255:164::-;41359:10;:17;;;;41332:15;:24;41348:7;41332:24;;;;;;;;;;;:44;;;;41387:10;41403:7;41387:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41255:164;:::o;42046:988::-;42312:22;42362:1;42337:22;42354:4;42337:16;:22::i;:::-;:26;;;;:::i;:::-;42312:51;;42374:18;42395:17;:26;42413:7;42395:26;;;;;;;;;;;;42374:47;;42542:14;42528:10;:28;42524:328;;42573:19;42595:12;:18;42608:4;42595:18;;;;;;;;;;;;;;;:34;42614:14;42595:34;;;;;;;;;;;;42573:56;;42679:11;42646:12;:18;42659:4;42646:18;;;;;;;;;;;;;;;:30;42665:10;42646:30;;;;;;;;;;;:44;;;;42796:10;42763:17;:30;42781:11;42763:30;;;;;;;;;;;:43;;;;42558:294;42524:328;42948:17;:26;42966:7;42948:26;;;;;;;;;;;42941:33;;;42992:12;:18;43005:4;42992:18;;;;;;;;;;;;;;;:34;43011:14;42992:34;;;;;;;;;;;42985:41;;;42127:907;;42046:988;;:::o;43329:1079::-;43582:22;43627:1;43607:10;:17;;;;:21;;;;:::i;:::-;43582:46;;43639:18;43660:15;:24;43676:7;43660:24;;;;;;;;;;;;43639:45;;44011:19;44033:10;44044:14;44033:26;;;;;;;;:::i;:::-;;;;;;;;;;44011:48;;44097:11;44072:10;44083;44072:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44208:10;44177:15;:28;44193:11;44177:28;;;;;;;;;;;:41;;;;44349:15;:24;44365:7;44349:24;;;;;;;;;;;44342:31;;;44384:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43400:1008;;;43329:1079;:::o;40833:221::-;40918:14;40935:20;40952:2;40935:16;:20::i;:::-;40918:37;;40993:7;40966:12;:16;40979:2;40966:16;;;;;;;;;;;;;;;:24;40983:6;40966:24;;;;;;;;;;;:34;;;;41040:6;41011:17;:26;41029:7;41011:26;;;;;;;;;;;:35;;;;40907:147;40833:221;;:::o;24221:305::-;24323:4;24375:25;24360:40;;;:11;:40;;;;:105;;;;24432:33;24417:48;;;:11;:48;;;;24360:105;:158;;;;24482:36;24506:11;24482:23;:36::i;:::-;24360:158;24340:178;;24221:305;;;:::o;52558:215::-;52720:45;52747:4;52753:2;52757:7;52720:26;:45::i;:::-;52558:215;;;:::o;31440:321::-;31570:18;31576:2;31580:7;31570:5;:18::i;:::-;31621:54;31652:1;31656:2;31660:7;31669:5;31621:22;:54::i;:::-;31599:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31440:321;;;:::o;34840:803::-;34995:4;35016:15;:2;:13;;;:15::i;:::-;35012:624;;;35068:2;35052:36;;;35089:12;:10;:12::i;:::-;35103:4;35109:7;35118:5;35052:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35048:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35315:1;35298:6;:13;:18;35294:272;;;35341:60;;;;;;;;;;:::i;:::-;;;;;;;;35294:272;35516:6;35510:13;35501:6;35497:2;35493:15;35486:38;35048:533;35185:45;;;35175:55;;;:6;:55;;;;35168:62;;;;;35012:624;35620:4;35613:11;;34840:803;;;;;;;:::o;22737:157::-;22822:4;22861:25;22846:40;;;:11;:40;;;;22839:47;;22737:157;;;:::o;32097:382::-;32191:1;32177:16;;:2;:16;;;;32169:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32250:16;32258:7;32250;:16::i;:::-;32249:17;32241:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32312:45;32341:1;32345:2;32349:7;32312:20;:45::i;:::-;32387:1;32370:9;:13;32380:2;32370:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32418:2;32399:7;:16;32407:7;32399:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32463:7;32459:2;32438:33;;32455:1;32438:33;;;;;;;;;;;;32097:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:684::-;7396:6;7404;7453:2;7441:9;7432:7;7428:23;7424:32;7421:119;;;7459:79;;:::i;:::-;7421:119;7607:1;7596:9;7592:17;7579:31;7637:18;7629:6;7626:30;7623:117;;;7659:79;;:::i;:::-;7623:117;7764:78;7834:7;7825:6;7814:9;7810:22;7764:78;:::i;:::-;7754:88;;7550:302;7891:2;7917:53;7962:7;7953:6;7942:9;7938:22;7917:53;:::i;:::-;7907:63;;7862:118;7303:684;;;;;:::o;7993:323::-;8049:6;8098:2;8086:9;8077:7;8073:23;8069:32;8066:119;;;8104:79;;:::i;:::-;8066:119;8224:1;8249:50;8291:7;8282:6;8271:9;8267:22;8249:50;:::i;:::-;8239:60;;8195:114;7993:323;;;;:::o;8322:327::-;8380:6;8429:2;8417:9;8408:7;8404:23;8400:32;8397:119;;;8435:79;;:::i;:::-;8397:119;8555:1;8580:52;8624:7;8615:6;8604:9;8600:22;8580:52;:::i;:::-;8570:62;;8526:116;8322:327;;;;:::o;8655:349::-;8724:6;8773:2;8761:9;8752:7;8748:23;8744:32;8741:119;;;8779:79;;:::i;:::-;8741:119;8899:1;8924:63;8979:7;8970:6;8959:9;8955:22;8924:63;:::i;:::-;8914:73;;8870:127;8655:349;;;;:::o;9010:509::-;9079:6;9128:2;9116:9;9107:7;9103:23;9099:32;9096:119;;;9134:79;;:::i;:::-;9096:119;9282:1;9271:9;9267:17;9254:31;9312:18;9304:6;9301:30;9298:117;;;9334:79;;:::i;:::-;9298:117;9439:63;9494:7;9485:6;9474:9;9470:22;9439:63;:::i;:::-;9429:73;;9225:287;9010:509;;;;:::o;9525:329::-;9584:6;9633:2;9621:9;9612:7;9608:23;9604:32;9601:119;;;9639:79;;:::i;:::-;9601:119;9759:1;9784:53;9829:7;9820:6;9809:9;9805:22;9784:53;:::i;:::-;9774:63;;9730:117;9525:329;;;;:::o;9860:179::-;9929:10;9950:46;9992:3;9984:6;9950:46;:::i;:::-;10028:4;10023:3;10019:14;10005:28;;9860:179;;;;:::o;10045:118::-;10132:24;10150:5;10132:24;:::i;:::-;10127:3;10120:37;10045:118;;:::o;10199:732::-;10318:3;10347:54;10395:5;10347:54;:::i;:::-;10417:86;10496:6;10491:3;10417:86;:::i;:::-;10410:93;;10527:56;10577:5;10527:56;:::i;:::-;10606:7;10637:1;10622:284;10647:6;10644:1;10641:13;10622:284;;;10723:6;10717:13;10750:63;10809:3;10794:13;10750:63;:::i;:::-;10743:70;;10836:60;10889:6;10836:60;:::i;:::-;10826:70;;10682:224;10669:1;10666;10662:9;10657:14;;10622:284;;;10626:14;10922:3;10915:10;;10323:608;;;10199:732;;;;:::o;10937:109::-;11018:21;11033:5;11018:21;:::i;:::-;11013:3;11006:34;10937:109;;:::o;11052:360::-;11138:3;11166:38;11198:5;11166:38;:::i;:::-;11220:70;11283:6;11278:3;11220:70;:::i;:::-;11213:77;;11299:52;11344:6;11339:3;11332:4;11325:5;11321:16;11299:52;:::i;:::-;11376:29;11398:6;11376:29;:::i;:::-;11371:3;11367:39;11360:46;;11142:270;11052:360;;;;:::o;11418:364::-;11506:3;11534:39;11567:5;11534:39;:::i;:::-;11589:71;11653:6;11648:3;11589:71;:::i;:::-;11582:78;;11669:52;11714:6;11709:3;11702:4;11695:5;11691:16;11669:52;:::i;:::-;11746:29;11768:6;11746:29;:::i;:::-;11741:3;11737:39;11730:46;;11510:272;11418:364;;;;:::o;11788:377::-;11894:3;11922:39;11955:5;11922:39;:::i;:::-;11977:89;12059:6;12054:3;11977:89;:::i;:::-;11970:96;;12075:52;12120:6;12115:3;12108:4;12101:5;12097:16;12075:52;:::i;:::-;12152:6;12147:3;12143:16;12136:23;;11898:267;11788:377;;;;:::o;12171:366::-;12313:3;12334:67;12398:2;12393:3;12334:67;:::i;:::-;12327:74;;12410:93;12499:3;12410:93;:::i;:::-;12528:2;12523:3;12519:12;12512:19;;12171:366;;;:::o;12543:::-;12685:3;12706:67;12770:2;12765:3;12706:67;:::i;:::-;12699:74;;12782:93;12871:3;12782:93;:::i;:::-;12900:2;12895:3;12891:12;12884:19;;12543:366;;;:::o;12915:::-;13057:3;13078:67;13142:2;13137:3;13078:67;:::i;:::-;13071:74;;13154:93;13243:3;13154:93;:::i;:::-;13272:2;13267:3;13263:12;13256:19;;12915:366;;;:::o;13287:::-;13429:3;13450:67;13514:2;13509:3;13450:67;:::i;:::-;13443:74;;13526:93;13615:3;13526:93;:::i;:::-;13644:2;13639:3;13635:12;13628:19;;13287:366;;;:::o;13659:::-;13801:3;13822:67;13886:2;13881:3;13822:67;:::i;:::-;13815:74;;13898:93;13987:3;13898:93;:::i;:::-;14016:2;14011:3;14007:12;14000:19;;13659:366;;;:::o;14031:::-;14173:3;14194:67;14258:2;14253:3;14194:67;:::i;:::-;14187:74;;14270:93;14359:3;14270:93;:::i;:::-;14388:2;14383:3;14379:12;14372:19;;14031:366;;;:::o;14403:::-;14545:3;14566:67;14630:2;14625:3;14566:67;:::i;:::-;14559:74;;14642:93;14731:3;14642:93;:::i;:::-;14760:2;14755:3;14751:12;14744:19;;14403:366;;;:::o;14775:::-;14917:3;14938:67;15002:2;14997:3;14938:67;:::i;:::-;14931:74;;15014:93;15103:3;15014:93;:::i;:::-;15132:2;15127:3;15123:12;15116:19;;14775:366;;;:::o;15147:::-;15289:3;15310:67;15374:2;15369:3;15310:67;:::i;:::-;15303:74;;15386:93;15475:3;15386:93;:::i;:::-;15504:2;15499:3;15495:12;15488:19;;15147:366;;;:::o;15519:::-;15661:3;15682:67;15746:2;15741:3;15682:67;:::i;:::-;15675:74;;15758:93;15847:3;15758:93;:::i;:::-;15876:2;15871:3;15867:12;15860:19;;15519:366;;;:::o;15891:::-;16033:3;16054:67;16118:2;16113:3;16054:67;:::i;:::-;16047:74;;16130:93;16219:3;16130:93;:::i;:::-;16248:2;16243:3;16239:12;16232:19;;15891:366;;;:::o;16263:::-;16405:3;16426:67;16490:2;16485:3;16426:67;:::i;:::-;16419:74;;16502:93;16591:3;16502:93;:::i;:::-;16620:2;16615:3;16611:12;16604:19;;16263:366;;;:::o;16635:::-;16777:3;16798:67;16862:2;16857:3;16798:67;:::i;:::-;16791:74;;16874:93;16963:3;16874:93;:::i;:::-;16992:2;16987:3;16983:12;16976:19;;16635:366;;;:::o;17007:::-;17149:3;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17246:93;17335:3;17246:93;:::i;:::-;17364:2;17359:3;17355:12;17348:19;;17007:366;;;:::o;17379:::-;17521:3;17542:67;17606:2;17601:3;17542:67;:::i;:::-;17535:74;;17618:93;17707:3;17618:93;:::i;:::-;17736:2;17731:3;17727:12;17720:19;;17379:366;;;:::o;17751:::-;17893:3;17914:67;17978:2;17973:3;17914:67;:::i;:::-;17907:74;;17990:93;18079:3;17990:93;:::i;:::-;18108:2;18103:3;18099:12;18092:19;;17751:366;;;:::o;18123:::-;18265:3;18286:67;18350:2;18345:3;18286:67;:::i;:::-;18279:74;;18362:93;18451:3;18362:93;:::i;:::-;18480:2;18475:3;18471:12;18464:19;;18123:366;;;:::o;18495:::-;18637:3;18658:67;18722:2;18717:3;18658:67;:::i;:::-;18651:74;;18734:93;18823:3;18734:93;:::i;:::-;18852:2;18847:3;18843:12;18836:19;;18495:366;;;:::o;18867:::-;19009:3;19030:67;19094:2;19089:3;19030:67;:::i;:::-;19023:74;;19106:93;19195:3;19106:93;:::i;:::-;19224:2;19219:3;19215:12;19208:19;;18867:366;;;:::o;19239:::-;19381:3;19402:67;19466:2;19461:3;19402:67;:::i;:::-;19395:74;;19478:93;19567:3;19478:93;:::i;:::-;19596:2;19591:3;19587:12;19580:19;;19239:366;;;:::o;19611:::-;19753:3;19774:67;19838:2;19833:3;19774:67;:::i;:::-;19767:74;;19850:93;19939:3;19850:93;:::i;:::-;19968:2;19963:3;19959:12;19952:19;;19611:366;;;:::o;19983:::-;20125:3;20146:67;20210:2;20205:3;20146:67;:::i;:::-;20139:74;;20222:93;20311:3;20222:93;:::i;:::-;20340:2;20335:3;20331:12;20324:19;;19983:366;;;:::o;20355:::-;20497:3;20518:67;20582:2;20577:3;20518:67;:::i;:::-;20511:74;;20594:93;20683:3;20594:93;:::i;:::-;20712:2;20707:3;20703:12;20696:19;;20355:366;;;:::o;20727:::-;20869:3;20890:67;20954:2;20949:3;20890:67;:::i;:::-;20883:74;;20966:93;21055:3;20966:93;:::i;:::-;21084:2;21079:3;21075:12;21068:19;;20727:366;;;:::o;21099:::-;21241:3;21262:67;21326:2;21321:3;21262:67;:::i;:::-;21255:74;;21338:93;21427:3;21338:93;:::i;:::-;21456:2;21451:3;21447:12;21440:19;;21099:366;;;:::o;21471:::-;21613:3;21634:67;21698:2;21693:3;21634:67;:::i;:::-;21627:74;;21710:93;21799:3;21710:93;:::i;:::-;21828:2;21823:3;21819:12;21812:19;;21471:366;;;:::o;21843:::-;21985:3;22006:67;22070:2;22065:3;22006:67;:::i;:::-;21999:74;;22082:93;22171:3;22082:93;:::i;:::-;22200:2;22195:3;22191:12;22184:19;;21843:366;;;:::o;22215:::-;22357:3;22378:67;22442:2;22437:3;22378:67;:::i;:::-;22371:74;;22454:93;22543:3;22454:93;:::i;:::-;22572:2;22567:3;22563:12;22556:19;;22215:366;;;:::o;22587:::-;22729:3;22750:67;22814:2;22809:3;22750:67;:::i;:::-;22743:74;;22826:93;22915:3;22826:93;:::i;:::-;22944:2;22939:3;22935:12;22928:19;;22587:366;;;:::o;22959:::-;23101:3;23122:67;23186:2;23181:3;23122:67;:::i;:::-;23115:74;;23198:93;23287:3;23198:93;:::i;:::-;23316:2;23311:3;23307:12;23300:19;;22959:366;;;:::o;23331:::-;23473:3;23494:67;23558:2;23553:3;23494:67;:::i;:::-;23487:74;;23570:93;23659:3;23570:93;:::i;:::-;23688:2;23683:3;23679:12;23672:19;;23331:366;;;:::o;23703:108::-;23780:24;23798:5;23780:24;:::i;:::-;23775:3;23768:37;23703:108;;:::o;23817:118::-;23904:24;23922:5;23904:24;:::i;:::-;23899:3;23892:37;23817:118;;:::o;23941:435::-;24121:3;24143:95;24234:3;24225:6;24143:95;:::i;:::-;24136:102;;24255:95;24346:3;24337:6;24255:95;:::i;:::-;24248:102;;24367:3;24360:10;;23941:435;;;;;:::o;24382:222::-;24475:4;24513:2;24502:9;24498:18;24490:26;;24526:71;24594:1;24583:9;24579:17;24570:6;24526:71;:::i;:::-;24382:222;;;;:::o;24610:640::-;24805:4;24843:3;24832:9;24828:19;24820:27;;24857:71;24925:1;24914:9;24910:17;24901:6;24857:71;:::i;:::-;24938:72;25006:2;24995:9;24991:18;24982:6;24938:72;:::i;:::-;25020;25088:2;25077:9;25073:18;25064:6;25020:72;:::i;:::-;25139:9;25133:4;25129:20;25124:2;25113:9;25109:18;25102:48;25167:76;25238:4;25229:6;25167:76;:::i;:::-;25159:84;;24610:640;;;;;;;:::o;25256:373::-;25399:4;25437:2;25426:9;25422:18;25414:26;;25486:9;25480:4;25476:20;25472:1;25461:9;25457:17;25450:47;25514:108;25617:4;25608:6;25514:108;:::i;:::-;25506:116;;25256:373;;;;:::o;25635:210::-;25722:4;25760:2;25749:9;25745:18;25737:26;;25773:65;25835:1;25824:9;25820:17;25811:6;25773:65;:::i;:::-;25635:210;;;;:::o;25851:313::-;25964:4;26002:2;25991:9;25987:18;25979:26;;26051:9;26045:4;26041:20;26037:1;26026:9;26022:17;26015:47;26079:78;26152:4;26143:6;26079:78;:::i;:::-;26071:86;;25851:313;;;;:::o;26170:419::-;26336:4;26374:2;26363:9;26359:18;26351:26;;26423:9;26417:4;26413:20;26409:1;26398:9;26394:17;26387:47;26451:131;26577:4;26451:131;:::i;:::-;26443:139;;26170:419;;;:::o;26595:::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:::-;27186:4;27224:2;27213:9;27209:18;27201:26;;27273:9;27267:4;27263:20;27259:1;27248:9;27244:17;27237:47;27301:131;27427:4;27301:131;:::i;:::-;27293:139;;27020:419;;;:::o;27445:::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27445:419;;;:::o;27870:::-;28036:4;28074:2;28063:9;28059:18;28051:26;;28123:9;28117:4;28113:20;28109:1;28098:9;28094:17;28087:47;28151:131;28277:4;28151:131;:::i;:::-;28143:139;;27870:419;;;:::o;28295:::-;28461:4;28499:2;28488:9;28484:18;28476:26;;28548:9;28542:4;28538:20;28534:1;28523:9;28519:17;28512:47;28576:131;28702:4;28576:131;:::i;:::-;28568:139;;28295:419;;;:::o;28720:::-;28886:4;28924:2;28913:9;28909:18;28901:26;;28973:9;28967:4;28963:20;28959:1;28948:9;28944:17;28937:47;29001:131;29127:4;29001:131;:::i;:::-;28993:139;;28720:419;;;:::o;29145:::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;30845:419;;;:::o;31270:::-;31436:4;31474:2;31463:9;31459:18;31451:26;;31523:9;31517:4;31513:20;31509:1;31498:9;31494:17;31487:47;31551:131;31677:4;31551:131;:::i;:::-;31543:139;;31270:419;;;:::o;31695:::-;31861:4;31899:2;31888:9;31884:18;31876:26;;31948:9;31942:4;31938:20;31934:1;31923:9;31919:17;31912:47;31976:131;32102:4;31976:131;:::i;:::-;31968:139;;31695:419;;;:::o;32120:::-;32286:4;32324:2;32313:9;32309:18;32301:26;;32373:9;32367:4;32363:20;32359:1;32348:9;32344:17;32337:47;32401:131;32527:4;32401:131;:::i;:::-;32393:139;;32120:419;;;:::o;32545:::-;32711:4;32749:2;32738:9;32734:18;32726:26;;32798:9;32792:4;32788:20;32784:1;32773:9;32769:17;32762:47;32826:131;32952:4;32826:131;:::i;:::-;32818:139;;32545:419;;;:::o;32970:::-;33136:4;33174:2;33163:9;33159:18;33151:26;;33223:9;33217:4;33213:20;33209:1;33198:9;33194:17;33187:47;33251:131;33377:4;33251:131;:::i;:::-;33243:139;;32970:419;;;:::o;33395:::-;33561:4;33599:2;33588:9;33584:18;33576:26;;33648:9;33642:4;33638:20;33634:1;33623:9;33619:17;33612:47;33676:131;33802:4;33676:131;:::i;:::-;33668:139;;33395:419;;;:::o;33820:::-;33986:4;34024:2;34013:9;34009:18;34001:26;;34073:9;34067:4;34063:20;34059:1;34048:9;34044:17;34037:47;34101:131;34227:4;34101:131;:::i;:::-;34093:139;;33820:419;;;:::o;34245:::-;34411:4;34449:2;34438:9;34434:18;34426:26;;34498:9;34492:4;34488:20;34484:1;34473:9;34469:17;34462:47;34526:131;34652:4;34526:131;:::i;:::-;34518:139;;34245:419;;;:::o;34670:::-;34836:4;34874:2;34863:9;34859:18;34851:26;;34923:9;34917:4;34913:20;34909:1;34898:9;34894:17;34887:47;34951:131;35077:4;34951:131;:::i;:::-;34943:139;;34670:419;;;:::o;35095:::-;35261:4;35299:2;35288:9;35284:18;35276:26;;35348:9;35342:4;35338:20;35334:1;35323:9;35319:17;35312:47;35376:131;35502:4;35376:131;:::i;:::-;35368:139;;35095:419;;;:::o;35520:::-;35686:4;35724:2;35713:9;35709:18;35701:26;;35773:9;35767:4;35763:20;35759:1;35748:9;35744:17;35737:47;35801:131;35927:4;35801:131;:::i;:::-;35793:139;;35520:419;;;:::o;35945:::-;36111:4;36149:2;36138:9;36134:18;36126:26;;36198:9;36192:4;36188:20;36184:1;36173:9;36169:17;36162:47;36226:131;36352:4;36226:131;:::i;:::-;36218:139;;35945:419;;;:::o;36370:::-;36536:4;36574:2;36563:9;36559:18;36551:26;;36623:9;36617:4;36613:20;36609:1;36598:9;36594:17;36587:47;36651:131;36777:4;36651:131;:::i;:::-;36643:139;;36370:419;;;:::o;36795:::-;36961:4;36999:2;36988:9;36984:18;36976:26;;37048:9;37042:4;37038:20;37034:1;37023:9;37019:17;37012:47;37076:131;37202:4;37076:131;:::i;:::-;37068:139;;36795:419;;;:::o;37220:::-;37386:4;37424:2;37413:9;37409:18;37401:26;;37473:9;37467:4;37463:20;37459:1;37448:9;37444:17;37437:47;37501:131;37627:4;37501:131;:::i;:::-;37493:139;;37220:419;;;:::o;37645:::-;37811:4;37849:2;37838:9;37834:18;37826:26;;37898:9;37892:4;37888:20;37884:1;37873:9;37869:17;37862:47;37926:131;38052:4;37926:131;:::i;:::-;37918:139;;37645:419;;;:::o;38070:::-;38236:4;38274:2;38263:9;38259:18;38251:26;;38323:9;38317:4;38313:20;38309:1;38298:9;38294:17;38287:47;38351:131;38477:4;38351:131;:::i;:::-;38343:139;;38070:419;;;:::o;38495:::-;38661:4;38699:2;38688:9;38684:18;38676:26;;38748:9;38742:4;38738:20;38734:1;38723:9;38719:17;38712:47;38776:131;38902:4;38776:131;:::i;:::-;38768:139;;38495:419;;;:::o;38920:::-;39086:4;39124:2;39113:9;39109:18;39101:26;;39173:9;39167:4;39163:20;39159:1;39148:9;39144:17;39137:47;39201:131;39327:4;39201:131;:::i;:::-;39193:139;;38920:419;;;:::o;39345:222::-;39438:4;39476:2;39465:9;39461:18;39453:26;;39489:71;39557:1;39546:9;39542:17;39533:6;39489:71;:::i;:::-;39345:222;;;;:::o;39573:129::-;39607:6;39634:20;;:::i;:::-;39624:30;;39663:33;39691:4;39683:6;39663:33;:::i;:::-;39573:129;;;:::o;39708:75::-;39741:6;39774:2;39768:9;39758:19;;39708:75;:::o;39789:311::-;39866:4;39956:18;39948:6;39945:30;39942:56;;;39978:18;;:::i;:::-;39942:56;40028:4;40020:6;40016:17;40008:25;;40088:4;40082;40078:15;40070:23;;39789:311;;;:::o;40106:307::-;40167:4;40257:18;40249:6;40246:30;40243:56;;;40279:18;;:::i;:::-;40243:56;40317:29;40339:6;40317:29;:::i;:::-;40309:37;;40401:4;40395;40391:15;40383:23;;40106:307;;;:::o;40419:308::-;40481:4;40571:18;40563:6;40560:30;40557:56;;;40593:18;;:::i;:::-;40557:56;40631:29;40653:6;40631:29;:::i;:::-;40623:37;;40715:4;40709;40705:15;40697:23;;40419:308;;;:::o;40733:132::-;40800:4;40823:3;40815:11;;40853:4;40848:3;40844:14;40836:22;;40733:132;;;:::o;40871:114::-;40938:6;40972:5;40966:12;40956:22;;40871:114;;;:::o;40991:98::-;41042:6;41076:5;41070:12;41060:22;;40991:98;;;:::o;41095:99::-;41147:6;41181:5;41175:12;41165:22;;41095:99;;;:::o;41200:113::-;41270:4;41302;41297:3;41293:14;41285:22;;41200:113;;;:::o;41319:184::-;41418:11;41452:6;41447:3;41440:19;41492:4;41487:3;41483:14;41468:29;;41319:184;;;;:::o;41509:168::-;41592:11;41626:6;41621:3;41614:19;41666:4;41661:3;41657:14;41642:29;;41509:168;;;;:::o;41683:169::-;41767:11;41801:6;41796:3;41789:19;41841:4;41836:3;41832:14;41817:29;;41683:169;;;;:::o;41858:148::-;41960:11;41997:3;41982:18;;41858:148;;;;:::o;42012:305::-;42052:3;42071:20;42089:1;42071:20;:::i;:::-;42066:25;;42105:20;42123:1;42105:20;:::i;:::-;42100:25;;42259:1;42191:66;42187:74;42184:1;42181:81;42178:107;;;42265:18;;:::i;:::-;42178:107;42309:1;42306;42302:9;42295:16;;42012:305;;;;:::o;42323:185::-;42363:1;42380:20;42398:1;42380:20;:::i;:::-;42375:25;;42414:20;42432:1;42414:20;:::i;:::-;42409:25;;42453:1;42443:35;;42458:18;;:::i;:::-;42443:35;42500:1;42497;42493:9;42488:14;;42323:185;;;;:::o;42514:348::-;42554:7;42577:20;42595:1;42577:20;:::i;:::-;42572:25;;42611:20;42629:1;42611:20;:::i;:::-;42606:25;;42799:1;42731:66;42727:74;42724:1;42721:81;42716:1;42709:9;42702:17;42698:105;42695:131;;;42806:18;;:::i;:::-;42695:131;42854:1;42851;42847:9;42836:20;;42514:348;;;;:::o;42868:191::-;42908:4;42928:20;42946:1;42928:20;:::i;:::-;42923:25;;42962:20;42980:1;42962:20;:::i;:::-;42957:25;;43001:1;42998;42995:8;42992:34;;;43006:18;;:::i;:::-;42992:34;43051:1;43048;43044:9;43036:17;;42868:191;;;;:::o;43065:96::-;43102:7;43131:24;43149:5;43131:24;:::i;:::-;43120:35;;43065:96;;;:::o;43167:90::-;43201:7;43244:5;43237:13;43230:21;43219:32;;43167:90;;;:::o;43263:149::-;43299:7;43339:66;43332:5;43328:78;43317:89;;43263:149;;;:::o;43418:126::-;43455:7;43495:42;43488:5;43484:54;43473:65;;43418:126;;;:::o;43550:77::-;43587:7;43616:5;43605:16;;43550:77;;;:::o;43633:154::-;43717:6;43712:3;43707;43694:30;43779:1;43770:6;43765:3;43761:16;43754:27;43633:154;;;:::o;43793:307::-;43861:1;43871:113;43885:6;43882:1;43879:13;43871:113;;;43970:1;43965:3;43961:11;43955:18;43951:1;43946:3;43942:11;43935:39;43907:2;43904:1;43900:10;43895:15;;43871:113;;;44002:6;43999:1;43996:13;43993:101;;;44082:1;44073:6;44068:3;44064:16;44057:27;43993:101;43842:258;43793:307;;;:::o;44106:320::-;44150:6;44187:1;44181:4;44177:12;44167:22;;44234:1;44228:4;44224:12;44255:18;44245:81;;44311:4;44303:6;44299:17;44289:27;;44245:81;44373:2;44365:6;44362:14;44342:18;44339:38;44336:84;;;44392:18;;:::i;:::-;44336:84;44157:269;44106:320;;;:::o;44432:281::-;44515:27;44537:4;44515:27;:::i;:::-;44507:6;44503:40;44645:6;44633:10;44630:22;44609:18;44597:10;44594:34;44591:62;44588:88;;;44656:18;;:::i;:::-;44588:88;44696:10;44692:2;44685:22;44475:238;44432:281;;:::o;44719:233::-;44758:3;44781:24;44799:5;44781:24;:::i;:::-;44772:33;;44827:66;44820:5;44817:77;44814:103;;;44897:18;;:::i;:::-;44814:103;44944:1;44937:5;44933:13;44926:20;;44719:233;;;:::o;44958:176::-;44990:1;45007:20;45025:1;45007:20;:::i;:::-;45002:25;;45041:20;45059:1;45041:20;:::i;:::-;45036:25;;45080:1;45070:35;;45085:18;;:::i;:::-;45070:35;45126:1;45123;45119:9;45114:14;;44958:176;;;;:::o;45140:180::-;45188:77;45185:1;45178:88;45285:4;45282:1;45275:15;45309:4;45306:1;45299:15;45326:180;45374:77;45371:1;45364:88;45471:4;45468:1;45461:15;45495:4;45492:1;45485:15;45512:180;45560:77;45557:1;45550:88;45657:4;45654:1;45647:15;45681:4;45678:1;45671:15;45698:180;45746:77;45743:1;45736:88;45843:4;45840:1;45833:15;45867:4;45864:1;45857:15;45884:180;45932:77;45929:1;45922:88;46029:4;46026:1;46019:15;46053:4;46050:1;46043:15;46070:180;46118:77;46115:1;46108:88;46215:4;46212:1;46205:15;46239:4;46236:1;46229:15;46256:117;46365:1;46362;46355:12;46379:117;46488:1;46485;46478:12;46502:117;46611:1;46608;46601:12;46625:117;46734:1;46731;46724:12;46748:117;46857:1;46854;46847:12;46871:102;46912:6;46963:2;46959:7;46954:2;46947:5;46943:14;46939:28;46929:38;;46871:102;;;:::o;46979:172::-;47119:24;47115:1;47107:6;47103:14;47096:48;46979:172;:::o;47157:230::-;47297:34;47293:1;47285:6;47281:14;47274:58;47366:13;47361:2;47353:6;47349:15;47342:38;47157:230;:::o;47393:237::-;47533:34;47529:1;47521:6;47517:14;47510:58;47602:20;47597:2;47589:6;47585:15;47578:45;47393:237;:::o;47636:235::-;47776:34;47772:1;47764:6;47760:14;47753:58;47845:18;47840:2;47832:6;47828:15;47821:43;47636:235;:::o;47877:225::-;48017:34;48013:1;48005:6;48001:14;47994:58;48086:8;48081:2;48073:6;48069:15;48062:33;47877:225;:::o;48108:178::-;48248:30;48244:1;48236:6;48232:14;48225:54;48108:178;:::o;48292:180::-;48432:32;48428:1;48420:6;48416:14;48409:56;48292:180;:::o;48478:223::-;48618:34;48614:1;48606:6;48602:14;48595:58;48687:6;48682:2;48674:6;48670:15;48663:31;48478:223;:::o;48707:175::-;48847:27;48843:1;48835:6;48831:14;48824:51;48707:175;:::o;48888:177::-;49028:29;49024:1;49016:6;49012:14;49005:53;48888:177;:::o;49071:231::-;49211:34;49207:1;49199:6;49195:14;49188:58;49280:14;49275:2;49267:6;49263:15;49256:39;49071:231;:::o;49308:243::-;49448:34;49444:1;49436:6;49432:14;49425:58;49517:26;49512:2;49504:6;49500:15;49493:51;49308:243;:::o;49557:172::-;49697:24;49693:1;49685:6;49681:14;49674:48;49557:172;:::o;49735:229::-;49875:34;49871:1;49863:6;49859:14;49852:58;49944:12;49939:2;49931:6;49927:15;49920:37;49735:229;:::o;49970:228::-;50110:34;50106:1;50098:6;50094:14;50087:58;50179:11;50174:2;50166:6;50162:15;50155:36;49970:228;:::o;50204:166::-;50344:18;50340:1;50332:6;50328:14;50321:42;50204:166;:::o;50376:180::-;50516:32;50512:1;50504:6;50500:14;50493:56;50376:180;:::o;50562:182::-;50702:34;50698:1;50690:6;50686:14;50679:58;50562:182;:::o;50750:231::-;50890:34;50886:1;50878:6;50874:14;50867:58;50959:14;50954:2;50946:6;50942:15;50935:39;50750:231;:::o;50987:222::-;51127:34;51123:1;51115:6;51111:14;51104:58;51196:5;51191:2;51183:6;51179:15;51172:30;50987:222;:::o;51215:182::-;51355:34;51351:1;51343:6;51339:14;51332:58;51215:182;:::o;51403:228::-;51543:34;51539:1;51531:6;51527:14;51520:58;51612:11;51607:2;51599:6;51595:15;51588:36;51403:228;:::o;51637:234::-;51777:34;51773:1;51765:6;51761:14;51754:58;51846:17;51841:2;51833:6;51829:15;51822:42;51637:234;:::o;51877:181::-;52017:33;52013:1;52005:6;52001:14;51994:57;51877:181;:::o;52064:220::-;52204:34;52200:1;52192:6;52188:14;52181:58;52273:3;52268:2;52260:6;52256:15;52249:28;52064:220;:::o;52290:223::-;52430:34;52426:1;52418:6;52414:14;52407:58;52499:6;52494:2;52486:6;52482:15;52475:31;52290:223;:::o;52519:236::-;52659:34;52655:1;52647:6;52643:14;52636:58;52728:19;52723:2;52715:6;52711:15;52704:44;52519:236;:::o;52761:231::-;52901:34;52897:1;52889:6;52885:14;52878:58;52970:14;52965:2;52957:6;52953:15;52946:39;52761:231;:::o;52998:171::-;53138:23;53134:1;53126:6;53122:14;53115:47;52998:171;:::o;53175:182::-;53315:34;53311:1;53303:6;53299:14;53292:58;53175:182;:::o;53363:168::-;53503:20;53499:1;53491:6;53487:14;53480:44;53363:168;:::o;53537:122::-;53610:24;53628:5;53610:24;:::i;:::-;53603:5;53600:35;53590:63;;53649:1;53646;53639:12;53590:63;53537:122;:::o;53665:116::-;53735:21;53750:5;53735:21;:::i;:::-;53728:5;53725:32;53715:60;;53771:1;53768;53761:12;53715:60;53665:116;:::o;53787:120::-;53859:23;53876:5;53859:23;:::i;:::-;53852:5;53849:34;53839:62;;53897:1;53894;53887:12;53839:62;53787:120;:::o;53913:122::-;53986:24;54004:5;53986:24;:::i;:::-;53979:5;53976:35;53966:63;;54025:1;54022;54015:12;53966:63;53913:122;:::o

Swarm Source

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