ETH Price: $2,410.20 (-0.18%)

Token

Poti (Poti)
 

Overview

Max Total Supply

70 Poti

Holders

67

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Poti
0x376ac2ba9355ffa251a2b712a8fdf0361dfb9844
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:
Poti

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/[email protected]/utils/Counters.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/[email protected]/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/[email protected]/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/[email protected]/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Enumerable.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721Enumerable.sol


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

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: POTI.sol


/*
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                    *                              *                                       ┼                        │
│                                                                    ┼                                               │
│             ┼                                                                                              ┼       │
│                                 ┼                                                                                  │
│                                                                              *        x                            │
│                                                *                                      x                     *      │
│                                                                                       x                            │
│                                                         ┼                            xxx                           │
│                       *                                                              xxx                           │
│                                                                              xxx     xxx     xxxx                  │
│                                                                                xxx   xxx   xxxx                    │
│                        xxxxx            xx                                     xxxxxxxxxxxxxxxx                    │
│      ┼              xxxx   xxxx          xx                                      xxxxxxxxxxxx            ┼         │
│                   xx          xx          xx                                       xxxxxxxx                        │
│                  xx            xx          xx                      ┼        xxxxxxxxxxxxxxxxxxxxxx                 │
│                 xx              x           xx     x     xx                    xxxxxxxxxxxxxxxx                    │
│                xx              xx            xx xxx      xx                       xxx  xx xxx                      │
│                x              xx             xxxx                                xx     x   xx                     │
│                x            xxx         xxxxxxxxx         xx                           xx                          │
│   *            x          xxx                  xx         xx                          xx                           │
│                    xx     x        xxxxx       xx          x             ┼          xxx                   *        │
│                     xx            xx   xx      xx         xx                                                       │
│                      xx           xx    x      xx                                                                  │
│                       xx           xxxxx      xxx                                                                  │
│                        xx                                               *                                          │
│                         x                                                                               * ┼        │
│        ┼                                      *                     ┼                     ┼                        │
│                                      ┼                                                                             │
│                                                                                    *                               │
│                            *                                                                                       │
│                                                                                                                    │
│                                                                                                    *               │
│   With love and passion for NFTs: Poti was built. Tribute to Boki. Have fun in games and appreciate art            │
│               Playing the game of life and loving art - That is what life is all about                             │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
*/
pragma solidity ^0.8.4;





contract Poti is ERC721, ERC721Enumerable, Ownable {

    uint256 public price = 0.02 ether;
    uint256 public maxSupply = 7800; //Total max supply (free + public)
    uint256 public maxFree = 1000; //Max supply to free mint
    uint256 public maxFreeMint = 1; //Max per wallet in free mint
    uint256 public maxPublicMint = 4; //Max per wallet/tx in public mint
    uint256 public freelimit = 0; //Freemint counter override
    uint256 public pausef = 1; //Pause flag. Yes, an int
    uint256 public freezeURI = 0; //Makes URI impossible to be ever changed. 0 equals false. 1 equals true. Yes, another int being a flag, fam. 
    uint256 public devmintlimit = 0; //Counter to limit dev mint.
    string public baseURI ="ipfs://QmbTRLxd1mGrzP4rs7zzx8v6tzhVWb7veMyM6s6yk7u1VH/"; // Unrevealed IPFS :)  Not sniping this one buddy
    using Counters for Counters.Counter;
    mapping(address => uint256) public Thiswalletminted;
    Counters.Counter private _tokenIdCounter;
    constructor() ERC721("Poti", "Poti") {}
    /* Withdraw funds from primary sales function */
    function withdraw() public onlyOwner(){
    require(address(this).balance > 0, "Nothing to withdraw.");
    payable(owner()).transfer(address(this).balance);
    }

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        // the `super` keyword references the parent function of the same name
        string memory uri = super.tokenURI(tokenId);
        return string(abi.encodePacked(uri, ".json"));
    }
    /*   Change URI from collection. Can be used until freezeURI flag becomes "1" */
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        require (freezeURI != 1, "URI can't be changed.");
        baseURI = _newBaseURI;
    }
    /* Pause / Unpause functions */
    function pause() public onlyOwner {
        require (pausef != 1, "Already paused.");
        pausef = 1;
    }
    function unpause() public onlyOwner {
        require (pausef != 0, "Already unpaused.");
        pausef = 0;
    }
    /* Public Mint function */ 
    function PublicMint(uint256 _mintAmount) public payable {
        uint256 total = totalSupply();
        uint256 tokenId = _tokenIdCounter.current();
        uint256 addressMinterCounter = Thiswalletminted[msg.sender];
        require(pausef != 1, "Mint not started yet.");
        require(total < maxSupply, "Sold out.");
        require(msg.value >= price * _mintAmount, "Price not matching. 0.02 ETH per mint.");
        require(_mintAmount > 0, "Cannot mint 0.");
        require(_mintAmount <= maxPublicMint, "Cannot mint more than 4 per transaction." );
        require(addressMinterCounter + _mintAmount <= maxPublicMint, "Cannot mint more than 4 per wallet.");
        require(total + _mintAmount <= maxSupply, "Cannot mint more than supply.");
        for(uint256 c = 0; c < _mintAmount; ++c) {
        tokenId = _tokenIdCounter.current();
        _safeMint(msg.sender, tokenId);
        _tokenIdCounter.increment();
        Thiswalletminted[msg.sender]++;
        }
        delete total;
    }
    /* Freemint function */
    function Freemint() public{
        uint256 total = totalSupply();
        uint256 tokenId = _tokenIdCounter.current();
        uint256 _mintAmount = 1;
        uint256 thiswalletfreemint = Thiswalletminted[msg.sender];
        require(pausef != 1, "Mint not started yet.");
        require(total < maxSupply, "Sold out.");
        require(thiswalletfreemint + _mintAmount <= maxFreeMint, "Max freemint per wallet reached.");
        require(total + _mintAmount <= maxFree, "Cannot exceed max collection supply." );
        require(freelimit < maxFree, "Max free minted reached (1000).");
        Thiswalletminted[msg.sender]++;
        _safeMint(msg.sender, tokenId);
        _tokenIdCounter.increment();
        Thiswalletminted[msg.sender]++;
        freelimit++;
        delete total;
        delete thiswalletfreemint;
    }
    /*Function basically to mint only 1 NFT (ID 0) to deployer wallet. It should help to set OS collection properly and check if everything is running smooth. */
    function Devmint() public onlyOwner {
        uint256 tokenId = _tokenIdCounter.current();
        require (devmintlimit < 1, "Already minted 1.");
        _safeMint(msg.sender, tokenId);
        _tokenIdCounter.increment();
        devmintlimit++;
    }
    /* Set freezeURI flag to true. Only works once. */
        function freezeURIForever() public onlyOwner {
        require (freezeURI != 1,"URI already freezed.");
        freezeURI = 1;
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Devmint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Freemint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"PublicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Thiswalletminted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devmintlimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freelimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeURI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeURIForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pausef","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266470de4df820000600b55611e78600c556103e8600d556001600e556004600f5560006010556001601155600060125560006013556040518060600160405280603681526020016200516660369139601490805190602001906200006a9291906200020d565b503480156200007857600080fd5b506040518060400160405280600481526020017f506f7469000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f506f7469000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fd9291906200020d565b508060019080519060200190620001169291906200020d565b505050620001396200012d6200013f60201b60201c565b6200014760201b60201c565b62000322565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021b90620002bd565b90600052602060002090601f0160209004810192826200023f57600085556200028b565b82601f106200025a57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028a5782518255916020019190600101906200026d565b5b5090506200029a91906200029e565b5090565b5b80821115620002b95760008160009055506001016200029f565b5090565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec620002f3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614e3480620003326000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063a591252d116100ab578063cabadaa01161006f578063cabadaa0146107b2578063d161528e146107dd578063d5abeb01146107f4578063e985e9c51461081f578063f2fde38b1461085c57610225565b8063a591252d146106cb578063b0917a9e146106f6578063b88d4fde14610721578063c793803c1461074a578063c87b56dd1461077557610225565b80638da5cb5b116100f25780638da5cb5b1461060557806395d89b41146106305780639fb17e341461065b578063a035b1fe14610677578063a22cb465146106a257610225565b806370a082311461056f578063715018a6146105ac578063834cc084146105c35780638456cb59146105ee57610225565b80632f745c59116101b15780634f6ccce7116101755780634f6ccce71461047657806355f804b3146104b35780636352211e146104dc5780636c0360eb146105195780636f7a50851461054457610225565b80632f745c59146103b75780633ccfd60b146103f45780633f4ba83a1461040b57806342842e0e14610422578063485a68a31461044b57610225565b8063095ea7b3116101f8578063095ea7b31461030c57806318160ddd146103355780631b4105471461036057806323b872dd14610377578063264517ec146103a057610225565b806301ffc9a71461022a578063054c3ade1461026757806306fdde03146102a4578063081812fc146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613582565b610885565b60405161025e9190613c84565b60405180910390f35b34801561027357600080fd5b5061028e600480360381019061028991906133db565b610897565b60405161029b9190614101565b60405180910390f35b3480156102b057600080fd5b506102b96108af565b6040516102c69190613c9f565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613615565b610941565b6040516103039190613c1d565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613546565b6109c6565b005b34801561034157600080fd5b5061034a610ade565b6040516103579190614101565b60405180910390f35b34801561036c57600080fd5b50610375610aeb565b005b34801561038357600080fd5b5061039e60048036038101906103999190613440565b610be9565b005b3480156103ac57600080fd5b506103b5610c49565b005b3480156103c357600080fd5b506103de60048036038101906103d99190613546565b610f01565b6040516103eb9190614101565b60405180910390f35b34801561040057600080fd5b50610409610fa6565b005b34801561041757600080fd5b506104206110b5565b005b34801561042e57600080fd5b5061044960048036038101906104449190613440565b611181565b005b34801561045757600080fd5b506104606111a1565b60405161046d9190614101565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613615565b6111a7565b6040516104aa9190614101565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d591906135d4565b61123e565b005b3480156104e857600080fd5b5061050360048036038101906104fe9190613615565b61131a565b6040516105109190613c1d565b60405180910390f35b34801561052557600080fd5b5061052e6113cc565b60405161053b9190613c9f565b60405180910390f35b34801561055057600080fd5b5061055961145a565b6040516105669190614101565b60405180910390f35b34801561057b57600080fd5b50610596600480360381019061059191906133db565b611460565b6040516105a39190614101565b60405180910390f35b3480156105b857600080fd5b506105c1611518565b005b3480156105cf57600080fd5b506105d86115a0565b6040516105e59190614101565b60405180910390f35b3480156105fa57600080fd5b506106036115a6565b005b34801561061157600080fd5b5061061a611672565b6040516106279190613c1d565b60405180910390f35b34801561063c57600080fd5b5061064561169c565b6040516106529190613c9f565b60405180910390f35b61067560048036038101906106709190613615565b61172e565b005b34801561068357600080fd5b5061068c611a2a565b6040516106999190614101565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c4919061350a565b611a30565b005b3480156106d757600080fd5b506106e0611a46565b6040516106ed9190614101565b60405180910390f35b34801561070257600080fd5b5061070b611a4c565b6040516107189190614101565b60405180910390f35b34801561072d57600080fd5b506107486004803603810190610743919061348f565b611a52565b005b34801561075657600080fd5b5061075f611ab4565b60405161076c9190614101565b60405180910390f35b34801561078157600080fd5b5061079c60048036038101906107979190613615565b611aba565b6040516107a99190613c9f565b60405180910390f35b3480156107be57600080fd5b506107c7611af1565b6040516107d49190614101565b60405180910390f35b3480156107e957600080fd5b506107f2611af7565b005b34801561080057600080fd5b50610809611bc3565b6040516108169190614101565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190613404565b611bc9565b6040516108539190613c84565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e91906133db565b611c5d565b005b600061089082611d55565b9050919050565b60156020528060005260406000206000915090505481565b6060600080546108be906143b1565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea906143b1565b80156109375780601f1061090c57610100808354040283529160200191610937565b820191906000526020600020905b81548152906001019060200180831161091a57829003601f168201915b5050505050905090565b600061094c82611dcf565b61098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290613fa1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d18261131a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990614001565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a61611e3b565b73ffffffffffffffffffffffffffffffffffffffff161480610a905750610a8f81610a8a611e3b565b611bc9565b5b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac690613f01565b60405180910390fd5b610ad98383611e43565b505050565b6000600880549050905090565b610af3611e3b565b73ffffffffffffffffffffffffffffffffffffffff16610b11611672565b73ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613fc1565b60405180910390fd5b6000610b736016611efc565b9050600160135410610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190613cc1565b60405180910390fd5b610bc43382611f0a565b610bce6016611f28565b60136000815480929190610be190614414565b919050555050565b610bfa610bf4611e3b565b82611f3e565b610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090614021565b60405180910390fd5b610c4483838361201c565b505050565b6000610c53610ade565b90506000610c616016611efc565b90506000600190506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060016011541415610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea90614041565b60405180910390fd5b600c548410610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90614061565b60405180910390fd5b600e548282610d4691906141e6565b1115610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613d21565b60405180910390fd5b600d548285610d9691906141e6565b1115610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613ea1565b60405180910390fd5b600d5460105410610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906140a1565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e6d90614414565b9190505550610e7c3384611f0a565b610e866016611f28565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ed690614414565b919050555060106000815480929190610eee90614414565b9190505550600093506000905050505050565b6000610f0c83611460565b8210610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490613d41565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610fae611e3b565b73ffffffffffffffffffffffffffffffffffffffff16610fcc611672565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613fc1565b60405180910390fd5b60004711611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90613e81565b60405180910390fd5b61106d611672565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110b2573d6000803e3d6000fd5b50565b6110bd611e3b565b73ffffffffffffffffffffffffffffffffffffffff166110db611672565b73ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613fc1565b60405180910390fd5b60006011541415611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90613e01565b60405180910390fd5b6000601181905550565b61119c83838360405180602001604052806000815250611a52565b505050565b600d5481565b60006111b1610ade565b82106111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990614081565b60405180910390fd5b6008828154811061122c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611246611e3b565b73ffffffffffffffffffffffffffffffffffffffff16611264611672565b73ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190613fc1565b60405180910390fd5b60016012541415611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f790613ce1565b60405180910390fd5b80601490805190602001906113169291906131ff565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613f41565b60405180910390fd5b80915050919050565b601480546113d9906143b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611405906143b1565b80156114525780601f1061142757610100808354040283529160200191611452565b820191906000526020600020905b81548152906001019060200180831161143557829003601f168201915b505050505081565b60135481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c890613f21565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611520611e3b565b73ffffffffffffffffffffffffffffffffffffffff1661153e611672565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613fc1565b60405180910390fd5b61159e6000612283565b565b60115481565b6115ae611e3b565b73ffffffffffffffffffffffffffffffffffffffff166115cc611672565b73ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613fc1565b60405180910390fd5b60016011541415611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90613d81565b60405180910390fd5b6001601181905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116ab906143b1565b80601f01602080910402602001604051908101604052809291908181526020018280546116d7906143b1565b80156117245780601f106116f957610100808354040283529160200191611724565b820191906000526020600020905b81548152906001019060200180831161170757829003601f168201915b5050505050905090565b6000611738610ade565b905060006117466016611efc565b90506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600160115414156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990614041565b60405180910390fd5b600c548310611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614061565b60405180910390fd5b83600b54611824919061426d565b341015611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613e61565b60405180910390fd5b600084116118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090613d01565b60405180910390fd5b600f548411156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906140e1565b60405180910390fd5b600f5484826118fd91906141e6565b111561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590613f81565b60405180910390fd5b600c54848461194d91906141e6565b111561198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906140c1565b60405180910390fd5b60005b84811015611a1f576119a36016611efc565b92506119af3384611f0a565b6119b96016611f28565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a0990614414565b919050555080611a1890614414565b9050611991565b506000925050505050565b600b5481565b611a42611a3b611e3b565b8383612349565b5050565b600e5481565b60105481565b611a63611a5d611e3b565b83611f3e565b611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614021565b60405180910390fd5b611aae848484846124b6565b50505050565b60125481565b60606000611ac783612512565b905080604051602001611ada9190613bfb565b604051602081830303815290604052915050919050565b600f5481565b611aff611e3b565b73ffffffffffffffffffffffffffffffffffffffff16611b1d611672565b73ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613fc1565b60405180910390fd5b60016012541415611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613ee1565b60405180910390fd5b6001601281905550565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c65611e3b565b73ffffffffffffffffffffffffffffffffffffffff16611c83611672565b73ffffffffffffffffffffffffffffffffffffffff1614611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613fc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090613da1565b60405180910390fd5b611d5281612283565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611dc85750611dc7826125df565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611eb68361131a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b611f248282604051806020016040528060008152506126c1565b5050565b6001816000016000828254019250508190555050565b6000611f4982611dcf565b611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90613ec1565b60405180910390fd5b6000611f938361131a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fd55750611fd48185611bc9565b5b8061201357508373ffffffffffffffffffffffffffffffffffffffff16611ffb84610941565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661203c8261131a565b73ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990613dc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990613e21565b60405180910390fd5b61210d83838361271c565b612118600082611e43565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216891906142c7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bf91906141e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461227e83838361272c565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af90613e41565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124a99190613c84565b60405180910390a3505050565b6124c184848461201c565b6124cd84848484612731565b61250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250390613d61565b60405180910390fd5b50505050565b606061251d82611dcf565b61255c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255390613fe1565b60405180910390fd5b60006125666128c8565b905060008151116125ac576040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506125d7565b806125b68461295a565b6040516020016125c7929190613bd7565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126ba57506126b982612b07565b5b9050919050565b6126cb8383612b71565b6126d86000848484612731565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90613d61565b60405180910390fd5b505050565b612727838383612d4b565b505050565b505050565b60006127528473ffffffffffffffffffffffffffffffffffffffff16612e5f565b156128bb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261277b611e3b565b8786866040518563ffffffff1660e01b815260040161279d9493929190613c38565b602060405180830381600087803b1580156127b757600080fd5b505af19250505080156127e857506040513d601f19601f820116820180604052508101906127e591906135ab565b60015b61286b573d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b50600081511415612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a90613d61565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128c0565b600190505b949350505050565b6060601480546128d7906143b1565b80601f0160208091040260200160405190810160405280929190818152602001828054612903906143b1565b80156129505780601f1061292557610100808354040283529160200191612950565b820191906000526020600020905b81548152906001019060200180831161293357829003601f168201915b5050505050905090565b606060008214156129a2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b02565b600082905060005b600082146129d45780806129bd90614414565b915050600a826129cd919061423c565b91506129aa565b60008167ffffffffffffffff811115612a16577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a485781602001600182028036833780820191505090505b5090505b60008514612afb57600182612a6191906142c7565b9150600a85612a70919061445d565b6030612a7c91906141e6565b60f81b818381518110612ab8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612af4919061423c565b9450612a4c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890613f61565b60405180910390fd5b612bea81611dcf565b15612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190613de1565b60405180910390fd5b612c366000838361271c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c8691906141e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d476000838361272c565b5050565b612d56838383612e82565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d9957612d9481612e87565b612dd8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dd757612dd68382612ed0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e1b57612e168161303d565b612e5a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e5957612e588282613180565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612edd84611460565b612ee791906142c7565b9050600060076000848152602001908152602001600020549050818114612fcc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305191906142c7565b90506000600960008481526020019081526020016000205490506000600883815481106130a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106130ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613164577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061318b83611460565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461320b906143b1565b90600052602060002090601f01602090048101928261322d5760008555613274565b82601f1061324657805160ff1916838001178555613274565b82800160010185558215613274579182015b82811115613273578251825591602001919060010190613258565b5b5090506132819190613285565b5090565b5b8082111561329e576000816000905550600101613286565b5090565b60006132b56132b084614141565b61411c565b9050828152602081018484840111156132cd57600080fd5b6132d884828561436f565b509392505050565b60006132f36132ee84614172565b61411c565b90508281526020810184848401111561330b57600080fd5b61331684828561436f565b509392505050565b60008135905061332d81614da2565b92915050565b60008135905061334281614db9565b92915050565b60008135905061335781614dd0565b92915050565b60008151905061336c81614dd0565b92915050565b600082601f83011261338357600080fd5b81356133938482602086016132a2565b91505092915050565b600082601f8301126133ad57600080fd5b81356133bd8482602086016132e0565b91505092915050565b6000813590506133d581614de7565b92915050565b6000602082840312156133ed57600080fd5b60006133fb8482850161331e565b91505092915050565b6000806040838503121561341757600080fd5b60006134258582860161331e565b92505060206134368582860161331e565b9150509250929050565b60008060006060848603121561345557600080fd5b60006134638682870161331e565b93505060206134748682870161331e565b9250506040613485868287016133c6565b9150509250925092565b600080600080608085870312156134a557600080fd5b60006134b38782880161331e565b94505060206134c48782880161331e565b93505060406134d5878288016133c6565b925050606085013567ffffffffffffffff8111156134f257600080fd5b6134fe87828801613372565b91505092959194509250565b6000806040838503121561351d57600080fd5b600061352b8582860161331e565b925050602061353c85828601613333565b9150509250929050565b6000806040838503121561355957600080fd5b60006135678582860161331e565b9250506020613578858286016133c6565b9150509250929050565b60006020828403121561359457600080fd5b60006135a284828501613348565b91505092915050565b6000602082840312156135bd57600080fd5b60006135cb8482850161335d565b91505092915050565b6000602082840312156135e657600080fd5b600082013567ffffffffffffffff81111561360057600080fd5b61360c8482850161339c565b91505092915050565b60006020828403121561362757600080fd5b6000613635848285016133c6565b91505092915050565b613647816142fb565b82525050565b6136568161430d565b82525050565b6000613667826141a3565b61367181856141b9565b935061368181856020860161437e565b61368a8161454a565b840191505092915050565b60006136a0826141ae565b6136aa81856141ca565b93506136ba81856020860161437e565b6136c38161454a565b840191505092915050565b60006136d9826141ae565b6136e381856141db565b93506136f381856020860161437e565b80840191505092915050565b600061370c6011836141ca565b91506137178261455b565b602082019050919050565b600061372f6015836141ca565b915061373a82614584565b602082019050919050565b6000613752600e836141ca565b915061375d826145ad565b602082019050919050565b60006137756020836141ca565b9150613780826145d6565b602082019050919050565b6000613798602b836141ca565b91506137a3826145ff565b604082019050919050565b60006137bb6032836141ca565b91506137c68261464e565b604082019050919050565b60006137de600f836141ca565b91506137e98261469d565b602082019050919050565b60006138016026836141ca565b915061380c826146c6565b604082019050919050565b60006138246025836141ca565b915061382f82614715565b604082019050919050565b6000613847601c836141ca565b915061385282614764565b602082019050919050565b600061386a6011836141ca565b91506138758261478d565b602082019050919050565b600061388d6024836141ca565b9150613898826147b6565b604082019050919050565b60006138b06019836141ca565b91506138bb82614805565b602082019050919050565b60006138d36026836141ca565b91506138de8261482e565b604082019050919050565b60006138f66014836141ca565b91506139018261487d565b602082019050919050565b60006139196024836141ca565b9150613924826148a6565b604082019050919050565b600061393c602c836141ca565b9150613947826148f5565b604082019050919050565b600061395f6014836141ca565b915061396a82614944565b602082019050919050565b60006139826038836141ca565b915061398d8261496d565b604082019050919050565b60006139a5602a836141ca565b91506139b0826149bc565b604082019050919050565b60006139c86029836141ca565b91506139d382614a0b565b604082019050919050565b60006139eb6020836141ca565b91506139f682614a5a565b602082019050919050565b6000613a0e6023836141ca565b9150613a1982614a83565b604082019050919050565b6000613a31602c836141ca565b9150613a3c82614ad2565b604082019050919050565b6000613a546005836141db565b9150613a5f82614b21565b600582019050919050565b6000613a776020836141ca565b9150613a8282614b4a565b602082019050919050565b6000613a9a602f836141ca565b9150613aa582614b73565b604082019050919050565b6000613abd6021836141ca565b9150613ac882614bc2565b604082019050919050565b6000613ae06031836141ca565b9150613aeb82614c11565b604082019050919050565b6000613b036015836141ca565b9150613b0e82614c60565b602082019050919050565b6000613b266009836141ca565b9150613b3182614c89565b602082019050919050565b6000613b49602c836141ca565b9150613b5482614cb2565b604082019050919050565b6000613b6c601f836141ca565b9150613b7782614d01565b602082019050919050565b6000613b8f601d836141ca565b9150613b9a82614d2a565b602082019050919050565b6000613bb26028836141ca565b9150613bbd82614d53565b604082019050919050565b613bd181614365565b82525050565b6000613be382856136ce565b9150613bef82846136ce565b91508190509392505050565b6000613c0782846136ce565b9150613c1282613a47565b915081905092915050565b6000602082019050613c32600083018461363e565b92915050565b6000608082019050613c4d600083018761363e565b613c5a602083018661363e565b613c676040830185613bc8565b8181036060830152613c79818461365c565b905095945050505050565b6000602082019050613c99600083018461364d565b92915050565b60006020820190508181036000830152613cb98184613695565b905092915050565b60006020820190508181036000830152613cda816136ff565b9050919050565b60006020820190508181036000830152613cfa81613722565b9050919050565b60006020820190508181036000830152613d1a81613745565b9050919050565b60006020820190508181036000830152613d3a81613768565b9050919050565b60006020820190508181036000830152613d5a8161378b565b9050919050565b60006020820190508181036000830152613d7a816137ae565b9050919050565b60006020820190508181036000830152613d9a816137d1565b9050919050565b60006020820190508181036000830152613dba816137f4565b9050919050565b60006020820190508181036000830152613dda81613817565b9050919050565b60006020820190508181036000830152613dfa8161383a565b9050919050565b60006020820190508181036000830152613e1a8161385d565b9050919050565b60006020820190508181036000830152613e3a81613880565b9050919050565b60006020820190508181036000830152613e5a816138a3565b9050919050565b60006020820190508181036000830152613e7a816138c6565b9050919050565b60006020820190508181036000830152613e9a816138e9565b9050919050565b60006020820190508181036000830152613eba8161390c565b9050919050565b60006020820190508181036000830152613eda8161392f565b9050919050565b60006020820190508181036000830152613efa81613952565b9050919050565b60006020820190508181036000830152613f1a81613975565b9050919050565b60006020820190508181036000830152613f3a81613998565b9050919050565b60006020820190508181036000830152613f5a816139bb565b9050919050565b60006020820190508181036000830152613f7a816139de565b9050919050565b60006020820190508181036000830152613f9a81613a01565b9050919050565b60006020820190508181036000830152613fba81613a24565b9050919050565b60006020820190508181036000830152613fda81613a6a565b9050919050565b60006020820190508181036000830152613ffa81613a8d565b9050919050565b6000602082019050818103600083015261401a81613ab0565b9050919050565b6000602082019050818103600083015261403a81613ad3565b9050919050565b6000602082019050818103600083015261405a81613af6565b9050919050565b6000602082019050818103600083015261407a81613b19565b9050919050565b6000602082019050818103600083015261409a81613b3c565b9050919050565b600060208201905081810360008301526140ba81613b5f565b9050919050565b600060208201905081810360008301526140da81613b82565b9050919050565b600060208201905081810360008301526140fa81613ba5565b9050919050565b60006020820190506141166000830184613bc8565b92915050565b6000614126614137565b905061413282826143e3565b919050565b6000604051905090565b600067ffffffffffffffff82111561415c5761415b61451b565b5b6141658261454a565b9050602081019050919050565b600067ffffffffffffffff82111561418d5761418c61451b565b5b6141968261454a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f182614365565b91506141fc83614365565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142315761423061448e565b5b828201905092915050565b600061424782614365565b915061425283614365565b925082614262576142616144bd565b5b828204905092915050565b600061427882614365565b915061428383614365565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142bc576142bb61448e565b5b828202905092915050565b60006142d282614365565b91506142dd83614365565b9250828210156142f0576142ef61448e565b5b828203905092915050565b600061430682614345565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561439c578082015181840152602081019050614381565b838111156143ab576000848401525b50505050565b600060028204905060018216806143c957607f821691505b602082108114156143dd576143dc6144ec565b5b50919050565b6143ec8261454a565b810181811067ffffffffffffffff8211171561440b5761440a61451b565b5b80604052505050565b600061441f82614365565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144525761445161448e565b5b600182019050919050565b600061446882614365565b915061447383614365565b925082614483576144826144bd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f416c7265616479206d696e74656420312e000000000000000000000000000000600082015250565b7f5552492063616e2774206265206368616e6765642e0000000000000000000000600082015250565b7f43616e6e6f74206d696e7420302e000000000000000000000000000000000000600082015250565b7f4d617820667265656d696e74207065722077616c6c657420726561636865642e600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f416c7265616479207061757365642e0000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c726561647920756e7061757365642e000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5072696365206e6f74206d61746368696e672e20302e3032204554482070657260008201527f206d696e742e0000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7468696e6720746f2077697468647261772e000000000000000000000000600082015250565b7f43616e6e6f7420657863656564206d617820636f6c6c656374696f6e2073757060008201527f706c792e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55524920616c726561647920667265657a65642e000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e2034207065722077616c6c60008201527f65742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74206e6f742073746172746564207965742e0000000000000000000000600082015250565b7f536f6c64206f75742e0000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d61782066726565206d696e7465642072656163686564202831303030292e00600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e20737570706c792e000000600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203420706572207472616e60008201527f73616374696f6e2e000000000000000000000000000000000000000000000000602082015250565b614dab816142fb565b8114614db657600080fd5b50565b614dc28161430d565b8114614dcd57600080fd5b50565b614dd981614319565b8114614de457600080fd5b50565b614df081614365565b8114614dfb57600080fd5b5056fea2646970667358221220a790f8d319932332eefd4f1ae78f1cb7389437996b3a1e8b0dfa8967d48e9dcc64736f6c63430008040033697066733a2f2f516d6254524c7864316d47727a50347273377a7a78387636747a685657623776654d794d367336796b37753156482f

Deployed Bytecode

0x6080604052600436106102255760003560e01c806370a0823111610123578063a591252d116100ab578063cabadaa01161006f578063cabadaa0146107b2578063d161528e146107dd578063d5abeb01146107f4578063e985e9c51461081f578063f2fde38b1461085c57610225565b8063a591252d146106cb578063b0917a9e146106f6578063b88d4fde14610721578063c793803c1461074a578063c87b56dd1461077557610225565b80638da5cb5b116100f25780638da5cb5b1461060557806395d89b41146106305780639fb17e341461065b578063a035b1fe14610677578063a22cb465146106a257610225565b806370a082311461056f578063715018a6146105ac578063834cc084146105c35780638456cb59146105ee57610225565b80632f745c59116101b15780634f6ccce7116101755780634f6ccce71461047657806355f804b3146104b35780636352211e146104dc5780636c0360eb146105195780636f7a50851461054457610225565b80632f745c59146103b75780633ccfd60b146103f45780633f4ba83a1461040b57806342842e0e14610422578063485a68a31461044b57610225565b8063095ea7b3116101f8578063095ea7b31461030c57806318160ddd146103355780631b4105471461036057806323b872dd14610377578063264517ec146103a057610225565b806301ffc9a71461022a578063054c3ade1461026757806306fdde03146102a4578063081812fc146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613582565b610885565b60405161025e9190613c84565b60405180910390f35b34801561027357600080fd5b5061028e600480360381019061028991906133db565b610897565b60405161029b9190614101565b60405180910390f35b3480156102b057600080fd5b506102b96108af565b6040516102c69190613c9f565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613615565b610941565b6040516103039190613c1d565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613546565b6109c6565b005b34801561034157600080fd5b5061034a610ade565b6040516103579190614101565b60405180910390f35b34801561036c57600080fd5b50610375610aeb565b005b34801561038357600080fd5b5061039e60048036038101906103999190613440565b610be9565b005b3480156103ac57600080fd5b506103b5610c49565b005b3480156103c357600080fd5b506103de60048036038101906103d99190613546565b610f01565b6040516103eb9190614101565b60405180910390f35b34801561040057600080fd5b50610409610fa6565b005b34801561041757600080fd5b506104206110b5565b005b34801561042e57600080fd5b5061044960048036038101906104449190613440565b611181565b005b34801561045757600080fd5b506104606111a1565b60405161046d9190614101565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613615565b6111a7565b6040516104aa9190614101565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d591906135d4565b61123e565b005b3480156104e857600080fd5b5061050360048036038101906104fe9190613615565b61131a565b6040516105109190613c1d565b60405180910390f35b34801561052557600080fd5b5061052e6113cc565b60405161053b9190613c9f565b60405180910390f35b34801561055057600080fd5b5061055961145a565b6040516105669190614101565b60405180910390f35b34801561057b57600080fd5b50610596600480360381019061059191906133db565b611460565b6040516105a39190614101565b60405180910390f35b3480156105b857600080fd5b506105c1611518565b005b3480156105cf57600080fd5b506105d86115a0565b6040516105e59190614101565b60405180910390f35b3480156105fa57600080fd5b506106036115a6565b005b34801561061157600080fd5b5061061a611672565b6040516106279190613c1d565b60405180910390f35b34801561063c57600080fd5b5061064561169c565b6040516106529190613c9f565b60405180910390f35b61067560048036038101906106709190613615565b61172e565b005b34801561068357600080fd5b5061068c611a2a565b6040516106999190614101565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c4919061350a565b611a30565b005b3480156106d757600080fd5b506106e0611a46565b6040516106ed9190614101565b60405180910390f35b34801561070257600080fd5b5061070b611a4c565b6040516107189190614101565b60405180910390f35b34801561072d57600080fd5b506107486004803603810190610743919061348f565b611a52565b005b34801561075657600080fd5b5061075f611ab4565b60405161076c9190614101565b60405180910390f35b34801561078157600080fd5b5061079c60048036038101906107979190613615565b611aba565b6040516107a99190613c9f565b60405180910390f35b3480156107be57600080fd5b506107c7611af1565b6040516107d49190614101565b60405180910390f35b3480156107e957600080fd5b506107f2611af7565b005b34801561080057600080fd5b50610809611bc3565b6040516108169190614101565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190613404565b611bc9565b6040516108539190613c84565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e91906133db565b611c5d565b005b600061089082611d55565b9050919050565b60156020528060005260406000206000915090505481565b6060600080546108be906143b1565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea906143b1565b80156109375780601f1061090c57610100808354040283529160200191610937565b820191906000526020600020905b81548152906001019060200180831161091a57829003601f168201915b5050505050905090565b600061094c82611dcf565b61098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290613fa1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d18261131a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990614001565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a61611e3b565b73ffffffffffffffffffffffffffffffffffffffff161480610a905750610a8f81610a8a611e3b565b611bc9565b5b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac690613f01565b60405180910390fd5b610ad98383611e43565b505050565b6000600880549050905090565b610af3611e3b565b73ffffffffffffffffffffffffffffffffffffffff16610b11611672565b73ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613fc1565b60405180910390fd5b6000610b736016611efc565b9050600160135410610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190613cc1565b60405180910390fd5b610bc43382611f0a565b610bce6016611f28565b60136000815480929190610be190614414565b919050555050565b610bfa610bf4611e3b565b82611f3e565b610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090614021565b60405180910390fd5b610c4483838361201c565b505050565b6000610c53610ade565b90506000610c616016611efc565b90506000600190506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060016011541415610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea90614041565b60405180910390fd5b600c548410610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90614061565b60405180910390fd5b600e548282610d4691906141e6565b1115610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613d21565b60405180910390fd5b600d548285610d9691906141e6565b1115610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613ea1565b60405180910390fd5b600d5460105410610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906140a1565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e6d90614414565b9190505550610e7c3384611f0a565b610e866016611f28565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ed690614414565b919050555060106000815480929190610eee90614414565b9190505550600093506000905050505050565b6000610f0c83611460565b8210610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490613d41565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610fae611e3b565b73ffffffffffffffffffffffffffffffffffffffff16610fcc611672565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613fc1565b60405180910390fd5b60004711611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90613e81565b60405180910390fd5b61106d611672565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110b2573d6000803e3d6000fd5b50565b6110bd611e3b565b73ffffffffffffffffffffffffffffffffffffffff166110db611672565b73ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613fc1565b60405180910390fd5b60006011541415611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90613e01565b60405180910390fd5b6000601181905550565b61119c83838360405180602001604052806000815250611a52565b505050565b600d5481565b60006111b1610ade565b82106111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990614081565b60405180910390fd5b6008828154811061122c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611246611e3b565b73ffffffffffffffffffffffffffffffffffffffff16611264611672565b73ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190613fc1565b60405180910390fd5b60016012541415611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f790613ce1565b60405180910390fd5b80601490805190602001906113169291906131ff565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613f41565b60405180910390fd5b80915050919050565b601480546113d9906143b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611405906143b1565b80156114525780601f1061142757610100808354040283529160200191611452565b820191906000526020600020905b81548152906001019060200180831161143557829003601f168201915b505050505081565b60135481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c890613f21565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611520611e3b565b73ffffffffffffffffffffffffffffffffffffffff1661153e611672565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613fc1565b60405180910390fd5b61159e6000612283565b565b60115481565b6115ae611e3b565b73ffffffffffffffffffffffffffffffffffffffff166115cc611672565b73ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613fc1565b60405180910390fd5b60016011541415611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90613d81565b60405180910390fd5b6001601181905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116ab906143b1565b80601f01602080910402602001604051908101604052809291908181526020018280546116d7906143b1565b80156117245780601f106116f957610100808354040283529160200191611724565b820191906000526020600020905b81548152906001019060200180831161170757829003601f168201915b5050505050905090565b6000611738610ade565b905060006117466016611efc565b90506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600160115414156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990614041565b60405180910390fd5b600c548310611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614061565b60405180910390fd5b83600b54611824919061426d565b341015611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613e61565b60405180910390fd5b600084116118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090613d01565b60405180910390fd5b600f548411156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906140e1565b60405180910390fd5b600f5484826118fd91906141e6565b111561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590613f81565b60405180910390fd5b600c54848461194d91906141e6565b111561198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906140c1565b60405180910390fd5b60005b84811015611a1f576119a36016611efc565b92506119af3384611f0a565b6119b96016611f28565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a0990614414565b919050555080611a1890614414565b9050611991565b506000925050505050565b600b5481565b611a42611a3b611e3b565b8383612349565b5050565b600e5481565b60105481565b611a63611a5d611e3b565b83611f3e565b611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614021565b60405180910390fd5b611aae848484846124b6565b50505050565b60125481565b60606000611ac783612512565b905080604051602001611ada9190613bfb565b604051602081830303815290604052915050919050565b600f5481565b611aff611e3b565b73ffffffffffffffffffffffffffffffffffffffff16611b1d611672565b73ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613fc1565b60405180910390fd5b60016012541415611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613ee1565b60405180910390fd5b6001601281905550565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c65611e3b565b73ffffffffffffffffffffffffffffffffffffffff16611c83611672565b73ffffffffffffffffffffffffffffffffffffffff1614611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613fc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090613da1565b60405180910390fd5b611d5281612283565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611dc85750611dc7826125df565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611eb68361131a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b611f248282604051806020016040528060008152506126c1565b5050565b6001816000016000828254019250508190555050565b6000611f4982611dcf565b611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90613ec1565b60405180910390fd5b6000611f938361131a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fd55750611fd48185611bc9565b5b8061201357508373ffffffffffffffffffffffffffffffffffffffff16611ffb84610941565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661203c8261131a565b73ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990613dc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990613e21565b60405180910390fd5b61210d83838361271c565b612118600082611e43565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216891906142c7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bf91906141e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461227e83838361272c565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af90613e41565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124a99190613c84565b60405180910390a3505050565b6124c184848461201c565b6124cd84848484612731565b61250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250390613d61565b60405180910390fd5b50505050565b606061251d82611dcf565b61255c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255390613fe1565b60405180910390fd5b60006125666128c8565b905060008151116125ac576040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506125d7565b806125b68461295a565b6040516020016125c7929190613bd7565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126ba57506126b982612b07565b5b9050919050565b6126cb8383612b71565b6126d86000848484612731565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90613d61565b60405180910390fd5b505050565b612727838383612d4b565b505050565b505050565b60006127528473ffffffffffffffffffffffffffffffffffffffff16612e5f565b156128bb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261277b611e3b565b8786866040518563ffffffff1660e01b815260040161279d9493929190613c38565b602060405180830381600087803b1580156127b757600080fd5b505af19250505080156127e857506040513d601f19601f820116820180604052508101906127e591906135ab565b60015b61286b573d8060008114612818576040519150601f19603f3d011682016040523d82523d6000602084013e61281d565b606091505b50600081511415612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a90613d61565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128c0565b600190505b949350505050565b6060601480546128d7906143b1565b80601f0160208091040260200160405190810160405280929190818152602001828054612903906143b1565b80156129505780601f1061292557610100808354040283529160200191612950565b820191906000526020600020905b81548152906001019060200180831161293357829003601f168201915b5050505050905090565b606060008214156129a2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b02565b600082905060005b600082146129d45780806129bd90614414565b915050600a826129cd919061423c565b91506129aa565b60008167ffffffffffffffff811115612a16577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a485781602001600182028036833780820191505090505b5090505b60008514612afb57600182612a6191906142c7565b9150600a85612a70919061445d565b6030612a7c91906141e6565b60f81b818381518110612ab8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612af4919061423c565b9450612a4c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890613f61565b60405180910390fd5b612bea81611dcf565b15612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190613de1565b60405180910390fd5b612c366000838361271c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c8691906141e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d476000838361272c565b5050565b612d56838383612e82565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d9957612d9481612e87565b612dd8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dd757612dd68382612ed0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e1b57612e168161303d565b612e5a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e5957612e588282613180565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612edd84611460565b612ee791906142c7565b9050600060076000848152602001908152602001600020549050818114612fcc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305191906142c7565b90506000600960008481526020019081526020016000205490506000600883815481106130a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106130ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613164577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061318b83611460565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461320b906143b1565b90600052602060002090601f01602090048101928261322d5760008555613274565b82601f1061324657805160ff1916838001178555613274565b82800160010185558215613274579182015b82811115613273578251825591602001919060010190613258565b5b5090506132819190613285565b5090565b5b8082111561329e576000816000905550600101613286565b5090565b60006132b56132b084614141565b61411c565b9050828152602081018484840111156132cd57600080fd5b6132d884828561436f565b509392505050565b60006132f36132ee84614172565b61411c565b90508281526020810184848401111561330b57600080fd5b61331684828561436f565b509392505050565b60008135905061332d81614da2565b92915050565b60008135905061334281614db9565b92915050565b60008135905061335781614dd0565b92915050565b60008151905061336c81614dd0565b92915050565b600082601f83011261338357600080fd5b81356133938482602086016132a2565b91505092915050565b600082601f8301126133ad57600080fd5b81356133bd8482602086016132e0565b91505092915050565b6000813590506133d581614de7565b92915050565b6000602082840312156133ed57600080fd5b60006133fb8482850161331e565b91505092915050565b6000806040838503121561341757600080fd5b60006134258582860161331e565b92505060206134368582860161331e565b9150509250929050565b60008060006060848603121561345557600080fd5b60006134638682870161331e565b93505060206134748682870161331e565b9250506040613485868287016133c6565b9150509250925092565b600080600080608085870312156134a557600080fd5b60006134b38782880161331e565b94505060206134c48782880161331e565b93505060406134d5878288016133c6565b925050606085013567ffffffffffffffff8111156134f257600080fd5b6134fe87828801613372565b91505092959194509250565b6000806040838503121561351d57600080fd5b600061352b8582860161331e565b925050602061353c85828601613333565b9150509250929050565b6000806040838503121561355957600080fd5b60006135678582860161331e565b9250506020613578858286016133c6565b9150509250929050565b60006020828403121561359457600080fd5b60006135a284828501613348565b91505092915050565b6000602082840312156135bd57600080fd5b60006135cb8482850161335d565b91505092915050565b6000602082840312156135e657600080fd5b600082013567ffffffffffffffff81111561360057600080fd5b61360c8482850161339c565b91505092915050565b60006020828403121561362757600080fd5b6000613635848285016133c6565b91505092915050565b613647816142fb565b82525050565b6136568161430d565b82525050565b6000613667826141a3565b61367181856141b9565b935061368181856020860161437e565b61368a8161454a565b840191505092915050565b60006136a0826141ae565b6136aa81856141ca565b93506136ba81856020860161437e565b6136c38161454a565b840191505092915050565b60006136d9826141ae565b6136e381856141db565b93506136f381856020860161437e565b80840191505092915050565b600061370c6011836141ca565b91506137178261455b565b602082019050919050565b600061372f6015836141ca565b915061373a82614584565b602082019050919050565b6000613752600e836141ca565b915061375d826145ad565b602082019050919050565b60006137756020836141ca565b9150613780826145d6565b602082019050919050565b6000613798602b836141ca565b91506137a3826145ff565b604082019050919050565b60006137bb6032836141ca565b91506137c68261464e565b604082019050919050565b60006137de600f836141ca565b91506137e98261469d565b602082019050919050565b60006138016026836141ca565b915061380c826146c6565b604082019050919050565b60006138246025836141ca565b915061382f82614715565b604082019050919050565b6000613847601c836141ca565b915061385282614764565b602082019050919050565b600061386a6011836141ca565b91506138758261478d565b602082019050919050565b600061388d6024836141ca565b9150613898826147b6565b604082019050919050565b60006138b06019836141ca565b91506138bb82614805565b602082019050919050565b60006138d36026836141ca565b91506138de8261482e565b604082019050919050565b60006138f66014836141ca565b91506139018261487d565b602082019050919050565b60006139196024836141ca565b9150613924826148a6565b604082019050919050565b600061393c602c836141ca565b9150613947826148f5565b604082019050919050565b600061395f6014836141ca565b915061396a82614944565b602082019050919050565b60006139826038836141ca565b915061398d8261496d565b604082019050919050565b60006139a5602a836141ca565b91506139b0826149bc565b604082019050919050565b60006139c86029836141ca565b91506139d382614a0b565b604082019050919050565b60006139eb6020836141ca565b91506139f682614a5a565b602082019050919050565b6000613a0e6023836141ca565b9150613a1982614a83565b604082019050919050565b6000613a31602c836141ca565b9150613a3c82614ad2565b604082019050919050565b6000613a546005836141db565b9150613a5f82614b21565b600582019050919050565b6000613a776020836141ca565b9150613a8282614b4a565b602082019050919050565b6000613a9a602f836141ca565b9150613aa582614b73565b604082019050919050565b6000613abd6021836141ca565b9150613ac882614bc2565b604082019050919050565b6000613ae06031836141ca565b9150613aeb82614c11565b604082019050919050565b6000613b036015836141ca565b9150613b0e82614c60565b602082019050919050565b6000613b266009836141ca565b9150613b3182614c89565b602082019050919050565b6000613b49602c836141ca565b9150613b5482614cb2565b604082019050919050565b6000613b6c601f836141ca565b9150613b7782614d01565b602082019050919050565b6000613b8f601d836141ca565b9150613b9a82614d2a565b602082019050919050565b6000613bb26028836141ca565b9150613bbd82614d53565b604082019050919050565b613bd181614365565b82525050565b6000613be382856136ce565b9150613bef82846136ce565b91508190509392505050565b6000613c0782846136ce565b9150613c1282613a47565b915081905092915050565b6000602082019050613c32600083018461363e565b92915050565b6000608082019050613c4d600083018761363e565b613c5a602083018661363e565b613c676040830185613bc8565b8181036060830152613c79818461365c565b905095945050505050565b6000602082019050613c99600083018461364d565b92915050565b60006020820190508181036000830152613cb98184613695565b905092915050565b60006020820190508181036000830152613cda816136ff565b9050919050565b60006020820190508181036000830152613cfa81613722565b9050919050565b60006020820190508181036000830152613d1a81613745565b9050919050565b60006020820190508181036000830152613d3a81613768565b9050919050565b60006020820190508181036000830152613d5a8161378b565b9050919050565b60006020820190508181036000830152613d7a816137ae565b9050919050565b60006020820190508181036000830152613d9a816137d1565b9050919050565b60006020820190508181036000830152613dba816137f4565b9050919050565b60006020820190508181036000830152613dda81613817565b9050919050565b60006020820190508181036000830152613dfa8161383a565b9050919050565b60006020820190508181036000830152613e1a8161385d565b9050919050565b60006020820190508181036000830152613e3a81613880565b9050919050565b60006020820190508181036000830152613e5a816138a3565b9050919050565b60006020820190508181036000830152613e7a816138c6565b9050919050565b60006020820190508181036000830152613e9a816138e9565b9050919050565b60006020820190508181036000830152613eba8161390c565b9050919050565b60006020820190508181036000830152613eda8161392f565b9050919050565b60006020820190508181036000830152613efa81613952565b9050919050565b60006020820190508181036000830152613f1a81613975565b9050919050565b60006020820190508181036000830152613f3a81613998565b9050919050565b60006020820190508181036000830152613f5a816139bb565b9050919050565b60006020820190508181036000830152613f7a816139de565b9050919050565b60006020820190508181036000830152613f9a81613a01565b9050919050565b60006020820190508181036000830152613fba81613a24565b9050919050565b60006020820190508181036000830152613fda81613a6a565b9050919050565b60006020820190508181036000830152613ffa81613a8d565b9050919050565b6000602082019050818103600083015261401a81613ab0565b9050919050565b6000602082019050818103600083015261403a81613ad3565b9050919050565b6000602082019050818103600083015261405a81613af6565b9050919050565b6000602082019050818103600083015261407a81613b19565b9050919050565b6000602082019050818103600083015261409a81613b3c565b9050919050565b600060208201905081810360008301526140ba81613b5f565b9050919050565b600060208201905081810360008301526140da81613b82565b9050919050565b600060208201905081810360008301526140fa81613ba5565b9050919050565b60006020820190506141166000830184613bc8565b92915050565b6000614126614137565b905061413282826143e3565b919050565b6000604051905090565b600067ffffffffffffffff82111561415c5761415b61451b565b5b6141658261454a565b9050602081019050919050565b600067ffffffffffffffff82111561418d5761418c61451b565b5b6141968261454a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f182614365565b91506141fc83614365565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142315761423061448e565b5b828201905092915050565b600061424782614365565b915061425283614365565b925082614262576142616144bd565b5b828204905092915050565b600061427882614365565b915061428383614365565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142bc576142bb61448e565b5b828202905092915050565b60006142d282614365565b91506142dd83614365565b9250828210156142f0576142ef61448e565b5b828203905092915050565b600061430682614345565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561439c578082015181840152602081019050614381565b838111156143ab576000848401525b50505050565b600060028204905060018216806143c957607f821691505b602082108114156143dd576143dc6144ec565b5b50919050565b6143ec8261454a565b810181811067ffffffffffffffff8211171561440b5761440a61451b565b5b80604052505050565b600061441f82614365565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144525761445161448e565b5b600182019050919050565b600061446882614365565b915061447383614365565b925082614483576144826144bd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f416c7265616479206d696e74656420312e000000000000000000000000000000600082015250565b7f5552492063616e2774206265206368616e6765642e0000000000000000000000600082015250565b7f43616e6e6f74206d696e7420302e000000000000000000000000000000000000600082015250565b7f4d617820667265656d696e74207065722077616c6c657420726561636865642e600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f416c7265616479207061757365642e0000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c726561647920756e7061757365642e000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5072696365206e6f74206d61746368696e672e20302e3032204554482070657260008201527f206d696e742e0000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7468696e6720746f2077697468647261772e000000000000000000000000600082015250565b7f43616e6e6f7420657863656564206d617820636f6c6c656374696f6e2073757060008201527f706c792e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55524920616c726561647920667265657a65642e000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e2034207065722077616c6c60008201527f65742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74206e6f742073746172746564207965742e0000000000000000000000600082015250565b7f536f6c64206f75742e0000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d61782066726565206d696e7465642072656163686564202831303030292e00600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e20737570706c792e000000600082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e203420706572207472616e60008201527f73616374696f6e2e000000000000000000000000000000000000000000000000602082015250565b614dab816142fb565b8114614db657600080fd5b50565b614dc28161430d565b8114614dcd57600080fd5b50565b614dd981614319565b8114614de457600080fd5b50565b614df081614365565b8114614dfb57600080fd5b5056fea2646970667358221220a790f8d319932332eefd4f1ae78f1cb7389437996b3a1e8b0dfa8967d48e9dcc64736f6c63430008040033

Deployed Bytecode Sourcemap

52073:5211:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57069:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52961:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27709:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29274:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28797:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41541:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56388:260;;;;;;;;;;;;;:::i;:::-;;30024:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55373:846;;;;;;;;;;;;;:::i;:::-;;41209:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53165:166;;;;;;;;;;;;;:::i;:::-;;54160:118;;;;;;;;;;;;;:::i;:::-;;30434:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52246:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41731:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53833:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27403:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52783:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52716:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27133:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6219:103;;;;;;;;;;;;;:::i;:::-;;52512:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54040:114;;;;;;;;;;;;;:::i;:::-;;5568:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27878:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54317:1021;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52133:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29567:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52308:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52449:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30690:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52570:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53455:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52375:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56714:135;;;;;;;;;;;;;:::i;:::-;;52173:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29793:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6477:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57069:212;57208:4;57237:36;57261:11;57237:23;:36::i;:::-;57230:43;;57069:212;;;:::o;52961:51::-;;;;;;;;;;;;;;;;;:::o;27709:100::-;27763:13;27796:5;27789:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27709:100;:::o;29274:221::-;29350:7;29378:16;29386:7;29378;:16::i;:::-;29370:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29463:15;:24;29479:7;29463:24;;;;;;;;;;;;;;;;;;;;;29456:31;;29274:221;;;:::o;28797:411::-;28878:13;28894:23;28909:7;28894:14;:23::i;:::-;28878:39;;28942:5;28936:11;;:2;:11;;;;28928:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29036:5;29020:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29045:37;29062:5;29069:12;:10;:12::i;:::-;29045:16;:37::i;:::-;29020:62;28998:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29179:21;29188:2;29192:7;29179:8;:21::i;:::-;28797:411;;;:::o;41541:113::-;41602:7;41629:10;:17;;;;41622:24;;41541:113;:::o;56388:260::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56435:15:::1;56453:25;:15;:23;:25::i;:::-;56435:43;;56513:1;56498:12;;:16;56489:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;56547:30;56557:10;56569:7;56547:9;:30::i;:::-;56588:27;:15;:25;:27::i;:::-;56626:12;;:14;;;;;;;;;:::i;:::-;;;;;;5859:1;56388:260::o:0;30024:339::-;30219:41;30238:12;:10;:12::i;:::-;30252:7;30219:18;:41::i;:::-;30211:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30327:28;30337:4;30343:2;30347:7;30327:9;:28::i;:::-;30024:339;;;:::o;55373:846::-;55410:13;55426;:11;:13::i;:::-;55410:29;;55450:15;55468:25;:15;:23;:25::i;:::-;55450:43;;55504:19;55526:1;55504:23;;55538:26;55567:16;:28;55584:10;55567:28;;;;;;;;;;;;;;;;55538:57;;55624:1;55614:6;;:11;;55606:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;55678:9;;55670:5;:17;55662:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;55756:11;;55741;55720:18;:32;;;;:::i;:::-;:47;;55712:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;55846:7;;55831:11;55823:5;:19;;;;:::i;:::-;:30;;55815:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;55926:7;;55914:9;;:19;55906:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;55980:16;:28;55997:10;55980:28;;;;;;;;;;;;;;;;:30;;;;;;;;;:::i;:::-;;;;;;56021;56031:10;56043:7;56021:9;:30::i;:::-;56062:27;:15;:25;:27::i;:::-;56100:16;:28;56117:10;56100:28;;;;;;;;;;;;;;;;:30;;;;;;;;;:::i;:::-;;;;;;56141:9;;:11;;;;;;;;;:::i;:::-;;;;;;56163:12;;;56186:25;;;55373:846;;;;:::o;41209:256::-;41306:7;41342:23;41359:5;41342:16;:23::i;:::-;41334:5;:31;41326:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41431:12;:19;41444:5;41431:19;;;;;;;;;;;;;;;:26;41451:5;41431:26;;;;;;;;;;;;41424:33;;41209:256;;;;:::o;53165:166::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53242:1:::1;53218:21;:25;53210:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;53283:7;:5;:7::i;:::-;53275:25;;:48;53301:21;53275:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53165:166::o:0;54160:118::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54226:1:::1;54216:6;;:11;;54207:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;54269:1;54260:6;:10;;;;54160:118::o:0;30434:185::-;30572:39;30589:4;30595:2;30599:7;30572:39;;;;;;;;;;;;:16;:39::i;:::-;30434:185;;;:::o;52246:29::-;;;;:::o;41731:233::-;41806:7;41842:30;:28;:30::i;:::-;41834:5;:38;41826:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41939:10;41950:5;41939:17;;;;;;;;;;;;;;;;;;;;;;;;41932:24;;41731:233;;;:::o;53833:164::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53930:1:::1;53917:9;;:14;;53908:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;53978:11;53968:7;:21;;;;;;;;;;;;:::i;:::-;;53833:164:::0;:::o;27403:239::-;27475:7;27495:13;27511:7;:16;27519:7;27511:16;;;;;;;;;;;;;;;;;;;;;27495:32;;27563:1;27546:19;;:5;:19;;;;27538:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27629:5;27622:12;;;27403:239;;;:::o;52783:79::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52716:31::-;;;;:::o;27133:208::-;27205:7;27250:1;27233:19;;:5;:19;;;;27225:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27317:9;:16;27327:5;27317:16;;;;;;;;;;;;;;;;27310:23;;27133:208;;;:::o;6219:103::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6284:30:::1;6311:1;6284:18;:30::i;:::-;6219:103::o:0;52512:25::-;;;;:::o;54040:114::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54104:1:::1;54094:6;;:11;;54085:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;54145:1;54136:6;:10;;;;54040:114::o:0;5568:87::-;5614:7;5641:6;;;;;;;;;;;5634:13;;5568:87;:::o;27878:104::-;27934:13;27967:7;27960:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27878:104;:::o;54317:1021::-;54384:13;54400;:11;:13::i;:::-;54384:29;;54424:15;54442:25;:15;:23;:25::i;:::-;54424:43;;54478:28;54509:16;:28;54526:10;54509:28;;;;;;;;;;;;;;;;54478:59;;54566:1;54556:6;;:11;;54548:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;54620:9;;54612:5;:17;54604:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;54683:11;54675:5;;:19;;;;:::i;:::-;54662:9;:32;;54654:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;54770:1;54756:11;:15;54748:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;54824:13;;54809:11;:28;;54801:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;54940:13;;54925:11;54902:20;:34;;;;:::i;:::-;:51;;54894:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;55035:9;;55020:11;55012:5;:19;;;;:::i;:::-;:32;;55004:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;55093:9;55089:219;55112:11;55108:1;:15;55089:219;;;55151:25;:15;:23;:25::i;:::-;55141:35;;55187:30;55197:10;55209:7;55187:9;:30::i;:::-;55228:27;:15;:25;:27::i;:::-;55266:16;:28;55283:10;55266:28;;;;;;;;;;;;;;;;:30;;;;;;;;;:::i;:::-;;;;;;55125:3;;;;:::i;:::-;;;55089:219;;;;55318:12;;;54317:1021;;;;:::o;52133:33::-;;;;:::o;29567:155::-;29662:52;29681:12;:10;:12::i;:::-;29695:8;29705;29662:18;:52::i;:::-;29567:155;;:::o;52308:30::-;;;;:::o;52449:28::-;;;;:::o;30690:328::-;30865:41;30884:12;:10;:12::i;:::-;30898:7;30865:18;:41::i;:::-;30857:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30971:39;30985:4;30991:2;30995:7;31004:5;30971:13;:39::i;:::-;30690:328;;;;:::o;52570:28::-;;;;:::o;53455:286::-;53528:13;53634:17;53654:23;53669:7;53654:14;:23::i;:::-;53634:43;;53719:3;53702:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;53688:45;;;53455:286;;;:::o;52375:32::-;;;;:::o;56714:135::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56792:1:::1;56779:9;;:14;;56770:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;56840:1;56828:9;:13;;;;56714:135::o:0;52173:31::-;;;;:::o;29793:164::-;29890:4;29914:18;:25;29933:5;29914:25;;;;;;;;;;;;;;;:35;29940:8;29914:35;;;;;;;;;;;;;;;;;;;;;;;;;29907:42;;29793:164;;;;:::o;6477:201::-;5799:12;:10;:12::i;:::-;5788:23;;:7;:5;:7::i;:::-;:23;;;5780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6586:1:::1;6566:22;;:8;:22;;;;6558:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6642:28;6661:8;6642:18;:28::i;:::-;6477:201:::0;:::o;40901:224::-;41003:4;41042:35;41027:50;;;:11;:50;;;;:90;;;;41081:36;41105:11;41081:23;:36::i;:::-;41027:90;41020:97;;40901:224;;;:::o;32528:127::-;32593:4;32645:1;32617:30;;:7;:16;32625:7;32617:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32610:37;;32528:127;;;:::o;4286:98::-;4339:7;4366:10;4359:17;;4286:98;:::o;36674:174::-;36776:2;36749:15;:24;36765:7;36749:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36832:7;36828:2;36794:46;;36803:23;36818:7;36803:14;:23::i;:::-;36794:46;;;;;;;;;;;;36674:174;;:::o;878:114::-;943:7;970;:14;;;963:21;;878:114;;;:::o;33512:110::-;33588:26;33598:2;33602:7;33588:26;;;;;;;;;;;;:9;:26::i;:::-;33512:110;;:::o;1000:127::-;1107:1;1089:7;:14;;;:19;;;;;;;;;;;1000:127;:::o;32822:348::-;32915:4;32940:16;32948:7;32940;:16::i;:::-;32932:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33016:13;33032:23;33047:7;33032:14;:23::i;:::-;33016:39;;33085:5;33074:16;;:7;:16;;;:52;;;;33094:32;33111:5;33118:7;33094:16;:32::i;:::-;33074:52;:87;;;;33154:7;33130:31;;:20;33142:7;33130:11;:20::i;:::-;:31;;;33074:87;33066:96;;;32822:348;;;;:::o;35931:625::-;36090:4;36063:31;;:23;36078:7;36063:14;:23::i;:::-;:31;;;36055:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:1;36155:16;;:2;:16;;;;36147:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36225:39;36246:4;36252:2;36256:7;36225:20;:39::i;:::-;36329:29;36346:1;36350:7;36329:8;:29::i;:::-;36390:1;36371:9;:15;36381:4;36371:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36419:1;36402:9;:13;36412:2;36402:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36450:2;36431:7;:16;36439:7;36431:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36489:7;36485:2;36470:27;;36479:4;36470:27;;;;;;;;;;;;36510:38;36530:4;36536:2;36540:7;36510:19;:38::i;:::-;35931:625;;;:::o;6838:191::-;6912:16;6931:6;;;;;;;;;;;6912:25;;6957:8;6948:6;;:17;;;;;;;;;;;;;;;;;;7012:8;6981:40;;7002:8;6981:40;;;;;;;;;;;;6838:191;;:::o;36990:315::-;37145:8;37136:17;;:5;:17;;;;37128:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37232:8;37194:18;:25;37213:5;37194:25;;;;;;;;;;;;;;;:35;37220:8;37194:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37278:8;37256:41;;37271:5;37256:41;;;37288:8;37256:41;;;;;;:::i;:::-;;;;;;;;36990:315;;;:::o;31900:::-;32057:28;32067:4;32073:2;32077:7;32057:9;:28::i;:::-;32104:48;32127:4;32133:2;32137:7;32146:5;32104:22;:48::i;:::-;32096:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31900:315;;;;:::o;28053:339::-;28126:13;28160:16;28168:7;28160;:16::i;:::-;28152:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28241:21;28265:10;:8;:10::i;:::-;28241:34;;28317:1;28299:7;28293:21;:25;:91;;;;;;;;;;;;;;;;;;;;;;28345:7;28354:18;:7;:16;:18::i;:::-;28328:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28293:91;28286:98;;;28053:339;;;:::o;26764:305::-;26866:4;26918:25;26903:40;;;:11;:40;;;;:105;;;;26975:33;26960:48;;;:11;:48;;;;26903:105;:158;;;;27025:36;27049:11;27025:23;:36::i;:::-;26903:158;26883:178;;26764:305;;;:::o;33849:321::-;33979:18;33985:2;33989:7;33979:5;:18::i;:::-;34030:54;34061:1;34065:2;34069:7;34078:5;34030:22;:54::i;:::-;34008:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33849:321;;;:::o;56857:204::-;57008:45;57035:4;57041:2;57045:7;57008:26;:45::i;:::-;56857:204;;;:::o;39752:125::-;;;;:::o;37870:799::-;38025:4;38046:15;:2;:13;;;:15::i;:::-;38042:620;;;38098:2;38082:36;;;38119:12;:10;:12::i;:::-;38133:4;38139:7;38148:5;38082:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38078:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38341:1;38324:6;:13;:18;38320:272;;;38367:60;;;;;;;;;;:::i;:::-;;;;;;;;38320:272;38542:6;38536:13;38527:6;38523:2;38519:15;38512:38;38078:529;38215:41;;;38205:51;;;:6;:51;;;;38198:58;;;;;38042:620;38646:4;38639:11;;37870:799;;;;;;;:::o;53339:108::-;53399:13;53432:7;53425:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53339:108;:::o;1842:723::-;1898:13;2128:1;2119:5;:10;2115:53;;;2146:10;;;;;;;;;;;;;;;;;;;;;2115:53;2178:12;2193:5;2178:20;;2209:14;2234:78;2249:1;2241:4;:9;2234:78;;2267:8;;;;;:::i;:::-;;;;2298:2;2290:10;;;;;:::i;:::-;;;2234:78;;;2322:19;2354:6;2344:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2322:39;;2372:154;2388:1;2379:5;:10;2372:154;;2416:1;2406:11;;;;;:::i;:::-;;;2483:2;2475:5;:10;;;;:::i;:::-;2462:2;:24;;;;:::i;:::-;2449:39;;2432:6;2439;2432:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2512:2;2503:11;;;;;:::i;:::-;;;2372:154;;;2550:6;2536:21;;;;;1842:723;;;;:::o;18399:157::-;18484:4;18523:25;18508:40;;;:11;:40;;;;18501:47;;18399:157;;;:::o;34506:439::-;34600:1;34586:16;;:2;:16;;;;34578:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34659:16;34667:7;34659;:16::i;:::-;34658:17;34650:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34721:45;34750:1;34754:2;34758:7;34721:20;:45::i;:::-;34796:1;34779:9;:13;34789:2;34779:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34827:2;34808:7;:16;34816:7;34808:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34872:7;34868:2;34847:33;;34864:1;34847:33;;;;;;;;;;;;34893:44;34921:1;34925:2;34929:7;34893:19;:44::i;:::-;34506:439;;:::o;42577:589::-;42721:45;42748:4;42754:2;42758:7;42721:26;:45::i;:::-;42799:1;42783:18;;:4;:18;;;42779:187;;;42818:40;42850:7;42818:31;:40::i;:::-;42779:187;;;42888:2;42880:10;;:4;:10;;;42876:90;;42907:47;42940:4;42946:7;42907:32;:47::i;:::-;42876:90;42779:187;42994:1;42980:16;;:2;:16;;;42976:183;;;43013:45;43050:7;43013:36;:45::i;:::-;42976:183;;;43086:4;43080:10;;:2;:10;;;43076:83;;43107:40;43135:2;43139:7;43107:27;:40::i;:::-;43076:83;42976:183;42577:589;;;:::o;8275:326::-;8335:4;8592:1;8570:7;:19;;;:23;8563:30;;8275:326;;;:::o;39241:126::-;;;;:::o;43889:164::-;43993:10;:17;;;;43966:15;:24;43982:7;43966:24;;;;;;;;;;;:44;;;;44021:10;44037:7;44021:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43889:164;:::o;44680:988::-;44946:22;44996:1;44971:22;44988:4;44971:16;:22::i;:::-;:26;;;;:::i;:::-;44946:51;;45008:18;45029:17;:26;45047:7;45029:26;;;;;;;;;;;;45008:47;;45176:14;45162:10;:28;45158:328;;45207:19;45229:12;:18;45242:4;45229:18;;;;;;;;;;;;;;;:34;45248:14;45229:34;;;;;;;;;;;;45207:56;;45313:11;45280:12;:18;45293:4;45280:18;;;;;;;;;;;;;;;:30;45299:10;45280:30;;;;;;;;;;;:44;;;;45430:10;45397:17;:30;45415:11;45397:30;;;;;;;;;;;:43;;;;45158:328;;45582:17;:26;45600:7;45582:26;;;;;;;;;;;45575:33;;;45626:12;:18;45639:4;45626:18;;;;;;;;;;;;;;;:34;45645:14;45626:34;;;;;;;;;;;45619:41;;;44680:988;;;;:::o;45963:1079::-;46216:22;46261:1;46241:10;:17;;;;:21;;;;:::i;:::-;46216:46;;46273:18;46294:15;:24;46310:7;46294:24;;;;;;;;;;;;46273:45;;46645:19;46667:10;46678:14;46667:26;;;;;;;;;;;;;;;;;;;;;;;;46645:48;;46731:11;46706:10;46717;46706:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;46842:10;46811:15;:28;46827:11;46811:28;;;;;;;;;;;:41;;;;46983:15;:24;46999:7;46983:24;;;;;;;;;;;46976:31;;;47018:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45963:1079;;;;:::o;43467:221::-;43552:14;43569:20;43586:2;43569:16;:20::i;:::-;43552:37;;43627:7;43600:12;:16;43613:2;43600:16;;;;;;;;;;;;;;;:24;43617:6;43600:24;;;;;;;;;;;:34;;;;43674:6;43645:17;:26;43663:7;43645:26;;;;;;;;;;;:35;;;;43467:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;4941:6;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;5506:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;5877:6;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:118::-;6173:24;6191:5;6173:24;:::i;:::-;6168:3;6161:37;6151:53;;:::o;6210:109::-;6291:21;6306:5;6291:21;:::i;:::-;6286:3;6279:34;6269:50;;:::o;6325:360::-;6411:3;6439:38;6471:5;6439:38;:::i;:::-;6493:70;6556:6;6551:3;6493:70;:::i;:::-;6486:77;;6572:52;6617:6;6612:3;6605:4;6598:5;6594:16;6572:52;:::i;:::-;6649:29;6671:6;6649:29;:::i;:::-;6644:3;6640:39;6633:46;;6415:270;;;;;:::o;6691:364::-;6779:3;6807:39;6840:5;6807:39;:::i;:::-;6862:71;6926:6;6921:3;6862:71;:::i;:::-;6855:78;;6942:52;6987:6;6982:3;6975:4;6968:5;6964:16;6942:52;:::i;:::-;7019:29;7041:6;7019:29;:::i;:::-;7014:3;7010:39;7003:46;;6783:272;;;;;:::o;7061:377::-;7167:3;7195:39;7228:5;7195:39;:::i;:::-;7250:89;7332:6;7327:3;7250:89;:::i;:::-;7243:96;;7348:52;7393:6;7388:3;7381:4;7374:5;7370:16;7348:52;:::i;:::-;7425:6;7420:3;7416:16;7409:23;;7171:267;;;;;:::o;7444:366::-;7586:3;7607:67;7671:2;7666:3;7607:67;:::i;:::-;7600:74;;7683:93;7772:3;7683:93;:::i;:::-;7801:2;7796:3;7792:12;7785:19;;7590:220;;;:::o;7816:366::-;7958:3;7979:67;8043:2;8038:3;7979:67;:::i;:::-;7972:74;;8055:93;8144:3;8055:93;:::i;:::-;8173:2;8168:3;8164:12;8157:19;;7962:220;;;:::o;8188:366::-;8330:3;8351:67;8415:2;8410:3;8351:67;:::i;:::-;8344:74;;8427:93;8516:3;8427:93;:::i;:::-;8545:2;8540:3;8536:12;8529:19;;8334:220;;;:::o;8560:366::-;8702:3;8723:67;8787:2;8782:3;8723:67;:::i;:::-;8716:74;;8799:93;8888:3;8799:93;:::i;:::-;8917:2;8912:3;8908:12;8901:19;;8706:220;;;:::o;8932:366::-;9074:3;9095:67;9159:2;9154:3;9095:67;:::i;:::-;9088:74;;9171:93;9260:3;9171:93;:::i;:::-;9289:2;9284:3;9280:12;9273:19;;9078:220;;;:::o;9304:366::-;9446:3;9467:67;9531:2;9526:3;9467:67;:::i;:::-;9460:74;;9543:93;9632:3;9543:93;:::i;:::-;9661:2;9656:3;9652:12;9645:19;;9450:220;;;:::o;9676:366::-;9818:3;9839:67;9903:2;9898:3;9839:67;:::i;:::-;9832:74;;9915:93;10004:3;9915:93;:::i;:::-;10033:2;10028:3;10024:12;10017:19;;9822:220;;;:::o;10048:366::-;10190:3;10211:67;10275:2;10270:3;10211:67;:::i;:::-;10204:74;;10287:93;10376:3;10287:93;:::i;:::-;10405:2;10400:3;10396:12;10389:19;;10194:220;;;:::o;10420:366::-;10562:3;10583:67;10647:2;10642:3;10583:67;:::i;:::-;10576:74;;10659:93;10748:3;10659:93;:::i;:::-;10777:2;10772:3;10768:12;10761:19;;10566:220;;;:::o;10792:366::-;10934:3;10955:67;11019:2;11014:3;10955:67;:::i;:::-;10948:74;;11031:93;11120:3;11031:93;:::i;:::-;11149:2;11144:3;11140:12;11133:19;;10938:220;;;:::o;11164:366::-;11306:3;11327:67;11391:2;11386:3;11327:67;:::i;:::-;11320:74;;11403:93;11492:3;11403:93;:::i;:::-;11521:2;11516:3;11512:12;11505:19;;11310:220;;;:::o;11536:366::-;11678:3;11699:67;11763:2;11758:3;11699:67;:::i;:::-;11692:74;;11775:93;11864:3;11775:93;:::i;:::-;11893:2;11888:3;11884:12;11877:19;;11682:220;;;:::o;11908:366::-;12050:3;12071:67;12135:2;12130:3;12071:67;:::i;:::-;12064:74;;12147:93;12236:3;12147:93;:::i;:::-;12265:2;12260:3;12256:12;12249:19;;12054:220;;;:::o;12280:366::-;12422:3;12443:67;12507:2;12502:3;12443:67;:::i;:::-;12436:74;;12519:93;12608:3;12519:93;:::i;:::-;12637:2;12632:3;12628:12;12621:19;;12426:220;;;:::o;12652:366::-;12794:3;12815:67;12879:2;12874:3;12815:67;:::i;:::-;12808:74;;12891:93;12980:3;12891:93;:::i;:::-;13009:2;13004:3;13000:12;12993:19;;12798:220;;;:::o;13024:366::-;13166:3;13187:67;13251:2;13246:3;13187:67;:::i;:::-;13180:74;;13263:93;13352:3;13263:93;:::i;:::-;13381:2;13376:3;13372:12;13365:19;;13170:220;;;:::o;13396:366::-;13538:3;13559:67;13623:2;13618:3;13559:67;:::i;:::-;13552:74;;13635:93;13724:3;13635:93;:::i;:::-;13753:2;13748:3;13744:12;13737:19;;13542:220;;;:::o;13768:366::-;13910:3;13931:67;13995:2;13990:3;13931:67;:::i;:::-;13924:74;;14007:93;14096:3;14007:93;:::i;:::-;14125:2;14120:3;14116:12;14109:19;;13914:220;;;:::o;14140:366::-;14282:3;14303:67;14367:2;14362:3;14303:67;:::i;:::-;14296:74;;14379:93;14468:3;14379:93;:::i;:::-;14497:2;14492:3;14488:12;14481:19;;14286:220;;;:::o;14512:366::-;14654:3;14675:67;14739:2;14734:3;14675:67;:::i;:::-;14668:74;;14751:93;14840:3;14751:93;:::i;:::-;14869:2;14864:3;14860:12;14853:19;;14658:220;;;:::o;14884:366::-;15026:3;15047:67;15111:2;15106:3;15047:67;:::i;:::-;15040:74;;15123:93;15212:3;15123:93;:::i;:::-;15241:2;15236:3;15232:12;15225:19;;15030:220;;;:::o;15256:366::-;15398:3;15419:67;15483:2;15478:3;15419:67;:::i;:::-;15412:74;;15495:93;15584:3;15495:93;:::i;:::-;15613:2;15608:3;15604:12;15597:19;;15402:220;;;:::o;15628:366::-;15770:3;15791:67;15855:2;15850:3;15791:67;:::i;:::-;15784:74;;15867:93;15956:3;15867:93;:::i;:::-;15985:2;15980:3;15976:12;15969:19;;15774:220;;;:::o;16000:366::-;16142:3;16163:67;16227:2;16222:3;16163:67;:::i;:::-;16156:74;;16239:93;16328:3;16239:93;:::i;:::-;16357:2;16352:3;16348:12;16341:19;;16146:220;;;:::o;16372:400::-;16532:3;16553:84;16635:1;16630:3;16553:84;:::i;:::-;16546:91;;16646:93;16735:3;16646:93;:::i;:::-;16764:1;16759:3;16755:11;16748:18;;16536:236;;;:::o;16778:366::-;16920:3;16941:67;17005:2;17000:3;16941:67;:::i;:::-;16934:74;;17017:93;17106:3;17017:93;:::i;:::-;17135:2;17130:3;17126:12;17119:19;;16924:220;;;:::o;17150:366::-;17292:3;17313:67;17377:2;17372:3;17313:67;:::i;:::-;17306:74;;17389:93;17478:3;17389:93;:::i;:::-;17507:2;17502:3;17498:12;17491:19;;17296:220;;;:::o;17522:366::-;17664:3;17685:67;17749:2;17744:3;17685:67;:::i;:::-;17678:74;;17761:93;17850:3;17761:93;:::i;:::-;17879:2;17874:3;17870:12;17863:19;;17668:220;;;:::o;17894:366::-;18036:3;18057:67;18121:2;18116:3;18057:67;:::i;:::-;18050:74;;18133:93;18222:3;18133:93;:::i;:::-;18251:2;18246:3;18242:12;18235:19;;18040:220;;;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18412:220;;;:::o;18638:365::-;18780:3;18801:66;18865:1;18860:3;18801:66;:::i;:::-;18794:73;;18876:93;18965:3;18876:93;:::i;:::-;18994:2;18989:3;18985:12;18978:19;;18784:219;;;:::o;19009:366::-;19151:3;19172:67;19236:2;19231:3;19172:67;:::i;:::-;19165:74;;19248:93;19337:3;19248:93;:::i;:::-;19366:2;19361:3;19357:12;19350:19;;19155:220;;;:::o;19381:366::-;19523:3;19544:67;19608:2;19603:3;19544:67;:::i;:::-;19537:74;;19620:93;19709:3;19620:93;:::i;:::-;19738:2;19733:3;19729:12;19722:19;;19527:220;;;:::o;19753:366::-;19895:3;19916:67;19980:2;19975:3;19916:67;:::i;:::-;19909:74;;19992:93;20081:3;19992:93;:::i;:::-;20110:2;20105:3;20101:12;20094:19;;19899:220;;;:::o;20125:366::-;20267:3;20288:67;20352:2;20347:3;20288:67;:::i;:::-;20281:74;;20364:93;20453:3;20364:93;:::i;:::-;20482:2;20477:3;20473:12;20466:19;;20271:220;;;:::o;20497:118::-;20584:24;20602:5;20584:24;:::i;:::-;20579:3;20572:37;20562:53;;:::o;20621:435::-;20801:3;20823:95;20914:3;20905:6;20823:95;:::i;:::-;20816:102;;20935:95;21026:3;21017:6;20935:95;:::i;:::-;20928:102;;21047:3;21040:10;;20805:251;;;;;:::o;21062:541::-;21295:3;21317:95;21408:3;21399:6;21317:95;:::i;:::-;21310:102;;21429:148;21573:3;21429:148;:::i;:::-;21422:155;;21594:3;21587:10;;21299:304;;;;:::o;21609:222::-;21702:4;21740:2;21729:9;21725:18;21717:26;;21753:71;21821:1;21810:9;21806:17;21797:6;21753:71;:::i;:::-;21707:124;;;;:::o;21837:640::-;22032:4;22070:3;22059:9;22055:19;22047:27;;22084:71;22152:1;22141:9;22137:17;22128:6;22084:71;:::i;:::-;22165:72;22233:2;22222:9;22218:18;22209:6;22165:72;:::i;:::-;22247;22315:2;22304:9;22300:18;22291:6;22247:72;:::i;:::-;22366:9;22360:4;22356:20;22351:2;22340:9;22336:18;22329:48;22394:76;22465:4;22456:6;22394:76;:::i;:::-;22386:84;;22037:440;;;;;;;:::o;22483:210::-;22570:4;22608:2;22597:9;22593:18;22585:26;;22621:65;22683:1;22672:9;22668:17;22659:6;22621:65;:::i;:::-;22575:118;;;;:::o;22699:313::-;22812:4;22850:2;22839:9;22835:18;22827:26;;22899:9;22893:4;22889:20;22885:1;22874:9;22870:17;22863:47;22927:78;23000:4;22991:6;22927:78;:::i;:::-;22919:86;;22817:195;;;;:::o;23018:419::-;23184:4;23222:2;23211:9;23207:18;23199:26;;23271:9;23265:4;23261:20;23257:1;23246:9;23242:17;23235:47;23299:131;23425:4;23299:131;:::i;:::-;23291:139;;23189:248;;;:::o;23443:419::-;23609:4;23647:2;23636:9;23632:18;23624:26;;23696:9;23690:4;23686:20;23682:1;23671:9;23667:17;23660:47;23724:131;23850:4;23724:131;:::i;:::-;23716:139;;23614:248;;;:::o;23868:419::-;24034:4;24072:2;24061:9;24057:18;24049:26;;24121:9;24115:4;24111:20;24107:1;24096:9;24092:17;24085:47;24149:131;24275:4;24149:131;:::i;:::-;24141:139;;24039:248;;;:::o;24293:419::-;24459:4;24497:2;24486:9;24482:18;24474:26;;24546:9;24540:4;24536:20;24532:1;24521:9;24517:17;24510:47;24574:131;24700:4;24574:131;:::i;:::-;24566:139;;24464:248;;;:::o;24718:419::-;24884:4;24922:2;24911:9;24907:18;24899:26;;24971:9;24965:4;24961:20;24957:1;24946:9;24942:17;24935:47;24999:131;25125:4;24999:131;:::i;:::-;24991:139;;24889:248;;;:::o;25143:419::-;25309:4;25347:2;25336:9;25332:18;25324:26;;25396:9;25390:4;25386:20;25382:1;25371:9;25367:17;25360:47;25424:131;25550:4;25424:131;:::i;:::-;25416:139;;25314:248;;;:::o;25568:419::-;25734:4;25772:2;25761:9;25757:18;25749:26;;25821:9;25815:4;25811:20;25807:1;25796:9;25792:17;25785:47;25849:131;25975:4;25849:131;:::i;:::-;25841:139;;25739:248;;;:::o;25993:419::-;26159:4;26197:2;26186:9;26182:18;26174:26;;26246:9;26240:4;26236:20;26232:1;26221:9;26217:17;26210:47;26274:131;26400:4;26274:131;:::i;:::-;26266:139;;26164:248;;;:::o;26418:419::-;26584:4;26622:2;26611:9;26607:18;26599:26;;26671:9;26665:4;26661:20;26657:1;26646:9;26642:17;26635:47;26699:131;26825:4;26699:131;:::i;:::-;26691:139;;26589:248;;;:::o;26843:419::-;27009:4;27047:2;27036:9;27032:18;27024:26;;27096:9;27090:4;27086:20;27082:1;27071:9;27067:17;27060:47;27124:131;27250:4;27124:131;:::i;:::-;27116:139;;27014:248;;;:::o;27268:419::-;27434:4;27472:2;27461:9;27457:18;27449:26;;27521:9;27515:4;27511:20;27507:1;27496:9;27492:17;27485:47;27549:131;27675:4;27549:131;:::i;:::-;27541:139;;27439:248;;;:::o;27693:419::-;27859:4;27897:2;27886:9;27882:18;27874:26;;27946:9;27940:4;27936:20;27932:1;27921:9;27917:17;27910:47;27974:131;28100:4;27974:131;:::i;:::-;27966:139;;27864:248;;;:::o;28118:419::-;28284:4;28322:2;28311:9;28307:18;28299:26;;28371:9;28365:4;28361:20;28357:1;28346:9;28342:17;28335:47;28399:131;28525:4;28399:131;:::i;:::-;28391:139;;28289:248;;;:::o;28543:419::-;28709:4;28747:2;28736:9;28732:18;28724:26;;28796:9;28790:4;28786:20;28782:1;28771:9;28767:17;28760:47;28824:131;28950:4;28824:131;:::i;:::-;28816:139;;28714:248;;;:::o;28968:419::-;29134:4;29172:2;29161:9;29157:18;29149:26;;29221:9;29215:4;29211:20;29207:1;29196:9;29192:17;29185:47;29249:131;29375:4;29249:131;:::i;:::-;29241:139;;29139:248;;;:::o;29393:419::-;29559:4;29597:2;29586:9;29582:18;29574:26;;29646:9;29640:4;29636:20;29632:1;29621:9;29617:17;29610:47;29674:131;29800:4;29674:131;:::i;:::-;29666:139;;29564:248;;;:::o;29818:419::-;29984:4;30022:2;30011:9;30007:18;29999:26;;30071:9;30065:4;30061:20;30057:1;30046:9;30042:17;30035:47;30099:131;30225:4;30099:131;:::i;:::-;30091:139;;29989:248;;;:::o;30243:419::-;30409:4;30447:2;30436:9;30432:18;30424:26;;30496:9;30490:4;30486:20;30482:1;30471:9;30467:17;30460:47;30524:131;30650:4;30524:131;:::i;:::-;30516:139;;30414:248;;;:::o;30668:419::-;30834:4;30872:2;30861:9;30857:18;30849:26;;30921:9;30915:4;30911:20;30907:1;30896:9;30892:17;30885:47;30949:131;31075:4;30949:131;:::i;:::-;30941:139;;30839:248;;;:::o;31093:419::-;31259:4;31297:2;31286:9;31282:18;31274:26;;31346:9;31340:4;31336:20;31332:1;31321:9;31317:17;31310:47;31374:131;31500:4;31374:131;:::i;:::-;31366:139;;31264:248;;;:::o;31518:419::-;31684:4;31722:2;31711:9;31707:18;31699:26;;31771:9;31765:4;31761:20;31757:1;31746:9;31742:17;31735:47;31799:131;31925:4;31799:131;:::i;:::-;31791:139;;31689:248;;;:::o;31943:419::-;32109:4;32147:2;32136:9;32132:18;32124:26;;32196:9;32190:4;32186:20;32182:1;32171:9;32167:17;32160:47;32224:131;32350:4;32224:131;:::i;:::-;32216:139;;32114:248;;;:::o;32368:419::-;32534:4;32572:2;32561:9;32557:18;32549:26;;32621:9;32615:4;32611:20;32607:1;32596:9;32592:17;32585:47;32649:131;32775:4;32649:131;:::i;:::-;32641:139;;32539:248;;;:::o;32793:419::-;32959:4;32997:2;32986:9;32982:18;32974:26;;33046:9;33040:4;33036:20;33032:1;33021:9;33017:17;33010:47;33074:131;33200:4;33074:131;:::i;:::-;33066:139;;32964:248;;;:::o;33218:419::-;33384:4;33422:2;33411:9;33407:18;33399:26;;33471:9;33465:4;33461:20;33457:1;33446:9;33442:17;33435:47;33499:131;33625:4;33499:131;:::i;:::-;33491:139;;33389:248;;;:::o;33643:419::-;33809:4;33847:2;33836:9;33832:18;33824:26;;33896:9;33890:4;33886:20;33882:1;33871:9;33867:17;33860:47;33924:131;34050:4;33924:131;:::i;:::-;33916:139;;33814:248;;;:::o;34068:419::-;34234:4;34272:2;34261:9;34257:18;34249:26;;34321:9;34315:4;34311:20;34307:1;34296:9;34292:17;34285:47;34349:131;34475:4;34349:131;:::i;:::-;34341:139;;34239:248;;;:::o;34493:419::-;34659:4;34697:2;34686:9;34682:18;34674:26;;34746:9;34740:4;34736:20;34732:1;34721:9;34717:17;34710:47;34774:131;34900:4;34774:131;:::i;:::-;34766:139;;34664:248;;;:::o;34918:419::-;35084:4;35122:2;35111:9;35107:18;35099:26;;35171:9;35165:4;35161:20;35157:1;35146:9;35142:17;35135:47;35199:131;35325:4;35199:131;:::i;:::-;35191:139;;35089:248;;;:::o;35343:419::-;35509:4;35547:2;35536:9;35532:18;35524:26;;35596:9;35590:4;35586:20;35582:1;35571:9;35567:17;35560:47;35624:131;35750:4;35624:131;:::i;:::-;35616:139;;35514:248;;;:::o;35768:419::-;35934:4;35972:2;35961:9;35957:18;35949:26;;36021:9;36015:4;36011:20;36007:1;35996:9;35992:17;35985:47;36049:131;36175:4;36049:131;:::i;:::-;36041:139;;35939:248;;;:::o;36193:419::-;36359:4;36397:2;36386:9;36382:18;36374:26;;36446:9;36440:4;36436:20;36432:1;36421:9;36417:17;36410:47;36474:131;36600:4;36474:131;:::i;:::-;36466:139;;36364:248;;;:::o;36618:419::-;36784:4;36822:2;36811:9;36807:18;36799:26;;36871:9;36865:4;36861:20;36857:1;36846:9;36842:17;36835:47;36899:131;37025:4;36899:131;:::i;:::-;36891:139;;36789:248;;;:::o;37043:419::-;37209:4;37247:2;37236:9;37232:18;37224:26;;37296:9;37290:4;37286:20;37282:1;37271:9;37267:17;37260:47;37324:131;37450:4;37324:131;:::i;:::-;37316:139;;37214:248;;;:::o;37468:222::-;37561:4;37599:2;37588:9;37584:18;37576:26;;37612:71;37680:1;37669:9;37665:17;37656:6;37612:71;:::i;:::-;37566:124;;;;:::o;37696:129::-;37730:6;37757:20;;:::i;:::-;37747:30;;37786:33;37814:4;37806:6;37786:33;:::i;:::-;37737:88;;;:::o;37831:75::-;37864:6;37897:2;37891:9;37881:19;;37871:35;:::o;37912:307::-;37973:4;38063:18;38055:6;38052:30;38049:2;;;38085:18;;:::i;:::-;38049:2;38123:29;38145:6;38123:29;:::i;:::-;38115:37;;38207:4;38201;38197:15;38189:23;;37978:241;;;:::o;38225:308::-;38287:4;38377:18;38369:6;38366:30;38363:2;;;38399:18;;:::i;:::-;38363:2;38437:29;38459:6;38437:29;:::i;:::-;38429:37;;38521:4;38515;38511:15;38503:23;;38292:241;;;:::o;38539:98::-;38590:6;38624:5;38618:12;38608:22;;38597:40;;;:::o;38643:99::-;38695:6;38729:5;38723:12;38713:22;;38702:40;;;:::o;38748:168::-;38831:11;38865:6;38860:3;38853:19;38905:4;38900:3;38896:14;38881:29;;38843:73;;;;:::o;38922:169::-;39006:11;39040:6;39035:3;39028:19;39080:4;39075:3;39071:14;39056:29;;39018:73;;;;:::o;39097:148::-;39199:11;39236:3;39221:18;;39211:34;;;;:::o;39251:305::-;39291:3;39310:20;39328:1;39310:20;:::i;:::-;39305:25;;39344:20;39362:1;39344:20;:::i;:::-;39339:25;;39498:1;39430:66;39426:74;39423:1;39420:81;39417:2;;;39504:18;;:::i;:::-;39417:2;39548:1;39545;39541:9;39534:16;;39295:261;;;;:::o;39562:185::-;39602:1;39619:20;39637:1;39619:20;:::i;:::-;39614:25;;39653:20;39671:1;39653:20;:::i;:::-;39648:25;;39692:1;39682:2;;39697:18;;:::i;:::-;39682:2;39739:1;39736;39732:9;39727:14;;39604:143;;;;:::o;39753:348::-;39793:7;39816:20;39834:1;39816:20;:::i;:::-;39811:25;;39850:20;39868:1;39850:20;:::i;:::-;39845:25;;40038:1;39970:66;39966:74;39963:1;39960:81;39955:1;39948:9;39941:17;39937:105;39934:2;;;40045:18;;:::i;:::-;39934:2;40093:1;40090;40086:9;40075:20;;39801:300;;;;:::o;40107:191::-;40147:4;40167:20;40185:1;40167:20;:::i;:::-;40162:25;;40201:20;40219:1;40201:20;:::i;:::-;40196:25;;40240:1;40237;40234:8;40231:2;;;40245:18;;:::i;:::-;40231:2;40290:1;40287;40283:9;40275:17;;40152:146;;;;:::o;40304:96::-;40341:7;40370:24;40388:5;40370:24;:::i;:::-;40359:35;;40349:51;;;:::o;40406:90::-;40440:7;40483:5;40476:13;40469:21;40458:32;;40448:48;;;:::o;40502:149::-;40538:7;40578:66;40571:5;40567:78;40556:89;;40546:105;;;:::o;40657:126::-;40694:7;40734:42;40727:5;40723:54;40712:65;;40702:81;;;:::o;40789:77::-;40826:7;40855:5;40844:16;;40834:32;;;:::o;40872:154::-;40956:6;40951:3;40946;40933:30;41018:1;41009:6;41004:3;41000:16;40993:27;40923:103;;;:::o;41032:307::-;41100:1;41110:113;41124:6;41121:1;41118:13;41110:113;;;41209:1;41204:3;41200:11;41194:18;41190:1;41185:3;41181:11;41174:39;41146:2;41143:1;41139:10;41134:15;;41110:113;;;41241:6;41238:1;41235:13;41232:2;;;41321:1;41312:6;41307:3;41303:16;41296:27;41232:2;41081:258;;;;:::o;41345:320::-;41389:6;41426:1;41420:4;41416:12;41406:22;;41473:1;41467:4;41463:12;41494:18;41484:2;;41550:4;41542:6;41538:17;41528:27;;41484:2;41612;41604:6;41601:14;41581:18;41578:38;41575:2;;;41631:18;;:::i;:::-;41575:2;41396:269;;;;:::o;41671:281::-;41754:27;41776:4;41754:27;:::i;:::-;41746:6;41742:40;41884:6;41872:10;41869:22;41848:18;41836:10;41833:34;41830:62;41827:2;;;41895:18;;:::i;:::-;41827:2;41935:10;41931:2;41924:22;41714:238;;;:::o;41958:233::-;41997:3;42020:24;42038:5;42020:24;:::i;:::-;42011:33;;42066:66;42059:5;42056:77;42053:2;;;42136:18;;:::i;:::-;42053:2;42183:1;42176:5;42172:13;42165:20;;42001:190;;;:::o;42197:176::-;42229:1;42246:20;42264:1;42246:20;:::i;:::-;42241:25;;42280:20;42298:1;42280:20;:::i;:::-;42275:25;;42319:1;42309:2;;42324:18;;:::i;:::-;42309:2;42365:1;42362;42358:9;42353:14;;42231:142;;;;:::o;42379:180::-;42427:77;42424:1;42417:88;42524:4;42521:1;42514:15;42548:4;42545:1;42538:15;42565:180;42613:77;42610:1;42603:88;42710:4;42707:1;42700:15;42734:4;42731:1;42724:15;42751:180;42799:77;42796:1;42789:88;42896:4;42893:1;42886:15;42920:4;42917:1;42910:15;42937:180;42985:77;42982:1;42975:88;43082:4;43079:1;43072:15;43106:4;43103:1;43096:15;43123:102;43164:6;43215:2;43211:7;43206:2;43199:5;43195:14;43191:28;43181:38;;43171:54;;;:::o;43231:167::-;43371:19;43367:1;43359:6;43355:14;43348:43;43337:61;:::o;43404:171::-;43544:23;43540:1;43532:6;43528:14;43521:47;43510:65;:::o;43581:164::-;43721:16;43717:1;43709:6;43705:14;43698:40;43687:58;:::o;43751:182::-;43891:34;43887:1;43879:6;43875:14;43868:58;43857:76;:::o;43939:230::-;44079:34;44075:1;44067:6;44063:14;44056:58;44148:13;44143:2;44135:6;44131:15;44124:38;44045:124;:::o;44175:237::-;44315:34;44311:1;44303:6;44299:14;44292:58;44384:20;44379:2;44371:6;44367:15;44360:45;44281:131;:::o;44418:165::-;44558:17;44554:1;44546:6;44542:14;44535:41;44524:59;:::o;44589:225::-;44729:34;44725:1;44717:6;44713:14;44706:58;44798:8;44793:2;44785:6;44781:15;44774:33;44695:119;:::o;44820:224::-;44960:34;44956:1;44948:6;44944:14;44937:58;45029:7;45024:2;45016:6;45012:15;45005:32;44926:118;:::o;45050:178::-;45190:30;45186:1;45178:6;45174:14;45167:54;45156:72;:::o;45234:167::-;45374:19;45370:1;45362:6;45358:14;45351:43;45340:61;:::o;45407:223::-;45547:34;45543:1;45535:6;45531:14;45524:58;45616:6;45611:2;45603:6;45599:15;45592:31;45513:117;:::o;45636:175::-;45776:27;45772:1;45764:6;45760:14;45753:51;45742:69;:::o;45817:225::-;45957:34;45953:1;45945:6;45941:14;45934:58;46026:8;46021:2;46013:6;46009:15;46002:33;45923:119;:::o;46048:170::-;46188:22;46184:1;46176:6;46172:14;46165:46;46154:64;:::o;46224:223::-;46364:34;46360:1;46352:6;46348:14;46341:58;46433:6;46428:2;46420:6;46416:15;46409:31;46330:117;:::o;46453:231::-;46593:34;46589:1;46581:6;46577:14;46570:58;46662:14;46657:2;46649:6;46645:15;46638:39;46559:125;:::o;46690:170::-;46830:22;46826:1;46818:6;46814:14;46807:46;46796:64;:::o;46866:243::-;47006:34;47002:1;46994:6;46990:14;46983:58;47075:26;47070:2;47062:6;47058:15;47051:51;46972:137;:::o;47115:229::-;47255:34;47251:1;47243:6;47239:14;47232:58;47324:12;47319:2;47311:6;47307:15;47300:37;47221:123;:::o;47350:228::-;47490:34;47486:1;47478:6;47474:14;47467:58;47559:11;47554:2;47546:6;47542:15;47535:36;47456:122;:::o;47584:182::-;47724:34;47720:1;47712:6;47708:14;47701:58;47690:76;:::o;47772:222::-;47912:34;47908:1;47900:6;47896:14;47889:58;47981:5;47976:2;47968:6;47964:15;47957:30;47878:116;:::o;48000:231::-;48140:34;48136:1;48128:6;48124:14;48117:58;48209:14;48204:2;48196:6;48192:15;48185:39;48106:125;:::o;48237:155::-;48377:7;48373:1;48365:6;48361:14;48354:31;48343:49;:::o;48398:182::-;48538:34;48534:1;48526:6;48522:14;48515:58;48504:76;:::o;48586:234::-;48726:34;48722:1;48714:6;48710:14;48703:58;48795:17;48790:2;48782:6;48778:15;48771:42;48692:128;:::o;48826:220::-;48966:34;48962:1;48954:6;48950:14;48943:58;49035:3;49030:2;49022:6;49018:15;49011:28;48932:114;:::o;49052:236::-;49192:34;49188:1;49180:6;49176:14;49169:58;49261:19;49256:2;49248:6;49244:15;49237:44;49158:130;:::o;49294:171::-;49434:23;49430:1;49422:6;49418:14;49411:47;49400:65;:::o;49471:159::-;49611:11;49607:1;49599:6;49595:14;49588:35;49577:53;:::o;49636:231::-;49776:34;49772:1;49764:6;49760:14;49753:58;49845:14;49840:2;49832:6;49828:15;49821:39;49742:125;:::o;49873:181::-;50013:33;50009:1;50001:6;49997:14;49990:57;49979:75;:::o;50060:179::-;50200:31;50196:1;50188:6;50184:14;50177:55;50166:73;:::o;50245:227::-;50385:34;50381:1;50373:6;50369:14;50362:58;50454:10;50449:2;50441:6;50437:15;50430:35;50351:121;:::o;50478:122::-;50551:24;50569:5;50551:24;:::i;:::-;50544:5;50541:35;50531:2;;50590:1;50587;50580:12;50531:2;50521:79;:::o;50606:116::-;50676:21;50691:5;50676:21;:::i;:::-;50669:5;50666:32;50656:2;;50712:1;50709;50702:12;50656:2;50646:76;:::o;50728:120::-;50800:23;50817:5;50800:23;:::i;:::-;50793:5;50790:34;50780:2;;50838:1;50835;50828:12;50780:2;50770:78;:::o;50854:122::-;50927:24;50945:5;50927:24;:::i;:::-;50920:5;50917:35;50907:2;;50966:1;50963;50956:12;50907:2;50897:79;:::o

Swarm Source

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