ETH Price: $3,545.21 (+7.52%)

Token

Lying NFT (Lying)
 

Overview

Max Total Supply

5,555 Lying

Holders

1,589

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Lying
0x8c4138dcead987bb50929ecfbeb39ef3e28b4c76
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:
LyingNFT

Compiler Version
v0.8.15+commit.e14f2714

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-23
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;

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

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


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

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

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

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

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

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

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

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

// Address.sol
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ERC721A.sol
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex = 1;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert('ERC721A: unable to get token of owner by index');
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: 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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe) {
                    require(
                        _checkOnERC721Received(address(0), to, updatedIndex, _data),
                        'ERC721A: transfer to non ERC721Receiver implementer'
                    );
                }

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract LyingNFT is ERC721A, Ownable {
    
    uint256 MAX_SUPPLY = 5555;
    uint256 Allremain = 5555;
    uint256 public mintRate = 0.005 ether;
    uint256 MintForWallet = 5555;
    string public base_URI = "";
    string public baseExtension = ".json";
    string public prerevealURL = "ipfs://Qme7XF3CeWQ1PWKrKTpuNxH6pQiL1FhgcEPzSxene5WmxL?filename=hidden.json" ;
    bool public start = true;

    mapping (address => uint256) private MintedBalance;

    constructor() ERC721A("Lying NFT", "Lying") {}



    function reveal(string memory url) external onlyOwner {
		base_URI = url;
	}

    function withdraw() external payable onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

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


    function pauseStartSwitch() public onlyOwner {
        start = !start;
    }

    function RemainingItem() public view returns (uint256) {
        return Allremain;
    }



    function mint(uint256 quantity) public payable {
        require(start, "Sorry, Minting is paused.");
        require(quantity<=10 , "Sorry, there are only 10 items allowed for each minting.");
        require((totalSupply() + quantity) <= MAX_SUPPLY, "Sorry, There is no more items.");
        
        uint payforNum = quantity;

        if(MintedBalance[msg.sender] == 0){
            payforNum = payforNum - 1;
        }

        require(msg.value >= payforNum * mintRate, "Ether is not enough.");


        _safeMint(msg.sender, quantity);
        MintedBalance[msg.sender] = MintedBalance[msg.sender] + quantity;
        Allremain -= quantity;
    }

    function setRate(uint256 newRate) external onlyOwner {
        mintRate = newRate;
    }
    
    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
        tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

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

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension))
            : prerevealURL;
    }

}

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":"RemainingItem","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"base_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRate","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":"pauseStartSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"prerevealURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"url","type":"string"}],"name":"reveal","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":"uint256","name":"newRate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260016000556115b36008556115b36009556611c37937e08000600a556115b3600b5560405180602001604052806000815250600c9081620000469190620004e2565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90816200008d9190620004e2565b506040518060800160405280604a815260200162004c80604a9139600e9081620000b89190620004e2565b506001600f60006101000a81548160ff021916908315150217905550348015620000e157600080fd5b506040518060400160405280600981526020017f4c79696e67204e465400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4c79696e6700000000000000000000000000000000000000000000000000000081525081600190816200015f9190620004e2565b508060029081620001719190620004e2565b50505062000194620001886200019a60201b60201c565b620001a260201b60201c565b620005c9565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ea57607f821691505b6020821081036200030057620002ff620002a2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200036a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200032b565b6200037686836200032b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c3620003bd620003b7846200038e565b62000398565b6200038e565b9050919050565b6000819050919050565b620003df83620003a2565b620003f7620003ee82620003ca565b84845462000338565b825550505050565b600090565b6200040e620003ff565b6200041b818484620003d4565b505050565b5b8181101562000443576200043760008262000404565b60018101905062000421565b5050565b601f82111562000492576200045c8162000306565b62000467846200031b565b8101602085101562000477578190505b6200048f62000486856200031b565b83018262000420565b50505b505050565b600082821c905092915050565b6000620004b76000198460080262000497565b1980831691505092915050565b6000620004d28383620004a4565b9150826002028217905092915050565b620004ed8262000268565b67ffffffffffffffff81111562000509576200050862000273565b5b620005158254620002d1565b6200052282828562000447565b600060209050601f8311600181146200055a576000841562000545578287015190505b620005518582620004c4565b865550620005c1565b601f1984166200056a8662000306565b60005b8281101562000594578489015182556001820191506020850194506020810190506200056d565b86831015620005b45784890151620005b0601f891682620004a4565b8355505b6001600288020188555050505b505050505050565b6146a780620005d96000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063b88d4fde11610095578063ca0dcf1611610064578063ca0dcf1614610690578063d8210482146106bb578063e985e9c5146106e6578063f2fde38b14610723576101d8565b8063b88d4fde146105d4578063be9a6555146105fd578063c668286214610628578063c87b56dd14610653576101d8565b80639e890335116100d15780639e89033514610539578063a0712d6814610564578063a22cb46514610580578063a95a91e1146105a9576101d8565b806370a082311461048f578063715018a6146104cc5780638da5cb5b146104e357806395d89b411461050e576101d8565b80632f745c591161017a578063438b630011610149578063438b6300146103af5780634c261247146103ec5780634f6ccce7146104155780636352211e14610452576101d8565b80632f745c591461031657806334fcf437146103535780633ccfd60b1461037c57806342842e0e14610386576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d65780632e84d90e146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c24565b61074c565b6040516102119190612c6c565b60405180910390f35b34801561022657600080fd5b5061022f610896565b60405161023c9190612d20565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612d78565b610928565b6040516102799190612de6565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612e2d565b6109ad565b005b3480156102b757600080fd5b506102c0610ac5565b6040516102cd9190612e7c565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612e97565b610adb565b005b34801561030b57600080fd5b50610314610aeb565b005b34801561032257600080fd5b5061033d60048036038101906103389190612e2d565b610b93565b60405161034a9190612e7c565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190612d78565b610d83565b005b610384610e09565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612e97565b610ed5565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612eea565b610ef5565b6040516103e39190612fd5565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061312c565b610fa3565b005b34801561042157600080fd5b5061043c60048036038101906104379190612d78565b611032565b6040516104499190612e7c565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190612d78565b611085565b6040516104869190612de6565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190612eea565b61109b565b6040516104c39190612e7c565b60405180910390f35b3480156104d857600080fd5b506104e1611183565b005b3480156104ef57600080fd5b506104f861120b565b6040516105059190612de6565b60405180910390f35b34801561051a57600080fd5b50610523611235565b6040516105309190612d20565b60405180910390f35b34801561054557600080fd5b5061054e6112c7565b60405161055b9190612d20565b60405180910390f35b61057e60048036038101906105799190612d78565b611355565b005b34801561058c57600080fd5b506105a760048036038101906105a291906131a1565b6115a0565b005b3480156105b557600080fd5b506105be611720565b6040516105cb9190612e7c565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613282565b61172a565b005b34801561060957600080fd5b50610612611786565b60405161061f9190612c6c565b60405180910390f35b34801561063457600080fd5b5061063d611799565b60405161064a9190612d20565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190612d78565b611827565b6040516106879190612d20565b60405180910390f35b34801561069c57600080fd5b506106a561194c565b6040516106b29190612e7c565b60405180910390f35b3480156106c757600080fd5b506106d0611952565b6040516106dd9190612d20565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613305565b6119e0565b60405161071a9190612c6c565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190612eea565b611a74565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088f575061088e82611b6b565b5b9050919050565b6060600180546108a590613374565b80601f01602080910402602001604051908101604052809291908181526020018280546108d190613374565b801561091e5780601f106108f35761010080835404028352916020019161091e565b820191906000526020600020905b81548152906001019060200180831161090157829003601f168201915b5050505050905090565b600061093382611bd5565b610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990613417565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b882611085565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906134a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a47611be2565b73ffffffffffffffffffffffffffffffffffffffff161480610a765750610a7581610a70611be2565b6119e0565b5b610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac9061353b565b60405180910390fd5b610ac0838383611bea565b505050565b60006001600054610ad6919061358a565b905090565b610ae6838383611c9c565b505050565b610af3611be2565b73ffffffffffffffffffffffffffffffffffffffff16610b1161120b565b73ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e9061360a565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000610b9e8361109b565b8210610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd69061369c565b60405180910390fd5b6000610be9610ac5565b905060008060005b83811015610d41576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ce357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3357868403610d2a578195505050505050610d7d565b83806001019450505b508080600101915050610bf1565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d749061372e565b60405180910390fd5b92915050565b610d8b611be2565b73ffffffffffffffffffffffffffffffffffffffff16610da961120b565b73ffffffffffffffffffffffffffffffffffffffff1614610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df69061360a565b60405180910390fd5b80600a8190555050565b610e11611be2565b73ffffffffffffffffffffffffffffffffffffffff16610e2f61120b565b73ffffffffffffffffffffffffffffffffffffffff1614610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c9061360a565b60405180910390fd5b610e8d61120b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed2573d6000803e3d6000fd5b50565b610ef08383836040518060200160405280600081525061172a565b505050565b60606000610f028361109b565b905060008167ffffffffffffffff811115610f2057610f1f613001565b5b604051908082528060200260200182016040528015610f4e5781602001602082028036833780820191505090505b50905060005b82811015610f9857610f668582610b93565b828281518110610f7957610f7861374e565b5b6020026020010181815250508080610f909061377d565b915050610f54565b508092505050919050565b610fab611be2565b73ffffffffffffffffffffffffffffffffffffffff16610fc961120b565b73ffffffffffffffffffffffffffffffffffffffff161461101f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110169061360a565b60405180910390fd5b80600c908161102e9190613971565b5050565b600061103c610ac5565b821061107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490613ab5565b60405180910390fd5b819050919050565b6000611090826121da565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613b47565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61118b611be2565b73ffffffffffffffffffffffffffffffffffffffff166111a961120b565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f69061360a565b60405180910390fd5b6112096000612374565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461124490613374565b80601f016020809104026020016040519081016040528092919081815260200182805461127090613374565b80156112bd5780601f10611292576101008083540402835291602001916112bd565b820191906000526020600020905b8154815290600101906020018083116112a057829003601f168201915b5050505050905090565b600c80546112d490613374565b80601f016020809104026020016040519081016040528092919081815260200182805461130090613374565b801561134d5780601f106113225761010080835404028352916020019161134d565b820191906000526020600020905b81548152906001019060200180831161133057829003601f168201915b505050505081565b600f60009054906101000a900460ff166113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90613bb3565b60405180910390fd5b600a8111156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613c45565b60405180910390fd5b600854816113f4610ac5565b6113fe9190613c65565b111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613d07565b60405180910390fd5b60008190506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361149b57600181611498919061358a565b90505b600a54816114a99190613d27565b3410156114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290613dcd565b60405180910390fd5b6114f5338361243a565b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115409190613c65565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160096000828254611595919061358a565b925050819055505050565b6115a8611be2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613e39565b60405180910390fd5b8060066000611622611be2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116cf611be2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117149190612c6c565b60405180910390a35050565b6000600954905090565b611735848484611c9c565b61174184848484612458565b611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790613ecb565b60405180910390fd5b50505050565b600f60009054906101000a900460ff1681565b600d80546117a690613374565b80601f01602080910402602001604051908101604052809291908181526020018280546117d290613374565b801561181f5780601f106117f45761010080835404028352916020019161181f565b820191906000526020600020905b81548152906001019060200180831161180257829003601f168201915b505050505081565b606061183282611bd5565b611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890613f5d565b60405180910390fd5b600061187b6125df565b9050600081511161191657600e805461189390613374565b80601f01602080910402602001604051908101604052809291908181526020018280546118bf90613374565b801561190c5780601f106118e15761010080835404028352916020019161190c565b820191906000526020600020905b8154815290600101906020018083116118ef57829003601f168201915b5050505050611944565b8061192084612671565b600d6040516020016119349392919061403c565b6040516020818303038152906040525b915050919050565b600a5481565b600e805461195f90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461198b90613374565b80156119d85780601f106119ad576101008083540402835291602001916119d8565b820191906000526020600020905b8154815290600101906020018083116119bb57829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a7c611be2565b73ffffffffffffffffffffffffffffffffffffffff16611a9a61120b565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae79061360a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906140df565b60405180910390fd5b611b6881612374565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ca7826121da565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cce611be2565b73ffffffffffffffffffffffffffffffffffffffff161480611d2a5750611cf3611be2565b73ffffffffffffffffffffffffffffffffffffffff16611d1284610928565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d465750611d458260000151611d40611be2565b6119e0565b5b905080611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90614171565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614203565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090614295565b60405180910390fd5b611e7685858560016127d1565b611e866000848460000151611bea565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361216a576120c981611bd5565b156121695782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d385858560016127d7565b5050505050565b6121e2612b7e565b6121eb82611bd5565b61222a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222190614327565b60405180910390fd5b60008290505b60008110612333576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461232457809250505061236f565b50808060019003915050612230565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612366906143b9565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124548282604051806020016040528060008152506127dd565b5050565b60006124798473ffffffffffffffffffffffffffffffffffffffff166127ef565b156125d2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124a2611be2565b8786866040518563ffffffff1660e01b81526004016124c4949392919061442e565b6020604051808303816000875af192505050801561250057506040513d601f19601f820116820180604052508101906124fd919061448f565b60015b612582573d8060008114612530576040519150601f19603f3d011682016040523d82523d6000602084013e612535565b606091505b50600081510361257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190613ecb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125d7565b600190505b949350505050565b6060600c80546125ee90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461261a90613374565b80156126675780601f1061263c57610100808354040283529160200191612667565b820191906000526020600020905b81548152906001019060200180831161264a57829003601f168201915b5050505050905090565b6060600082036126b8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127cc565b600082905060005b600082146126ea5780806126d39061377d565b915050600a826126e391906144eb565b91506126c0565b60008167ffffffffffffffff81111561270657612705613001565b5b6040519080825280601f01601f1916602001820160405280156127385781602001600182028036833780820191505090505b5090505b600085146127c557600182612751919061358a565b9150600a85612760919061451c565b603061276c9190613c65565b60f81b8183815181106127825761278161374e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127be91906144eb565b945061273c565b8093505050505b919050565b50505050565b50505050565b6127ea8383836001612802565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286e906145bf565b60405180910390fd5b600084036128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b190614651565b60405180910390fd5b6128c760008683876127d1565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b6157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b4c57612b0c6000888488612458565b612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4290613ecb565b60405180910390fd5b5b81806001019250508080600101915050612a95565b508060008190555050612b7760008683876127d7565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c0181612bcc565b8114612c0c57600080fd5b50565b600081359050612c1e81612bf8565b92915050565b600060208284031215612c3a57612c39612bc2565b5b6000612c4884828501612c0f565b91505092915050565b60008115159050919050565b612c6681612c51565b82525050565b6000602082019050612c816000830184612c5d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cc1578082015181840152602081019050612ca6565b83811115612cd0576000848401525b50505050565b6000601f19601f8301169050919050565b6000612cf282612c87565b612cfc8185612c92565b9350612d0c818560208601612ca3565b612d1581612cd6565b840191505092915050565b60006020820190508181036000830152612d3a8184612ce7565b905092915050565b6000819050919050565b612d5581612d42565b8114612d6057600080fd5b50565b600081359050612d7281612d4c565b92915050565b600060208284031215612d8e57612d8d612bc2565b5b6000612d9c84828501612d63565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dd082612da5565b9050919050565b612de081612dc5565b82525050565b6000602082019050612dfb6000830184612dd7565b92915050565b612e0a81612dc5565b8114612e1557600080fd5b50565b600081359050612e2781612e01565b92915050565b60008060408385031215612e4457612e43612bc2565b5b6000612e5285828601612e18565b9250506020612e6385828601612d63565b9150509250929050565b612e7681612d42565b82525050565b6000602082019050612e916000830184612e6d565b92915050565b600080600060608486031215612eb057612eaf612bc2565b5b6000612ebe86828701612e18565b9350506020612ecf86828701612e18565b9250506040612ee086828701612d63565b9150509250925092565b600060208284031215612f0057612eff612bc2565b5b6000612f0e84828501612e18565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f4c81612d42565b82525050565b6000612f5e8383612f43565b60208301905092915050565b6000602082019050919050565b6000612f8282612f17565b612f8c8185612f22565b9350612f9783612f33565b8060005b83811015612fc8578151612faf8882612f52565b9750612fba83612f6a565b925050600181019050612f9b565b5085935050505092915050565b60006020820190508181036000830152612fef8184612f77565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61303982612cd6565b810181811067ffffffffffffffff8211171561305857613057613001565b5b80604052505050565b600061306b612bb8565b90506130778282613030565b919050565b600067ffffffffffffffff82111561309757613096613001565b5b6130a082612cd6565b9050602081019050919050565b82818337600083830152505050565b60006130cf6130ca8461307c565b613061565b9050828152602081018484840111156130eb576130ea612ffc565b5b6130f68482856130ad565b509392505050565b600082601f83011261311357613112612ff7565b5b81356131238482602086016130bc565b91505092915050565b60006020828403121561314257613141612bc2565b5b600082013567ffffffffffffffff8111156131605761315f612bc7565b5b61316c848285016130fe565b91505092915050565b61317e81612c51565b811461318957600080fd5b50565b60008135905061319b81613175565b92915050565b600080604083850312156131b8576131b7612bc2565b5b60006131c685828601612e18565b92505060206131d78582860161318c565b9150509250929050565b600067ffffffffffffffff8211156131fc576131fb613001565b5b61320582612cd6565b9050602081019050919050565b6000613225613220846131e1565b613061565b90508281526020810184848401111561324157613240612ffc565b5b61324c8482856130ad565b509392505050565b600082601f83011261326957613268612ff7565b5b8135613279848260208601613212565b91505092915050565b6000806000806080858703121561329c5761329b612bc2565b5b60006132aa87828801612e18565b94505060206132bb87828801612e18565b93505060406132cc87828801612d63565b925050606085013567ffffffffffffffff8111156132ed576132ec612bc7565b5b6132f987828801613254565b91505092959194509250565b6000806040838503121561331c5761331b612bc2565b5b600061332a85828601612e18565b925050602061333b85828601612e18565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061338c57607f821691505b60208210810361339f5761339e613345565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613401602d83612c92565b915061340c826133a5565b604082019050919050565b60006020820190508181036000830152613430816133f4565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613493602283612c92565b915061349e82613437565b604082019050919050565b600060208201905081810360008301526134c281613486565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613525603983612c92565b9150613530826134c9565b604082019050919050565b6000602082019050818103600083015261355481613518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061359582612d42565b91506135a083612d42565b9250828210156135b3576135b261355b565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135f4602083612c92565b91506135ff826135be565b602082019050919050565b60006020820190508181036000830152613623816135e7565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613686602283612c92565b91506136918261362a565b604082019050919050565b600060208201905081810360008301526136b581613679565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613718602e83612c92565b9150613723826136bc565b604082019050919050565b600060208201905081810360008301526137478161370b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061378882612d42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137ba576137b961355b565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826137ea565b61383186836137ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061386e61386961386484612d42565b613849565b612d42565b9050919050565b6000819050919050565b61388883613853565b61389c61389482613875565b8484546137f7565b825550505050565b600090565b6138b16138a4565b6138bc81848461387f565b505050565b5b818110156138e0576138d56000826138a9565b6001810190506138c2565b5050565b601f821115613925576138f6816137c5565b6138ff846137da565b8101602085101561390e578190505b61392261391a856137da565b8301826138c1565b50505b505050565b600082821c905092915050565b60006139486000198460080261392a565b1980831691505092915050565b60006139618383613937565b9150826002028217905092915050565b61397a82612c87565b67ffffffffffffffff81111561399357613992613001565b5b61399d8254613374565b6139a88282856138e4565b600060209050601f8311600181146139db57600084156139c9578287015190505b6139d38582613955565b865550613a3b565b601f1984166139e9866137c5565b60005b82811015613a11578489015182556001820191506020850194506020810190506139ec565b86831015613a2e5784890151613a2a601f891682613937565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a9f602383612c92565b9150613aaa82613a43565b604082019050919050565b60006020820190508181036000830152613ace81613a92565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613b31602b83612c92565b9150613b3c82613ad5565b604082019050919050565b60006020820190508181036000830152613b6081613b24565b9050919050565b7f536f7272792c204d696e74696e67206973207061757365642e00000000000000600082015250565b6000613b9d601983612c92565b9150613ba882613b67565b602082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f536f7272792c20746865726520617265206f6e6c79203130206974656d73206160008201527f6c6c6f77656420666f722065616368206d696e74696e672e0000000000000000602082015250565b6000613c2f603883612c92565b9150613c3a82613bd3565b604082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b6000613c7082612d42565b9150613c7b83612d42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cb057613caf61355b565b5b828201905092915050565b7f536f7272792c205468657265206973206e6f206d6f7265206974656d732e0000600082015250565b6000613cf1601e83612c92565b9150613cfc82613cbb565b602082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b6000613d3282612d42565b9150613d3d83612d42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d7657613d7561355b565b5b828202905092915050565b7f4574686572206973206e6f7420656e6f7567682e000000000000000000000000600082015250565b6000613db7601483612c92565b9150613dc282613d81565b602082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613e23601a83612c92565b9150613e2e82613ded565b602082019050919050565b60006020820190508181036000830152613e5281613e16565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613eb5603383612c92565b9150613ec082613e59565b604082019050919050565b60006020820190508181036000830152613ee481613ea8565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000613f47603083612c92565b9150613f5282613eeb565b604082019050919050565b60006020820190508181036000830152613f7681613f3a565b9050919050565b600081905092915050565b6000613f9382612c87565b613f9d8185613f7d565b9350613fad818560208601612ca3565b80840191505092915050565b60008154613fc681613374565b613fd08186613f7d565b94506001821660008114613feb576001811461400057614033565b60ff1983168652811515820286019350614033565b614009856137c5565b60005b8381101561402b5781548189015260018201915060208101905061400c565b838801955050505b50505092915050565b60006140488286613f88565b91506140548285613f88565b91506140608284613fb9565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c9602683612c92565b91506140d48261406d565b604082019050919050565b600060208201905081810360008301526140f8816140bc565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061415b603283612c92565b9150614166826140ff565b604082019050919050565b6000602082019050818103600083015261418a8161414e565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006141ed602683612c92565b91506141f882614191565b604082019050919050565b6000602082019050818103600083015261421c816141e0565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061427f602583612c92565b915061428a82614223565b604082019050919050565b600060208201905081810360008301526142ae81614272565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614311602a83612c92565b915061431c826142b5565b604082019050919050565b6000602082019050818103600083015261434081614304565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006143a3602f83612c92565b91506143ae82614347565b604082019050919050565b600060208201905081810360008301526143d281614396565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614400826143d9565b61440a81856143e4565b935061441a818560208601612ca3565b61442381612cd6565b840191505092915050565b60006080820190506144436000830187612dd7565b6144506020830186612dd7565b61445d6040830185612e6d565b818103606083015261446f81846143f5565b905095945050505050565b60008151905061448981612bf8565b92915050565b6000602082840312156144a5576144a4612bc2565b5b60006144b38482850161447a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f682612d42565b915061450183612d42565b925082614511576145106144bc565b5b828204905092915050565b600061452782612d42565b915061453283612d42565b925082614542576145416144bc565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006145a9602183612c92565b91506145b48261454d565b604082019050919050565b600060208201905081810360008301526145d88161459c565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b600061463b602883612c92565b9150614646826145df565b604082019050919050565b6000602082019050818103600083015261466a8161462e565b905091905056fea26469706673582212205ee6ac389e12de9ed14e6500df23f0bccc7a59cd08300f02b909af177b716df864736f6c634300080f0033697066733a2f2f516d6537584633436557513150574b724b5470754e7848367051694c314668676345507a5378656e6535576d784c3f66696c656e616d653d68696464656e2e6a736f6e

Deployed Bytecode

0x6080604052600436106101d85760003560e01c806370a0823111610102578063b88d4fde11610095578063ca0dcf1611610064578063ca0dcf1614610690578063d8210482146106bb578063e985e9c5146106e6578063f2fde38b14610723576101d8565b8063b88d4fde146105d4578063be9a6555146105fd578063c668286214610628578063c87b56dd14610653576101d8565b80639e890335116100d15780639e89033514610539578063a0712d6814610564578063a22cb46514610580578063a95a91e1146105a9576101d8565b806370a082311461048f578063715018a6146104cc5780638da5cb5b146104e357806395d89b411461050e576101d8565b80632f745c591161017a578063438b630011610149578063438b6300146103af5780634c261247146103ec5780634f6ccce7146104155780636352211e14610452576101d8565b80632f745c591461031657806334fcf437146103535780633ccfd60b1461037c57806342842e0e14610386576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d65780632e84d90e146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c24565b61074c565b6040516102119190612c6c565b60405180910390f35b34801561022657600080fd5b5061022f610896565b60405161023c9190612d20565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612d78565b610928565b6040516102799190612de6565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612e2d565b6109ad565b005b3480156102b757600080fd5b506102c0610ac5565b6040516102cd9190612e7c565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612e97565b610adb565b005b34801561030b57600080fd5b50610314610aeb565b005b34801561032257600080fd5b5061033d60048036038101906103389190612e2d565b610b93565b60405161034a9190612e7c565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190612d78565b610d83565b005b610384610e09565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612e97565b610ed5565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612eea565b610ef5565b6040516103e39190612fd5565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061312c565b610fa3565b005b34801561042157600080fd5b5061043c60048036038101906104379190612d78565b611032565b6040516104499190612e7c565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190612d78565b611085565b6040516104869190612de6565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190612eea565b61109b565b6040516104c39190612e7c565b60405180910390f35b3480156104d857600080fd5b506104e1611183565b005b3480156104ef57600080fd5b506104f861120b565b6040516105059190612de6565b60405180910390f35b34801561051a57600080fd5b50610523611235565b6040516105309190612d20565b60405180910390f35b34801561054557600080fd5b5061054e6112c7565b60405161055b9190612d20565b60405180910390f35b61057e60048036038101906105799190612d78565b611355565b005b34801561058c57600080fd5b506105a760048036038101906105a291906131a1565b6115a0565b005b3480156105b557600080fd5b506105be611720565b6040516105cb9190612e7c565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613282565b61172a565b005b34801561060957600080fd5b50610612611786565b60405161061f9190612c6c565b60405180910390f35b34801561063457600080fd5b5061063d611799565b60405161064a9190612d20565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190612d78565b611827565b6040516106879190612d20565b60405180910390f35b34801561069c57600080fd5b506106a561194c565b6040516106b29190612e7c565b60405180910390f35b3480156106c757600080fd5b506106d0611952565b6040516106dd9190612d20565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613305565b6119e0565b60405161071a9190612c6c565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190612eea565b611a74565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088f575061088e82611b6b565b5b9050919050565b6060600180546108a590613374565b80601f01602080910402602001604051908101604052809291908181526020018280546108d190613374565b801561091e5780601f106108f35761010080835404028352916020019161091e565b820191906000526020600020905b81548152906001019060200180831161090157829003601f168201915b5050505050905090565b600061093382611bd5565b610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990613417565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b882611085565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906134a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a47611be2565b73ffffffffffffffffffffffffffffffffffffffff161480610a765750610a7581610a70611be2565b6119e0565b5b610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac9061353b565b60405180910390fd5b610ac0838383611bea565b505050565b60006001600054610ad6919061358a565b905090565b610ae6838383611c9c565b505050565b610af3611be2565b73ffffffffffffffffffffffffffffffffffffffff16610b1161120b565b73ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e9061360a565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000610b9e8361109b565b8210610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd69061369c565b60405180910390fd5b6000610be9610ac5565b905060008060005b83811015610d41576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ce357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3357868403610d2a578195505050505050610d7d565b83806001019450505b508080600101915050610bf1565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d749061372e565b60405180910390fd5b92915050565b610d8b611be2565b73ffffffffffffffffffffffffffffffffffffffff16610da961120b565b73ffffffffffffffffffffffffffffffffffffffff1614610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df69061360a565b60405180910390fd5b80600a8190555050565b610e11611be2565b73ffffffffffffffffffffffffffffffffffffffff16610e2f61120b565b73ffffffffffffffffffffffffffffffffffffffff1614610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c9061360a565b60405180910390fd5b610e8d61120b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed2573d6000803e3d6000fd5b50565b610ef08383836040518060200160405280600081525061172a565b505050565b60606000610f028361109b565b905060008167ffffffffffffffff811115610f2057610f1f613001565b5b604051908082528060200260200182016040528015610f4e5781602001602082028036833780820191505090505b50905060005b82811015610f9857610f668582610b93565b828281518110610f7957610f7861374e565b5b6020026020010181815250508080610f909061377d565b915050610f54565b508092505050919050565b610fab611be2565b73ffffffffffffffffffffffffffffffffffffffff16610fc961120b565b73ffffffffffffffffffffffffffffffffffffffff161461101f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110169061360a565b60405180910390fd5b80600c908161102e9190613971565b5050565b600061103c610ac5565b821061107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490613ab5565b60405180910390fd5b819050919050565b6000611090826121da565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613b47565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61118b611be2565b73ffffffffffffffffffffffffffffffffffffffff166111a961120b565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f69061360a565b60405180910390fd5b6112096000612374565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461124490613374565b80601f016020809104026020016040519081016040528092919081815260200182805461127090613374565b80156112bd5780601f10611292576101008083540402835291602001916112bd565b820191906000526020600020905b8154815290600101906020018083116112a057829003601f168201915b5050505050905090565b600c80546112d490613374565b80601f016020809104026020016040519081016040528092919081815260200182805461130090613374565b801561134d5780601f106113225761010080835404028352916020019161134d565b820191906000526020600020905b81548152906001019060200180831161133057829003601f168201915b505050505081565b600f60009054906101000a900460ff166113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90613bb3565b60405180910390fd5b600a8111156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613c45565b60405180910390fd5b600854816113f4610ac5565b6113fe9190613c65565b111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613d07565b60405180910390fd5b60008190506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361149b57600181611498919061358a565b90505b600a54816114a99190613d27565b3410156114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290613dcd565b60405180910390fd5b6114f5338361243a565b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115409190613c65565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160096000828254611595919061358a565b925050819055505050565b6115a8611be2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613e39565b60405180910390fd5b8060066000611622611be2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116cf611be2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117149190612c6c565b60405180910390a35050565b6000600954905090565b611735848484611c9c565b61174184848484612458565b611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790613ecb565b60405180910390fd5b50505050565b600f60009054906101000a900460ff1681565b600d80546117a690613374565b80601f01602080910402602001604051908101604052809291908181526020018280546117d290613374565b801561181f5780601f106117f45761010080835404028352916020019161181f565b820191906000526020600020905b81548152906001019060200180831161180257829003601f168201915b505050505081565b606061183282611bd5565b611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890613f5d565b60405180910390fd5b600061187b6125df565b9050600081511161191657600e805461189390613374565b80601f01602080910402602001604051908101604052809291908181526020018280546118bf90613374565b801561190c5780601f106118e15761010080835404028352916020019161190c565b820191906000526020600020905b8154815290600101906020018083116118ef57829003601f168201915b5050505050611944565b8061192084612671565b600d6040516020016119349392919061403c565b6040516020818303038152906040525b915050919050565b600a5481565b600e805461195f90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461198b90613374565b80156119d85780601f106119ad576101008083540402835291602001916119d8565b820191906000526020600020905b8154815290600101906020018083116119bb57829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a7c611be2565b73ffffffffffffffffffffffffffffffffffffffff16611a9a61120b565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae79061360a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906140df565b60405180910390fd5b611b6881612374565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ca7826121da565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cce611be2565b73ffffffffffffffffffffffffffffffffffffffff161480611d2a5750611cf3611be2565b73ffffffffffffffffffffffffffffffffffffffff16611d1284610928565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d465750611d458260000151611d40611be2565b6119e0565b5b905080611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90614171565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614203565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090614295565b60405180910390fd5b611e7685858560016127d1565b611e866000848460000151611bea565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361216a576120c981611bd5565b156121695782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d385858560016127d7565b5050505050565b6121e2612b7e565b6121eb82611bd5565b61222a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222190614327565b60405180910390fd5b60008290505b60008110612333576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461232457809250505061236f565b50808060019003915050612230565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612366906143b9565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124548282604051806020016040528060008152506127dd565b5050565b60006124798473ffffffffffffffffffffffffffffffffffffffff166127ef565b156125d2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124a2611be2565b8786866040518563ffffffff1660e01b81526004016124c4949392919061442e565b6020604051808303816000875af192505050801561250057506040513d601f19601f820116820180604052508101906124fd919061448f565b60015b612582573d8060008114612530576040519150601f19603f3d011682016040523d82523d6000602084013e612535565b606091505b50600081510361257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190613ecb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125d7565b600190505b949350505050565b6060600c80546125ee90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461261a90613374565b80156126675780601f1061263c57610100808354040283529160200191612667565b820191906000526020600020905b81548152906001019060200180831161264a57829003601f168201915b5050505050905090565b6060600082036126b8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127cc565b600082905060005b600082146126ea5780806126d39061377d565b915050600a826126e391906144eb565b91506126c0565b60008167ffffffffffffffff81111561270657612705613001565b5b6040519080825280601f01601f1916602001820160405280156127385781602001600182028036833780820191505090505b5090505b600085146127c557600182612751919061358a565b9150600a85612760919061451c565b603061276c9190613c65565b60f81b8183815181106127825761278161374e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127be91906144eb565b945061273c565b8093505050505b919050565b50505050565b50505050565b6127ea8383836001612802565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286e906145bf565b60405180910390fd5b600084036128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b190614651565b60405180910390fd5b6128c760008683876127d1565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b6157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b4c57612b0c6000888488612458565b612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4290613ecb565b60405180910390fd5b5b81806001019250508080600101915050612a95565b508060008190555050612b7760008683876127d7565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c0181612bcc565b8114612c0c57600080fd5b50565b600081359050612c1e81612bf8565b92915050565b600060208284031215612c3a57612c39612bc2565b5b6000612c4884828501612c0f565b91505092915050565b60008115159050919050565b612c6681612c51565b82525050565b6000602082019050612c816000830184612c5d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cc1578082015181840152602081019050612ca6565b83811115612cd0576000848401525b50505050565b6000601f19601f8301169050919050565b6000612cf282612c87565b612cfc8185612c92565b9350612d0c818560208601612ca3565b612d1581612cd6565b840191505092915050565b60006020820190508181036000830152612d3a8184612ce7565b905092915050565b6000819050919050565b612d5581612d42565b8114612d6057600080fd5b50565b600081359050612d7281612d4c565b92915050565b600060208284031215612d8e57612d8d612bc2565b5b6000612d9c84828501612d63565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dd082612da5565b9050919050565b612de081612dc5565b82525050565b6000602082019050612dfb6000830184612dd7565b92915050565b612e0a81612dc5565b8114612e1557600080fd5b50565b600081359050612e2781612e01565b92915050565b60008060408385031215612e4457612e43612bc2565b5b6000612e5285828601612e18565b9250506020612e6385828601612d63565b9150509250929050565b612e7681612d42565b82525050565b6000602082019050612e916000830184612e6d565b92915050565b600080600060608486031215612eb057612eaf612bc2565b5b6000612ebe86828701612e18565b9350506020612ecf86828701612e18565b9250506040612ee086828701612d63565b9150509250925092565b600060208284031215612f0057612eff612bc2565b5b6000612f0e84828501612e18565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f4c81612d42565b82525050565b6000612f5e8383612f43565b60208301905092915050565b6000602082019050919050565b6000612f8282612f17565b612f8c8185612f22565b9350612f9783612f33565b8060005b83811015612fc8578151612faf8882612f52565b9750612fba83612f6a565b925050600181019050612f9b565b5085935050505092915050565b60006020820190508181036000830152612fef8184612f77565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61303982612cd6565b810181811067ffffffffffffffff8211171561305857613057613001565b5b80604052505050565b600061306b612bb8565b90506130778282613030565b919050565b600067ffffffffffffffff82111561309757613096613001565b5b6130a082612cd6565b9050602081019050919050565b82818337600083830152505050565b60006130cf6130ca8461307c565b613061565b9050828152602081018484840111156130eb576130ea612ffc565b5b6130f68482856130ad565b509392505050565b600082601f83011261311357613112612ff7565b5b81356131238482602086016130bc565b91505092915050565b60006020828403121561314257613141612bc2565b5b600082013567ffffffffffffffff8111156131605761315f612bc7565b5b61316c848285016130fe565b91505092915050565b61317e81612c51565b811461318957600080fd5b50565b60008135905061319b81613175565b92915050565b600080604083850312156131b8576131b7612bc2565b5b60006131c685828601612e18565b92505060206131d78582860161318c565b9150509250929050565b600067ffffffffffffffff8211156131fc576131fb613001565b5b61320582612cd6565b9050602081019050919050565b6000613225613220846131e1565b613061565b90508281526020810184848401111561324157613240612ffc565b5b61324c8482856130ad565b509392505050565b600082601f83011261326957613268612ff7565b5b8135613279848260208601613212565b91505092915050565b6000806000806080858703121561329c5761329b612bc2565b5b60006132aa87828801612e18565b94505060206132bb87828801612e18565b93505060406132cc87828801612d63565b925050606085013567ffffffffffffffff8111156132ed576132ec612bc7565b5b6132f987828801613254565b91505092959194509250565b6000806040838503121561331c5761331b612bc2565b5b600061332a85828601612e18565b925050602061333b85828601612e18565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061338c57607f821691505b60208210810361339f5761339e613345565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613401602d83612c92565b915061340c826133a5565b604082019050919050565b60006020820190508181036000830152613430816133f4565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613493602283612c92565b915061349e82613437565b604082019050919050565b600060208201905081810360008301526134c281613486565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613525603983612c92565b9150613530826134c9565b604082019050919050565b6000602082019050818103600083015261355481613518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061359582612d42565b91506135a083612d42565b9250828210156135b3576135b261355b565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135f4602083612c92565b91506135ff826135be565b602082019050919050565b60006020820190508181036000830152613623816135e7565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613686602283612c92565b91506136918261362a565b604082019050919050565b600060208201905081810360008301526136b581613679565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613718602e83612c92565b9150613723826136bc565b604082019050919050565b600060208201905081810360008301526137478161370b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061378882612d42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137ba576137b961355b565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826137ea565b61383186836137ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061386e61386961386484612d42565b613849565b612d42565b9050919050565b6000819050919050565b61388883613853565b61389c61389482613875565b8484546137f7565b825550505050565b600090565b6138b16138a4565b6138bc81848461387f565b505050565b5b818110156138e0576138d56000826138a9565b6001810190506138c2565b5050565b601f821115613925576138f6816137c5565b6138ff846137da565b8101602085101561390e578190505b61392261391a856137da565b8301826138c1565b50505b505050565b600082821c905092915050565b60006139486000198460080261392a565b1980831691505092915050565b60006139618383613937565b9150826002028217905092915050565b61397a82612c87565b67ffffffffffffffff81111561399357613992613001565b5b61399d8254613374565b6139a88282856138e4565b600060209050601f8311600181146139db57600084156139c9578287015190505b6139d38582613955565b865550613a3b565b601f1984166139e9866137c5565b60005b82811015613a11578489015182556001820191506020850194506020810190506139ec565b86831015613a2e5784890151613a2a601f891682613937565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a9f602383612c92565b9150613aaa82613a43565b604082019050919050565b60006020820190508181036000830152613ace81613a92565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613b31602b83612c92565b9150613b3c82613ad5565b604082019050919050565b60006020820190508181036000830152613b6081613b24565b9050919050565b7f536f7272792c204d696e74696e67206973207061757365642e00000000000000600082015250565b6000613b9d601983612c92565b9150613ba882613b67565b602082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f536f7272792c20746865726520617265206f6e6c79203130206974656d73206160008201527f6c6c6f77656420666f722065616368206d696e74696e672e0000000000000000602082015250565b6000613c2f603883612c92565b9150613c3a82613bd3565b604082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b6000613c7082612d42565b9150613c7b83612d42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cb057613caf61355b565b5b828201905092915050565b7f536f7272792c205468657265206973206e6f206d6f7265206974656d732e0000600082015250565b6000613cf1601e83612c92565b9150613cfc82613cbb565b602082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b6000613d3282612d42565b9150613d3d83612d42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d7657613d7561355b565b5b828202905092915050565b7f4574686572206973206e6f7420656e6f7567682e000000000000000000000000600082015250565b6000613db7601483612c92565b9150613dc282613d81565b602082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613e23601a83612c92565b9150613e2e82613ded565b602082019050919050565b60006020820190508181036000830152613e5281613e16565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613eb5603383612c92565b9150613ec082613e59565b604082019050919050565b60006020820190508181036000830152613ee481613ea8565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000613f47603083612c92565b9150613f5282613eeb565b604082019050919050565b60006020820190508181036000830152613f7681613f3a565b9050919050565b600081905092915050565b6000613f9382612c87565b613f9d8185613f7d565b9350613fad818560208601612ca3565b80840191505092915050565b60008154613fc681613374565b613fd08186613f7d565b94506001821660008114613feb576001811461400057614033565b60ff1983168652811515820286019350614033565b614009856137c5565b60005b8381101561402b5781548189015260018201915060208101905061400c565b838801955050505b50505092915050565b60006140488286613f88565b91506140548285613f88565b91506140608284613fb9565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c9602683612c92565b91506140d48261406d565b604082019050919050565b600060208201905081810360008301526140f8816140bc565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061415b603283612c92565b9150614166826140ff565b604082019050919050565b6000602082019050818103600083015261418a8161414e565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006141ed602683612c92565b91506141f882614191565b604082019050919050565b6000602082019050818103600083015261421c816141e0565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061427f602583612c92565b915061428a82614223565b604082019050919050565b600060208201905081810360008301526142ae81614272565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614311602a83612c92565b915061431c826142b5565b604082019050919050565b6000602082019050818103600083015261434081614304565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006143a3602f83612c92565b91506143ae82614347565b604082019050919050565b600060208201905081810360008301526143d281614396565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614400826143d9565b61440a81856143e4565b935061441a818560208601612ca3565b61442381612cd6565b840191505092915050565b60006080820190506144436000830187612dd7565b6144506020830186612dd7565b61445d6040830185612e6d565b818103606083015261446f81846143f5565b905095945050505050565b60008151905061448981612bf8565b92915050565b6000602082840312156144a5576144a4612bc2565b5b60006144b38482850161447a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f682612d42565b915061450183612d42565b925082614511576145106144bc565b5b828204905092915050565b600061452782612d42565b915061453283612d42565b925082614542576145416144bc565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006145a9602183612c92565b91506145b48261454d565b604082019050919050565b600060208201905081810360008301526145d88161459c565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b600061463b602883612c92565b9150614646826145df565b604082019050919050565b6000602082019050818103600083015261466a8161462e565b905091905056fea26469706673582212205ee6ac389e12de9ed14e6500df23f0bccc7a59cd08300f02b909af177b716df864736f6c634300080f0033

Deployed Bytecode Sourcemap

37774:2705:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24650:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26536:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28098:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27619:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22905:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28974:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38627:78;;;;;;;;;;;;;:::i;:::-;;23571:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39495:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38394:114;;;:::i;:::-;;29207:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39597:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38308:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23084:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26345:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25086:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4395:94;;;;;;;;;;;;;:::i;:::-;;3744:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26705:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37967:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38815:672;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28384:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38713:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29455:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38158:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38001:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39991:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37888:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38045:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28743:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4644:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24650:372;24752:4;24804:25;24789:40;;;:11;:40;;;;:105;;;;24861:33;24846:48;;;:11;:48;;;;24789:105;:172;;;;24926:35;24911:50;;;:11;:50;;;;24789:172;:225;;;;24978:36;25002:11;24978:23;:36::i;:::-;24789:225;24769:245;;24650:372;;;:::o;26536:100::-;26590:13;26623:5;26616:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26536:100;:::o;28098:214::-;28166:7;28194:16;28202:7;28194;:16::i;:::-;28186:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28280:15;:24;28296:7;28280:24;;;;;;;;;;;;;;;;;;;;;28273:31;;28098:214;;;:::o;27619:413::-;27692:13;27708:24;27724:7;27708:15;:24::i;:::-;27692:40;;27757:5;27751:11;;:2;:11;;;27743:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27852:5;27836:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27861:37;27878:5;27885:12;:10;:12::i;:::-;27861:16;:37::i;:::-;27836:62;27814:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27996:28;28005:2;28009:7;28018:5;27996:8;:28::i;:::-;27681:351;27619:413;;:::o;22905:102::-;22958:7;22998:1;22985:12;;:14;;;;:::i;:::-;22978:21;;22905:102;:::o;28974:162::-;29100:28;29110:4;29116:2;29120:7;29100:9;:28::i;:::-;28974:162;;;:::o;38627:78::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38692:5:::1;;;;;;;;;;;38691:6;38683:5;;:14;;;;;;;;;;;;;;;;;;38627:78::o:0;23571:1007::-;23660:7;23696:16;23706:5;23696:9;:16::i;:::-;23688:5;:24;23680:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23762:22;23787:13;:11;:13::i;:::-;23762:38;;23811:19;23841:25;24030:9;24025:466;24045:14;24041:1;:18;24025:466;;;24085:31;24119:11;:14;24131:1;24119:14;;;;;;;;;;;24085:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24182:1;24156:28;;:9;:14;;;:28;;;24152:111;;24229:9;:14;;;24209:34;;24152:111;24306:5;24285:26;;:17;:26;;;24281:195;;24355:5;24340:11;:20;24336:85;;24396:1;24389:8;;;;;;;;;24336:85;24443:13;;;;;;;24281:195;24066:425;24061:3;;;;;;;24025:466;;;;24514:56;;;;;;;;;;:::i;:::-;;;;;;;;23571:1007;;;;;:::o;39495:90::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39570:7:::1;39559:8;:18;;;;39495:90:::0;:::o;38394:114::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38460:7:::1;:5;:7::i;:::-;38452:25;;:48;38478:21;38452:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38394:114::o:0;29207:177::-;29337:39;29354:4;29360:2;29364:7;29337:39;;;;;;;;;;;;:16;:39::i;:::-;29207:177;;;:::o;39597:386::-;39684:16;39718:23;39744:17;39754:6;39744:9;:17::i;:::-;39718:43;;39772:25;39814:15;39800:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39772:58;;39846:9;39841:109;39861:15;39857:1;:19;39841:109;;;39908:30;39928:6;39936:1;39908:19;:30::i;:::-;39894:8;39903:1;39894:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;39878:3;;;;;:::i;:::-;;;;39841:109;;;;39967:8;39960:15;;;;39597:386;;;:::o;38308:78::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38378:3:::1;38367:8;:14;;;;;;:::i;:::-;;38308:78:::0;:::o;23084:187::-;23151:7;23187:13;:11;:13::i;:::-;23179:5;:21;23171:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23258:5;23251:12;;23084:187;;;:::o;26345:124::-;26409:7;26436:20;26448:7;26436:11;:20::i;:::-;:25;;;26429:32;;26345:124;;;:::o;25086:221::-;25150:7;25195:1;25178:19;;:5;:19;;;25170:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25271:12;:19;25284:5;25271:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25263:36;;25256:43;;25086:221;;;:::o;4395:94::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4460:21:::1;4478:1;4460:9;:21::i;:::-;4395:94::o:0;3744:87::-;3790:7;3817:6;;;;;;;;;;;3810:13;;3744:87;:::o;26705:104::-;26761:13;26794:7;26787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26705:104;:::o;37967:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38815:672::-;38881:5;;;;;;;;;;;38873:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38945:2;38935:8;:12;;38927:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;39058:10;;39045:8;39029:13;:11;:13::i;:::-;:24;;;;:::i;:::-;39028:40;;39020:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39124:14;39141:8;39124:25;;39194:1;39165:13;:25;39179:10;39165:25;;;;;;;;;;;;;;;;:30;39162:86;;39235:1;39223:9;:13;;;;:::i;:::-;39211:25;;39162:86;39293:8;;39281:9;:20;;;;:::i;:::-;39268:9;:33;;39260:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39341:31;39351:10;39363:8;39341:9;:31::i;:::-;39439:8;39411:13;:25;39425:10;39411:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;39383:13;:25;39397:10;39383:25;;;;;;;;;;;;;;;:64;;;;39471:8;39458:9;;:21;;;;;;;:::i;:::-;;;;;;;;38862:625;38815:672;:::o;28384:288::-;28491:12;:10;:12::i;:::-;28479:24;;:8;:24;;;28471:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28592:8;28547:18;:32;28566:12;:10;:12::i;:::-;28547:32;;;;;;;;;;;;;;;:42;28580:8;28547:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28645:8;28616:48;;28631:12;:10;:12::i;:::-;28616:48;;;28655:8;28616:48;;;;;;:::i;:::-;;;;;;;;28384:288;;:::o;38713:90::-;38759:7;38786:9;;38779:16;;38713:90;:::o;29455:355::-;29614:28;29624:4;29630:2;29634:7;29614:9;:28::i;:::-;29675:48;29698:4;29704:2;29708:7;29717:5;29675:22;:48::i;:::-;29653:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29455:355;;;;:::o;38158:24::-;;;;;;;;;;;;;:::o;38001:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39991:483::-;40089:13;40138:16;40146:7;40138;:16::i;:::-;40120:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;40249:28;40280:10;:8;:10::i;:::-;40249:41;;40339:1;40314:14;40308:28;:32;:158;;40454:12;40308:158;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40380:14;40396:25;40413:7;40396:16;:25::i;:::-;40423:13;40363:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40308:158;40301:165;;;39991:483;;;:::o;37888:37::-;;;;:::o;38045:105::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28743:164::-;28840:4;28864:18;:25;28883:5;28864:25;;;;;;;;;;;;;;;:35;28890:8;28864:35;;;;;;;;;;;;;;;;;;;;;;;;;28857:42;;28743:164;;;;:::o;4644:192::-;3975:12;:10;:12::i;:::-;3964:23;;:7;:5;:7::i;:::-;:23;;;3956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4753:1:::1;4733:22;;:8;:22;;::::0;4725:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4809:19;4819:8;4809:9;:19::i;:::-;4644:192:::0;:::o;15200:157::-;15285:4;15324:25;15309:40;;;:11;:40;;;;15302:47;;15200:157;;;:::o;30065:111::-;30122:4;30156:12;;30146:7;:22;30139:29;;30065:111;;;:::o;2602:98::-;2655:7;2682:10;2675:17;;2602:98;:::o;34985:196::-;35127:2;35100:15;:24;35116:7;35100:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35165:7;35161:2;35145:28;;35154:5;35145:28;;;;;;;;;;;;34985:196;;;:::o;32865:2002::-;32980:35;33018:20;33030:7;33018:11;:20::i;:::-;32980:58;;33051:22;33093:13;:18;;;33077:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33152:12;:10;:12::i;:::-;33128:36;;:20;33140:7;33128:11;:20::i;:::-;:36;;;33077:87;:154;;;;33181:50;33198:13;:18;;;33218:12;:10;:12::i;:::-;33181:16;:50::i;:::-;33077:154;33051:181;;33253:17;33245:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33368:4;33346:26;;:13;:18;;;:26;;;33338:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33448:1;33434:16;;:2;:16;;;33426:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33505:43;33527:4;33533:2;33537:7;33546:1;33505:21;:43::i;:::-;33613:49;33630:1;33634:7;33643:13;:18;;;33613:8;:49::i;:::-;33988:1;33958:12;:18;33971:4;33958:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34032:1;34004:12;:16;34017:2;34004:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34078:2;34050:11;:20;34062:7;34050:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34140:15;34095:11;:20;34107:7;34095:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34408:19;34440:1;34430:7;:11;34408:33;;34501:1;34460:43;;:11;:24;34472:11;34460:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34456:295;;34528:20;34536:11;34528:7;:20::i;:::-;34524:212;;;34605:13;:18;;;34573:11;:24;34585:11;34573:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34688:13;:28;;;34646:11;:24;34658:11;34646:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34524:212;34456:295;33933:829;34798:7;34794:2;34779:27;;34788:4;34779:27;;;;;;;;;;;;34817:42;34838:4;34844:2;34848:7;34857:1;34817:20;:42::i;:::-;32969:1898;;32865:2002;;;:::o;25746:537::-;25807:21;;:::i;:::-;25849:16;25857:7;25849;:16::i;:::-;25841:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25955:12;25970:7;25955:22;;25950:245;25987:1;25979:4;:9;25950:245;;26017:31;26051:11;:17;26063:4;26051:17;;;;;;;;;;;26017:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26117:1;26091:28;;:9;:14;;;:28;;;26087:93;;26151:9;26144:16;;;;;;26087:93;25998:197;25990:6;;;;;;;;25950:245;;;;26218:57;;;;;;;;;;:::i;:::-;;;;;;;;25746:537;;;;:::o;4844:173::-;4900:16;4919:6;;;;;;;;;;;4900:25;;4945:8;4936:6;;:17;;;;;;;;;;;;;;;;;;5000:8;4969:40;;4990:8;4969:40;;;;;;;;;;;;4889:128;4844:173;:::o;30184:104::-;30253:27;30263:2;30267:8;30253:27;;;;;;;;;;;;:9;:27::i;:::-;30184:104;;:::o;35746:804::-;35901:4;35922:15;:2;:13;;;:15::i;:::-;35918:625;;;35974:2;35958:36;;;35995:12;:10;:12::i;:::-;36009:4;36015:7;36024:5;35958:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35954:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36221:1;36204:6;:13;:18;36200:273;;36247:61;;;;;;;;;;:::i;:::-;;;;;;;;36200:273;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35954:534;36091:45;;;36081:55;;;:6;:55;;;;36074:62;;;;;35918:625;36527:4;36520:11;;35746:804;;;;;;;:::o;38516:101::-;38568:13;38601:8;38594:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38516:101;:::o;287:723::-;343:13;573:1;564:5;:10;560:53;;591:10;;;;;;;;;;;;;;;;;;;;;560:53;623:12;638:5;623:20;;654:14;679:78;694:1;686:4;:9;679:78;;712:8;;;;;:::i;:::-;;;;743:2;735:10;;;;;:::i;:::-;;;679:78;;;767:19;799:6;789:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;767:39;;817:154;833:1;824:5;:10;817:154;;861:1;851:11;;;;;:::i;:::-;;;928:2;920:5;:10;;;;:::i;:::-;907:2;:24;;;;:::i;:::-;894:39;;877:6;884;877:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;957:2;948:11;;;;;:::i;:::-;;;817:154;;;995:6;981:21;;;;;287:723;;;;:::o;37038:159::-;;;;;:::o;37609:158::-;;;;;:::o;30651:163::-;30774:32;30780:2;30784:8;30794:5;30801:4;30774:5;:32::i;:::-;30651:163;;;:::o;5721:387::-;5781:4;5989:12;6056:7;6044:20;6036:28;;6099:1;6092:4;:8;6085:15;;;5721:387;;;:::o;31073:1538::-;31212:20;31235:12;;31212:35;;31280:1;31266:16;;:2;:16;;;31258:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31351:1;31339:8;:13;31331:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31410:61;31440:1;31444:2;31448:12;31462:8;31410:21;:61::i;:::-;31785:8;31749:12;:16;31762:2;31749:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31850:8;31809:12;:16;31822:2;31809:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31909:2;31876:11;:25;31888:12;31876:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;31976:15;31926:11;:25;31938:12;31926:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32009:20;32032:12;32009:35;;32066:9;32061:415;32081:8;32077:1;:12;32061:415;;;32145:12;32141:2;32120:38;;32137:1;32120:38;;;;;;;;;;;;32181:4;32177:249;;;32244:59;32275:1;32279:2;32283:12;32297:5;32244:22;:59::i;:::-;32210:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32177:249;32446:14;;;;;;;32091:3;;;;;;;32061:415;;;;32507:12;32492;:27;;;;31724:807;32543:60;32572:1;32576:2;32580:12;32594:8;32543:20;:60::i;:::-;31201:1410;31073:1538;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:114::-;6317:6;6351:5;6345:12;6335:22;;6250:114;;;:::o;6370:184::-;6469:11;6503:6;6498:3;6491:19;6543:4;6538:3;6534:14;6519:29;;6370:184;;;;:::o;6560:132::-;6627:4;6650:3;6642:11;;6680:4;6675:3;6671:14;6663:22;;6560:132;;;:::o;6698:108::-;6775:24;6793:5;6775:24;:::i;:::-;6770:3;6763:37;6698:108;;:::o;6812:179::-;6881:10;6902:46;6944:3;6936:6;6902:46;:::i;:::-;6980:4;6975:3;6971:14;6957:28;;6812:179;;;;:::o;6997:113::-;7067:4;7099;7094:3;7090:14;7082:22;;6997:113;;;:::o;7146:732::-;7265:3;7294:54;7342:5;7294:54;:::i;:::-;7364:86;7443:6;7438:3;7364:86;:::i;:::-;7357:93;;7474:56;7524:5;7474:56;:::i;:::-;7553:7;7584:1;7569:284;7594:6;7591:1;7588:13;7569:284;;;7670:6;7664:13;7697:63;7756:3;7741:13;7697:63;:::i;:::-;7690:70;;7783:60;7836:6;7783:60;:::i;:::-;7773:70;;7629:224;7616:1;7613;7609:9;7604:14;;7569:284;;;7573:14;7869:3;7862:10;;7270:608;;;7146:732;;;;:::o;7884:373::-;8027:4;8065:2;8054:9;8050:18;8042:26;;8114:9;8108:4;8104:20;8100:1;8089:9;8085:17;8078:47;8142:108;8245:4;8236:6;8142:108;:::i;:::-;8134:116;;7884:373;;;;:::o;8263:117::-;8372:1;8369;8362:12;8386:117;8495:1;8492;8485:12;8509:180;8557:77;8554:1;8547:88;8654:4;8651:1;8644:15;8678:4;8675:1;8668:15;8695:281;8778:27;8800:4;8778:27;:::i;:::-;8770:6;8766:40;8908:6;8896:10;8893:22;8872:18;8860:10;8857:34;8854:62;8851:88;;;8919:18;;:::i;:::-;8851:88;8959:10;8955:2;8948:22;8738:238;8695:281;;:::o;8982:129::-;9016:6;9043:20;;:::i;:::-;9033:30;;9072:33;9100:4;9092:6;9072:33;:::i;:::-;8982:129;;;:::o;9117:308::-;9179:4;9269:18;9261:6;9258:30;9255:56;;;9291:18;;:::i;:::-;9255:56;9329:29;9351:6;9329:29;:::i;:::-;9321:37;;9413:4;9407;9403:15;9395:23;;9117:308;;;:::o;9431:154::-;9515:6;9510:3;9505;9492:30;9577:1;9568:6;9563:3;9559:16;9552:27;9431:154;;;:::o;9591:412::-;9669:5;9694:66;9710:49;9752:6;9710:49;:::i;:::-;9694:66;:::i;:::-;9685:75;;9783:6;9776:5;9769:21;9821:4;9814:5;9810:16;9859:3;9850:6;9845:3;9841:16;9838:25;9835:112;;;9866:79;;:::i;:::-;9835:112;9956:41;9990:6;9985:3;9980;9956:41;:::i;:::-;9675:328;9591:412;;;;;:::o;10023:340::-;10079:5;10128:3;10121:4;10113:6;10109:17;10105:27;10095:122;;10136:79;;:::i;:::-;10095:122;10253:6;10240:20;10278:79;10353:3;10345:6;10338:4;10330:6;10326:17;10278:79;:::i;:::-;10269:88;;10085:278;10023:340;;;;:::o;10369:509::-;10438:6;10487:2;10475:9;10466:7;10462:23;10458:32;10455:119;;;10493:79;;:::i;:::-;10455:119;10641:1;10630:9;10626:17;10613:31;10671:18;10663:6;10660:30;10657:117;;;10693:79;;:::i;:::-;10657:117;10798:63;10853:7;10844:6;10833:9;10829:22;10798:63;:::i;:::-;10788:73;;10584:287;10369:509;;;;:::o;10884:116::-;10954:21;10969:5;10954:21;:::i;:::-;10947:5;10944:32;10934:60;;10990:1;10987;10980:12;10934:60;10884:116;:::o;11006:133::-;11049:5;11087:6;11074:20;11065:29;;11103:30;11127:5;11103:30;:::i;:::-;11006:133;;;;:::o;11145:468::-;11210:6;11218;11267:2;11255:9;11246:7;11242:23;11238:32;11235:119;;;11273:79;;:::i;:::-;11235:119;11393:1;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11364:117;11520:2;11546:50;11588:7;11579:6;11568:9;11564:22;11546:50;:::i;:::-;11536:60;;11491:115;11145:468;;;;;:::o;11619:307::-;11680:4;11770:18;11762:6;11759:30;11756:56;;;11792:18;;:::i;:::-;11756:56;11830:29;11852:6;11830:29;:::i;:::-;11822:37;;11914:4;11908;11904:15;11896:23;;11619:307;;;:::o;11932:410::-;12009:5;12034:65;12050:48;12091:6;12050:48;:::i;:::-;12034:65;:::i;:::-;12025:74;;12122:6;12115:5;12108:21;12160:4;12153:5;12149:16;12198:3;12189:6;12184:3;12180:16;12177:25;12174:112;;;12205:79;;:::i;:::-;12174:112;12295:41;12329:6;12324:3;12319;12295:41;:::i;:::-;12015:327;11932:410;;;;;:::o;12361:338::-;12416:5;12465:3;12458:4;12450:6;12446:17;12442:27;12432:122;;12473:79;;:::i;:::-;12432:122;12590:6;12577:20;12615:78;12689:3;12681:6;12674:4;12666:6;12662:17;12615:78;:::i;:::-;12606:87;;12422:277;12361:338;;;;:::o;12705:943::-;12800:6;12808;12816;12824;12873:3;12861:9;12852:7;12848:23;12844:33;12841:120;;;12880:79;;:::i;:::-;12841:120;13000:1;13025:53;13070:7;13061:6;13050:9;13046:22;13025:53;:::i;:::-;13015:63;;12971:117;13127:2;13153:53;13198:7;13189:6;13178:9;13174:22;13153:53;:::i;:::-;13143:63;;13098:118;13255:2;13281:53;13326:7;13317:6;13306:9;13302:22;13281:53;:::i;:::-;13271:63;;13226:118;13411:2;13400:9;13396:18;13383:32;13442:18;13434:6;13431:30;13428:117;;;13464:79;;:::i;:::-;13428:117;13569:62;13623:7;13614:6;13603:9;13599:22;13569:62;:::i;:::-;13559:72;;13354:287;12705:943;;;;;;;:::o;13654:474::-;13722:6;13730;13779:2;13767:9;13758:7;13754:23;13750:32;13747:119;;;13785:79;;:::i;:::-;13747:119;13905:1;13930:53;13975:7;13966:6;13955:9;13951:22;13930:53;:::i;:::-;13920:63;;13876:117;14032:2;14058:53;14103:7;14094:6;14083:9;14079:22;14058:53;:::i;:::-;14048:63;;14003:118;13654:474;;;;;:::o;14134:180::-;14182:77;14179:1;14172:88;14279:4;14276:1;14269:15;14303:4;14300:1;14293:15;14320:320;14364:6;14401:1;14395:4;14391:12;14381:22;;14448:1;14442:4;14438:12;14469:18;14459:81;;14525:4;14517:6;14513:17;14503:27;;14459:81;14587:2;14579:6;14576:14;14556:18;14553:38;14550:84;;14606:18;;:::i;:::-;14550:84;14371:269;14320:320;;;:::o;14646:232::-;14786:34;14782:1;14774:6;14770:14;14763:58;14855:15;14850:2;14842:6;14838:15;14831:40;14646:232;:::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;;14884:366;;;:::o;15256:419::-;15422:4;15460:2;15449:9;15445:18;15437:26;;15509:9;15503:4;15499:20;15495:1;15484:9;15480:17;15473:47;15537:131;15663:4;15537:131;:::i;:::-;15529:139;;15256:419;;;:::o;15681:221::-;15821:34;15817:1;15809:6;15805:14;15798:58;15890:4;15885:2;15877:6;15873:15;15866:29;15681:221;:::o;15908:366::-;16050:3;16071:67;16135:2;16130:3;16071:67;:::i;:::-;16064:74;;16147:93;16236:3;16147:93;:::i;:::-;16265:2;16260:3;16256:12;16249:19;;15908:366;;;:::o;16280:419::-;16446:4;16484:2;16473:9;16469:18;16461:26;;16533:9;16527:4;16523:20;16519:1;16508:9;16504:17;16497:47;16561:131;16687:4;16561:131;:::i;:::-;16553:139;;16280:419;;;:::o;16705:244::-;16845:34;16841:1;16833:6;16829:14;16822:58;16914:27;16909:2;16901:6;16897:15;16890:52;16705:244;:::o;16955:366::-;17097:3;17118:67;17182:2;17177:3;17118:67;:::i;:::-;17111:74;;17194:93;17283:3;17194:93;:::i;:::-;17312:2;17307:3;17303:12;17296:19;;16955:366;;;:::o;17327:419::-;17493:4;17531:2;17520:9;17516:18;17508:26;;17580:9;17574:4;17570:20;17566:1;17555:9;17551:17;17544:47;17608:131;17734:4;17608:131;:::i;:::-;17600:139;;17327:419;;;:::o;17752:180::-;17800:77;17797:1;17790:88;17897:4;17894:1;17887:15;17921:4;17918:1;17911:15;17938:191;17978:4;17998:20;18016:1;17998:20;:::i;:::-;17993:25;;18032:20;18050:1;18032:20;:::i;:::-;18027:25;;18071:1;18068;18065:8;18062:34;;;18076:18;;:::i;:::-;18062:34;18121:1;18118;18114:9;18106:17;;17938:191;;;;:::o;18135:182::-;18275:34;18271:1;18263:6;18259:14;18252:58;18135:182;:::o;18323:366::-;18465:3;18486:67;18550:2;18545:3;18486:67;:::i;:::-;18479:74;;18562:93;18651:3;18562:93;:::i;:::-;18680:2;18675:3;18671:12;18664:19;;18323:366;;;:::o;18695:419::-;18861:4;18899:2;18888:9;18884:18;18876:26;;18948:9;18942:4;18938:20;18934:1;18923:9;18919:17;18912:47;18976:131;19102:4;18976:131;:::i;:::-;18968:139;;18695:419;;;:::o;19120:221::-;19260:34;19256:1;19248:6;19244:14;19237:58;19329:4;19324:2;19316:6;19312:15;19305:29;19120:221;:::o;19347:366::-;19489:3;19510:67;19574:2;19569:3;19510:67;:::i;:::-;19503:74;;19586:93;19675:3;19586:93;:::i;:::-;19704:2;19699:3;19695:12;19688:19;;19347:366;;;:::o;19719:419::-;19885:4;19923:2;19912:9;19908:18;19900:26;;19972:9;19966:4;19962:20;19958:1;19947:9;19943:17;19936:47;20000:131;20126:4;20000:131;:::i;:::-;19992:139;;19719:419;;;:::o;20144:233::-;20284:34;20280:1;20272:6;20268:14;20261:58;20353:16;20348:2;20340:6;20336:15;20329:41;20144:233;:::o;20383:366::-;20525:3;20546:67;20610:2;20605:3;20546:67;:::i;:::-;20539:74;;20622:93;20711:3;20622:93;:::i;:::-;20740:2;20735:3;20731:12;20724:19;;20383:366;;;:::o;20755:419::-;20921:4;20959:2;20948:9;20944:18;20936:26;;21008:9;21002:4;20998:20;20994:1;20983:9;20979:17;20972:47;21036:131;21162:4;21036:131;:::i;:::-;21028:139;;20755:419;;;:::o;21180:180::-;21228:77;21225:1;21218:88;21325:4;21322:1;21315:15;21349:4;21346:1;21339:15;21366:233;21405:3;21428:24;21446:5;21428:24;:::i;:::-;21419:33;;21474:66;21467:5;21464:77;21461:103;;21544:18;;:::i;:::-;21461:103;21591:1;21584:5;21580:13;21573:20;;21366:233;;;:::o;21605:141::-;21654:4;21677:3;21669:11;;21700:3;21697:1;21690:14;21734:4;21731:1;21721:18;21713:26;;21605:141;;;:::o;21752:93::-;21789:6;21836:2;21831;21824:5;21820:14;21816:23;21806:33;;21752:93;;;:::o;21851:107::-;21895:8;21945:5;21939:4;21935:16;21914:37;;21851:107;;;;:::o;21964:393::-;22033:6;22083:1;22071:10;22067:18;22106:97;22136:66;22125:9;22106:97;:::i;:::-;22224:39;22254:8;22243:9;22224:39;:::i;:::-;22212:51;;22296:4;22292:9;22285:5;22281:21;22272:30;;22345:4;22335:8;22331:19;22324:5;22321:30;22311:40;;22040:317;;21964:393;;;;;:::o;22363:60::-;22391:3;22412:5;22405:12;;22363:60;;;:::o;22429:142::-;22479:9;22512:53;22530:34;22539:24;22557:5;22539:24;:::i;:::-;22530:34;:::i;:::-;22512:53;:::i;:::-;22499:66;;22429:142;;;:::o;22577:75::-;22620:3;22641:5;22634:12;;22577:75;;;:::o;22658:269::-;22768:39;22799:7;22768:39;:::i;:::-;22829:91;22878:41;22902:16;22878:41;:::i;:::-;22870:6;22863:4;22857:11;22829:91;:::i;:::-;22823:4;22816:105;22734:193;22658:269;;;:::o;22933:73::-;22978:3;22933:73;:::o;23012:189::-;23089:32;;:::i;:::-;23130:65;23188:6;23180;23174:4;23130:65;:::i;:::-;23065:136;23012:189;;:::o;23207:186::-;23267:120;23284:3;23277:5;23274:14;23267:120;;;23338:39;23375:1;23368:5;23338:39;:::i;:::-;23311:1;23304:5;23300:13;23291:22;;23267:120;;;23207:186;;:::o;23399:543::-;23500:2;23495:3;23492:11;23489:446;;;23534:38;23566:5;23534:38;:::i;:::-;23618:29;23636:10;23618:29;:::i;:::-;23608:8;23604:44;23801:2;23789:10;23786:18;23783:49;;;23822:8;23807:23;;23783:49;23845:80;23901:22;23919:3;23901:22;:::i;:::-;23891:8;23887:37;23874:11;23845:80;:::i;:::-;23504:431;;23489:446;23399:543;;;:::o;23948:117::-;24002:8;24052:5;24046:4;24042:16;24021:37;;23948:117;;;;:::o;24071:169::-;24115:6;24148:51;24196:1;24192:6;24184:5;24181:1;24177:13;24148:51;:::i;:::-;24144:56;24229:4;24223;24219:15;24209:25;;24122:118;24071:169;;;;:::o;24245:295::-;24321:4;24467:29;24492:3;24486:4;24467:29;:::i;:::-;24459:37;;24529:3;24526:1;24522:11;24516:4;24513:21;24505:29;;24245:295;;;;:::o;24545:1395::-;24662:37;24695:3;24662:37;:::i;:::-;24764:18;24756:6;24753:30;24750:56;;;24786:18;;:::i;:::-;24750:56;24830:38;24862:4;24856:11;24830:38;:::i;:::-;24915:67;24975:6;24967;24961:4;24915:67;:::i;:::-;25009:1;25033:4;25020:17;;25065:2;25057:6;25054:14;25082:1;25077:618;;;;25739:1;25756:6;25753:77;;;25805:9;25800:3;25796:19;25790:26;25781:35;;25753:77;25856:67;25916:6;25909:5;25856:67;:::i;:::-;25850:4;25843:81;25712:222;25047:887;;25077:618;25129:4;25125:9;25117:6;25113:22;25163:37;25195:4;25163:37;:::i;:::-;25222:1;25236:208;25250:7;25247:1;25244:14;25236:208;;;25329:9;25324:3;25320:19;25314:26;25306:6;25299:42;25380:1;25372:6;25368:14;25358:24;;25427:2;25416:9;25412:18;25399:31;;25273:4;25270:1;25266:12;25261:17;;25236:208;;;25472:6;25463:7;25460:19;25457:179;;;25530:9;25525:3;25521:19;25515:26;25573:48;25615:4;25607:6;25603:17;25592:9;25573:48;:::i;:::-;25565:6;25558:64;25480:156;25457:179;25682:1;25678;25670:6;25666:14;25662:22;25656:4;25649:36;25084:611;;;25047:887;;24637:1303;;;24545:1395;;:::o;25946:222::-;26086:34;26082:1;26074:6;26070:14;26063:58;26155:5;26150:2;26142:6;26138:15;26131:30;25946:222;:::o;26174:366::-;26316:3;26337:67;26401:2;26396:3;26337:67;:::i;:::-;26330:74;;26413:93;26502:3;26413:93;:::i;:::-;26531:2;26526:3;26522:12;26515:19;;26174:366;;;:::o;26546:419::-;26712:4;26750:2;26739:9;26735:18;26727:26;;26799:9;26793:4;26789:20;26785:1;26774:9;26770:17;26763:47;26827:131;26953:4;26827:131;:::i;:::-;26819:139;;26546:419;;;:::o;26971:230::-;27111:34;27107:1;27099:6;27095:14;27088:58;27180:13;27175:2;27167:6;27163:15;27156:38;26971:230;:::o;27207:366::-;27349:3;27370:67;27434:2;27429:3;27370:67;:::i;:::-;27363:74;;27446:93;27535:3;27446:93;:::i;:::-;27564:2;27559:3;27555:12;27548:19;;27207:366;;;:::o;27579:419::-;27745:4;27783:2;27772:9;27768:18;27760:26;;27832:9;27826:4;27822:20;27818:1;27807:9;27803:17;27796:47;27860:131;27986:4;27860:131;:::i;:::-;27852:139;;27579:419;;;:::o;28004:175::-;28144:27;28140:1;28132:6;28128:14;28121:51;28004:175;:::o;28185:366::-;28327:3;28348:67;28412:2;28407:3;28348:67;:::i;:::-;28341:74;;28424:93;28513:3;28424:93;:::i;:::-;28542:2;28537:3;28533:12;28526:19;;28185:366;;;:::o;28557:419::-;28723:4;28761:2;28750:9;28746:18;28738:26;;28810:9;28804:4;28800:20;28796:1;28785:9;28781:17;28774:47;28838:131;28964:4;28838:131;:::i;:::-;28830:139;;28557:419;;;:::o;28982:243::-;29122:34;29118:1;29110:6;29106:14;29099:58;29191:26;29186:2;29178:6;29174:15;29167:51;28982:243;:::o;29231:366::-;29373:3;29394:67;29458:2;29453:3;29394:67;:::i;:::-;29387:74;;29470:93;29559:3;29470:93;:::i;:::-;29588:2;29583:3;29579:12;29572:19;;29231:366;;;:::o;29603:419::-;29769:4;29807:2;29796:9;29792:18;29784:26;;29856:9;29850:4;29846:20;29842:1;29831:9;29827:17;29820:47;29884:131;30010:4;29884:131;:::i;:::-;29876:139;;29603:419;;;:::o;30028:305::-;30068:3;30087:20;30105:1;30087:20;:::i;:::-;30082:25;;30121:20;30139:1;30121:20;:::i;:::-;30116:25;;30275:1;30207:66;30203:74;30200:1;30197:81;30194:107;;;30281:18;;:::i;:::-;30194:107;30325:1;30322;30318:9;30311:16;;30028:305;;;;:::o;30339:180::-;30479:32;30475:1;30467:6;30463:14;30456:56;30339:180;:::o;30525:366::-;30667:3;30688:67;30752:2;30747:3;30688:67;:::i;:::-;30681:74;;30764:93;30853:3;30764:93;:::i;:::-;30882:2;30877:3;30873:12;30866:19;;30525:366;;;:::o;30897:419::-;31063:4;31101:2;31090:9;31086:18;31078:26;;31150:9;31144:4;31140:20;31136:1;31125:9;31121:17;31114:47;31178:131;31304:4;31178:131;:::i;:::-;31170:139;;30897:419;;;:::o;31322:348::-;31362:7;31385:20;31403:1;31385:20;:::i;:::-;31380:25;;31419:20;31437:1;31419:20;:::i;:::-;31414:25;;31607:1;31539:66;31535:74;31532:1;31529:81;31524:1;31517:9;31510:17;31506:105;31503:131;;;31614:18;;:::i;:::-;31503:131;31662:1;31659;31655:9;31644:20;;31322:348;;;;:::o;31676:170::-;31816:22;31812:1;31804:6;31800:14;31793:46;31676:170;:::o;31852:366::-;31994:3;32015:67;32079:2;32074:3;32015:67;:::i;:::-;32008:74;;32091:93;32180:3;32091:93;:::i;:::-;32209:2;32204:3;32200:12;32193:19;;31852:366;;;:::o;32224:419::-;32390:4;32428:2;32417:9;32413:18;32405:26;;32477:9;32471:4;32467:20;32463:1;32452:9;32448:17;32441:47;32505:131;32631:4;32505:131;:::i;:::-;32497:139;;32224:419;;;:::o;32649:176::-;32789:28;32785:1;32777:6;32773:14;32766:52;32649:176;:::o;32831:366::-;32973:3;32994:67;33058:2;33053:3;32994:67;:::i;:::-;32987:74;;33070:93;33159:3;33070:93;:::i;:::-;33188:2;33183:3;33179:12;33172:19;;32831:366;;;:::o;33203:419::-;33369:4;33407:2;33396:9;33392:18;33384:26;;33456:9;33450:4;33446:20;33442:1;33431:9;33427:17;33420:47;33484:131;33610:4;33484:131;:::i;:::-;33476:139;;33203:419;;;:::o;33628:238::-;33768:34;33764:1;33756:6;33752:14;33745:58;33837:21;33832:2;33824:6;33820:15;33813:46;33628:238;:::o;33872:366::-;34014:3;34035:67;34099:2;34094:3;34035:67;:::i;:::-;34028:74;;34111:93;34200:3;34111:93;:::i;:::-;34229:2;34224:3;34220:12;34213:19;;33872:366;;;:::o;34244:419::-;34410:4;34448:2;34437:9;34433:18;34425:26;;34497:9;34491:4;34487:20;34483:1;34472:9;34468:17;34461:47;34525:131;34651:4;34525:131;:::i;:::-;34517:139;;34244:419;;;:::o;34669:235::-;34809:34;34805:1;34797:6;34793:14;34786:58;34878:18;34873:2;34865:6;34861:15;34854:43;34669:235;:::o;34910:366::-;35052:3;35073:67;35137:2;35132:3;35073:67;:::i;:::-;35066:74;;35149:93;35238:3;35149:93;:::i;:::-;35267:2;35262:3;35258:12;35251:19;;34910:366;;;:::o;35282:419::-;35448:4;35486:2;35475:9;35471:18;35463:26;;35535:9;35529:4;35525:20;35521:1;35510:9;35506:17;35499:47;35563:131;35689:4;35563:131;:::i;:::-;35555:139;;35282:419;;;:::o;35707:148::-;35809:11;35846:3;35831:18;;35707:148;;;;:::o;35861:377::-;35967:3;35995:39;36028:5;35995:39;:::i;:::-;36050:89;36132:6;36127:3;36050:89;:::i;:::-;36043:96;;36148:52;36193:6;36188:3;36181:4;36174:5;36170:16;36148:52;:::i;:::-;36225:6;36220:3;36216:16;36209:23;;35971:267;35861:377;;;;:::o;36268:874::-;36371:3;36408:5;36402:12;36437:36;36463:9;36437:36;:::i;:::-;36489:89;36571:6;36566:3;36489:89;:::i;:::-;36482:96;;36609:1;36598:9;36594:17;36625:1;36620:166;;;;36800:1;36795:341;;;;36587:549;;36620:166;36704:4;36700:9;36689;36685:25;36680:3;36673:38;36766:6;36759:14;36752:22;36744:6;36740:35;36735:3;36731:45;36724:52;;36620:166;;36795:341;36862:38;36894:5;36862:38;:::i;:::-;36922:1;36936:154;36950:6;36947:1;36944:13;36936:154;;;37024:7;37018:14;37014:1;37009:3;37005:11;36998:35;37074:1;37065:7;37061:15;37050:26;;36972:4;36969:1;36965:12;36960:17;;36936:154;;;37119:6;37114:3;37110:16;37103:23;;36802:334;;36587:549;;36375:767;;36268:874;;;;:::o;37148:589::-;37373:3;37395:95;37486:3;37477:6;37395:95;:::i;:::-;37388:102;;37507:95;37598:3;37589:6;37507:95;:::i;:::-;37500:102;;37619:92;37707:3;37698:6;37619:92;:::i;:::-;37612:99;;37728:3;37721:10;;37148:589;;;;;;:::o;37743:225::-;37883:34;37879:1;37871:6;37867:14;37860:58;37952:8;37947:2;37939:6;37935:15;37928:33;37743:225;:::o;37974:366::-;38116:3;38137:67;38201:2;38196:3;38137:67;:::i;:::-;38130:74;;38213:93;38302:3;38213:93;:::i;:::-;38331:2;38326:3;38322:12;38315:19;;37974:366;;;:::o;38346:419::-;38512:4;38550:2;38539:9;38535:18;38527:26;;38599:9;38593:4;38589:20;38585:1;38574:9;38570:17;38563:47;38627:131;38753:4;38627:131;:::i;:::-;38619:139;;38346:419;;;:::o;38771:237::-;38911:34;38907:1;38899:6;38895:14;38888:58;38980:20;38975:2;38967:6;38963:15;38956:45;38771:237;:::o;39014:366::-;39156:3;39177:67;39241:2;39236:3;39177:67;:::i;:::-;39170:74;;39253:93;39342:3;39253:93;:::i;:::-;39371:2;39366:3;39362:12;39355:19;;39014:366;;;:::o;39386:419::-;39552:4;39590:2;39579:9;39575:18;39567:26;;39639:9;39633:4;39629:20;39625:1;39614:9;39610:17;39603:47;39667:131;39793:4;39667:131;:::i;:::-;39659:139;;39386:419;;;:::o;39811:225::-;39951:34;39947:1;39939:6;39935:14;39928:58;40020:8;40015:2;40007:6;40003:15;39996:33;39811:225;:::o;40042:366::-;40184:3;40205:67;40269:2;40264:3;40205:67;:::i;:::-;40198:74;;40281:93;40370:3;40281:93;:::i;:::-;40399:2;40394:3;40390:12;40383:19;;40042:366;;;:::o;40414:419::-;40580:4;40618:2;40607:9;40603:18;40595:26;;40667:9;40661:4;40657:20;40653:1;40642:9;40638:17;40631:47;40695:131;40821:4;40695:131;:::i;:::-;40687:139;;40414:419;;;:::o;40839:224::-;40979:34;40975:1;40967:6;40963:14;40956:58;41048:7;41043:2;41035:6;41031:15;41024:32;40839:224;:::o;41069:366::-;41211:3;41232:67;41296:2;41291:3;41232:67;:::i;:::-;41225:74;;41308:93;41397:3;41308:93;:::i;:::-;41426:2;41421:3;41417:12;41410:19;;41069:366;;;:::o;41441:419::-;41607:4;41645:2;41634:9;41630:18;41622:26;;41694:9;41688:4;41684:20;41680:1;41669:9;41665:17;41658:47;41722:131;41848:4;41722:131;:::i;:::-;41714:139;;41441:419;;;:::o;41866:229::-;42006:34;42002:1;41994:6;41990:14;41983:58;42075:12;42070:2;42062:6;42058:15;42051:37;41866:229;:::o;42101:366::-;42243:3;42264:67;42328:2;42323:3;42264:67;:::i;:::-;42257:74;;42340:93;42429:3;42340:93;:::i;:::-;42458:2;42453:3;42449:12;42442:19;;42101:366;;;:::o;42473:419::-;42639:4;42677:2;42666:9;42662:18;42654:26;;42726:9;42720:4;42716:20;42712:1;42701:9;42697:17;42690:47;42754:131;42880:4;42754:131;:::i;:::-;42746:139;;42473:419;;;:::o;42898:234::-;43038:34;43034:1;43026:6;43022:14;43015:58;43107:17;43102:2;43094:6;43090:15;43083:42;42898:234;:::o;43138:366::-;43280:3;43301:67;43365:2;43360:3;43301:67;:::i;:::-;43294:74;;43377:93;43466:3;43377:93;:::i;:::-;43495:2;43490:3;43486:12;43479:19;;43138:366;;;:::o;43510:419::-;43676:4;43714:2;43703:9;43699:18;43691:26;;43763:9;43757:4;43753:20;43749:1;43738:9;43734:17;43727:47;43791:131;43917:4;43791:131;:::i;:::-;43783:139;;43510:419;;;:::o;43935:98::-;43986:6;44020:5;44014:12;44004:22;;43935:98;;;:::o;44039:168::-;44122:11;44156:6;44151:3;44144:19;44196:4;44191:3;44187:14;44172:29;;44039:168;;;;:::o;44213:360::-;44299:3;44327:38;44359:5;44327:38;:::i;:::-;44381:70;44444:6;44439:3;44381:70;:::i;:::-;44374:77;;44460:52;44505:6;44500:3;44493:4;44486:5;44482:16;44460:52;:::i;:::-;44537:29;44559:6;44537:29;:::i;:::-;44532:3;44528:39;44521:46;;44303:270;44213:360;;;;:::o;44579:640::-;44774:4;44812:3;44801:9;44797:19;44789:27;;44826:71;44894:1;44883:9;44879:17;44870:6;44826:71;:::i;:::-;44907:72;44975:2;44964:9;44960:18;44951:6;44907:72;:::i;:::-;44989;45057:2;45046:9;45042:18;45033:6;44989:72;:::i;:::-;45108:9;45102:4;45098:20;45093:2;45082:9;45078:18;45071:48;45136:76;45207:4;45198:6;45136:76;:::i;:::-;45128:84;;44579:640;;;;;;;:::o;45225:141::-;45281:5;45312:6;45306:13;45297:22;;45328:32;45354:5;45328:32;:::i;:::-;45225:141;;;;:::o;45372:349::-;45441:6;45490:2;45478:9;45469:7;45465:23;45461:32;45458:119;;;45496:79;;:::i;:::-;45458:119;45616:1;45641:63;45696:7;45687:6;45676:9;45672:22;45641:63;:::i;:::-;45631:73;;45587:127;45372:349;;;;:::o;45727:180::-;45775:77;45772:1;45765:88;45872:4;45869:1;45862:15;45896:4;45893:1;45886:15;45913:185;45953:1;45970:20;45988:1;45970:20;:::i;:::-;45965:25;;46004:20;46022:1;46004:20;:::i;:::-;45999:25;;46043:1;46033:35;;46048:18;;:::i;:::-;46033:35;46090:1;46087;46083:9;46078:14;;45913:185;;;;:::o;46104:176::-;46136:1;46153:20;46171:1;46153:20;:::i;:::-;46148:25;;46187:20;46205:1;46187:20;:::i;:::-;46182:25;;46226:1;46216:35;;46231:18;;:::i;:::-;46216:35;46272:1;46269;46265:9;46260:14;;46104:176;;;;:::o;46286:220::-;46426:34;46422:1;46414:6;46410:14;46403:58;46495:3;46490:2;46482:6;46478:15;46471:28;46286:220;:::o;46512:366::-;46654:3;46675:67;46739:2;46734:3;46675:67;:::i;:::-;46668:74;;46751:93;46840:3;46751:93;:::i;:::-;46869:2;46864:3;46860:12;46853:19;;46512:366;;;:::o;46884:419::-;47050:4;47088:2;47077:9;47073:18;47065:26;;47137:9;47131:4;47127:20;47123:1;47112:9;47108:17;47101:47;47165:131;47291:4;47165:131;:::i;:::-;47157:139;;46884:419;;;:::o;47309:227::-;47449:34;47445:1;47437:6;47433:14;47426:58;47518:10;47513:2;47505:6;47501:15;47494:35;47309:227;:::o;47542:366::-;47684:3;47705:67;47769:2;47764:3;47705:67;:::i;:::-;47698:74;;47781:93;47870:3;47781:93;:::i;:::-;47899:2;47894:3;47890:12;47883:19;;47542:366;;;:::o;47914:419::-;48080:4;48118:2;48107:9;48103:18;48095:26;;48167:9;48161:4;48157:20;48153:1;48142:9;48138:17;48131:47;48195:131;48321:4;48195:131;:::i;:::-;48187:139;;47914:419;;;:::o

Swarm Source

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