ETH Price: $2,587.89 (-1.41%)

Token

FrenchbulldogJiJi (JiJi)
 

Overview

Max Total Supply

29 JiJi

Holders

15

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
justaliang.eth
Balance
1 JiJi
0x98d0eff29037c2f60054ed9f01f297adb1875732
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:
JiJi

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-09
*/

/**
 *Submitted for verification at Etherscan.io on 2022-03-07
*/

/**
 *Submitted for verification at Etherscan.io on 2022-01-28
*/

/**
 *Submitted for verification at Etherscan.io on 2022-01-18
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

//import "../utils/Context.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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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


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

pragma solidity ^0.8.0;

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


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

pragma solidity ^0.8.0;

//import "./IERC165.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;
    }
}


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

pragma solidity ^0.8.0;

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

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

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

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

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


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

pragma solidity ^0.8.0;

//import "../../utils/introspection/IERC165.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;
}
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)



pragma solidity ^0.8.0;

//import "../IERC721.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);
}


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

pragma solidity ^0.8.0;

//import "../IERC721.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);
}


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



pragma solidity ^0.8.0;

//import "./IERC721.sol";
//import "./IERC721Receiver.sol";
//import "./extensions/IERC721Metadata.sol";
//import "../../utils/Address.sol";
//import "../../utils/Context.sol";
//import "../../utils/Strings.sol";
//import "../../utils/introspection/ERC165.sol";

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

pragma solidity ^0.8.0;

//import "../ERC721.sol";
//import "./IERC721Enumerable.sol";

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




pragma solidity ^0.8.0;

//import '@openzeppelin/contracts/access/Ownable.sol';
//import '@openzeppelin/contracts/token/ERC721/ERC721.sol';
//import '@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol';

contract JiJi is ERC721, ERC721Enumerable, Ownable {
  using Strings for uint256;
  bool public _isWhiteListSaleActive = false;
  bool public _isSaleActive = false;

  // Constants
  uint256 constant public MAX_SUPPLY = 420;
  uint256 public mintPrice = 0.14 ether;
  uint256 public whiteListPrice = 0.09 ether;
  uint256 public maxwhitelistBalance = 4;
  


  string private _baseURIExtended;


  mapping(address => uint256) public whiteList;
  

  event TokenMinted(uint256 supply);

  constructor() ERC721('FrenchbulldogJiJi', 'JiJi') {}
//ok
  function flipWhiteListSaleActive() public onlyOwner {
    _isWhiteListSaleActive = !_isWhiteListSaleActive;
  }
//ok
  function filpSaleActive() public onlyOwner {
    _isSaleActive = !_isSaleActive;
  }

//ok
  function setMintPrice(uint256 _mintPrice) public onlyOwner {
    mintPrice = _mintPrice;
  }

  function setWhiteListPrice(uint256 _whiteListPrice) public onlyOwner {
    whiteListPrice = _whiteListPrice;
  }


//ok
  function setWhiteList4(address[] calldata _whiteList) external onlyOwner {
    for(uint i = 0; i < _whiteList.length; i++) {
      whiteList[_whiteList[i]] = 4;
    }
  }
  function setWhiteList3(address[] calldata _whiteList) external onlyOwner {
    for(uint i = 0; i < _whiteList.length; i++) {
      whiteList[_whiteList[i]] = 3;
    }
  }
  function setWhiteList2(address[] calldata _whiteList) external onlyOwner {
    for(uint i = 0; i < _whiteList.length; i++) {
      whiteList[_whiteList[i]] = 2;
    }
  }

//ok
  function withdraw(address to) public onlyOwner {
    uint256 balance = address(this).balance;
    payable(to).transfer(balance);
  }
//ok
  function preserveMint(uint numJiJis, address to) public onlyOwner {
    require(totalSupply() + numJiJis <= MAX_SUPPLY, 'Preserve mint would exceed max supply');
    _mintJiJi(numJiJis, to);
    emit TokenMinted(totalSupply());
  }
//ok
  function getTotalSupply() public view returns (uint256) {
    return totalSupply();
  }
//ok
  function getJiJiByOwner(address _owner) public view returns (uint256[] memory) {
    uint256 tokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](tokenCount);
    for (uint256 i; i < tokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

//ok
  function mintJiJis(uint numJiJis) public payable {
    require(_isSaleActive, 'Sale must be active to mint JiJis');
    require(totalSupply() + numJiJis <= MAX_SUPPLY, 'Sale would exceed max supply');
    require(numJiJis * mintPrice <= msg.value, 'Not enough ether sent');
    _mintJiJi(numJiJis, msg.sender);
    emit TokenMinted(totalSupply());
  }
 

  function whiteListMintJiJis(uint numJiJis) public payable {
    require(_isWhiteListSaleActive, 'Sale must be active to mint JiJis');
    require(totalSupply() + numJiJis <= MAX_SUPPLY, 'Sale would exceed max supply');
    require(balanceOf(msg.sender) + numJiJis <= maxwhitelistBalance, 'Sale would exceed max Whitelist balance');
    uint256 price = whiteListPrice;
    require(numJiJis * price <= msg.value, 'Not enough ether sent');
    if (whiteList[msg.sender] == 4) {
    price = whiteListPrice;
    whiteList[msg.sender] = maxwhitelistBalance-numJiJis;
    } 
    else if(whiteList[msg.sender] == 3){
      price = whiteListPrice;
    whiteList[msg.sender] = 3-numJiJis;
    }
    else if(whiteList[msg.sender] == 2){
      price = whiteListPrice;
    whiteList[msg.sender] = 2-numJiJis;
    }
    else if(whiteList[msg.sender] == 1){
      require(numJiJis == 1,'Something Wrong');
      price = whiteListPrice;
    whiteList[msg.sender] = 1-numJiJis;
    }
    else if(whiteList[msg.sender] == 0){
      revert('You have no more whitelist');
    }
    else  {
    revert('Not in white list');
    }
    
    
    _mintJiJi(numJiJis, msg.sender);
    emit TokenMinted(totalSupply());
  }

//ok
  function _mintJiJi(uint256 numJiJis, address recipient) internal {
    uint256 supply = totalSupply();
    for (uint256 i = 0; i < numJiJis; i++) {
      _safeMint(recipient, supply + i);
    }
  }
//ok
  function setBaseURI(string memory baseURI_) external onlyOwner {
    _baseURIExtended = baseURI_;
  }
//ok
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseURIExtended;
  }
//ok
  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');
    require(tokenId < MAX_SUPPLY,'Something wrong');
        return string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json"));
    }

  function _beforeTokenTransfer (
    address from,
    address to,
    uint256 tokenId
  ) internal override(ERC721, ERC721Enumerable) {
    super._beforeTokenTransfer(from, to, tokenId);
  }
//ok
  function supportsInterface(bytes4 interfaceId)
    public
    view
    override(ERC721, ERC721Enumerable)
    returns (bool)
  {
    return super.supportsInterface(interfaceId);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"TokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isWhiteListSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"filpSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhiteListSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getJiJiByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxwhitelistBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numJiJis","type":"uint256"}],"name":"mintJiJis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","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":[{"internalType":"uint256","name":"numJiJis","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"preserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whiteList","type":"address[]"}],"name":"setWhiteList2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whiteList","type":"address[]"}],"name":"setWhiteList3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whiteList","type":"address[]"}],"name":"setWhiteList4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListPrice","type":"uint256"}],"name":"setWhiteListPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numJiJis","type":"uint256"}],"name":"whiteListMintJiJis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whiteListPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff0219169083151502179055506701f161421c8e0000600b5567013fbe85edc90000600c556004600d553480156200006457600080fd5b506040518060400160405280601181526020017f4672656e636862756c6c646f674a694a690000000000000000000000000000008152506040518060400160405280600481526020017f4a694a69000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e9929190620001f9565b50806001908051906020019062000102929190620001f9565b50505062000125620001196200012b60201b60201c565b6200013360201b60201c565b6200030e565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020790620002a9565b90600052602060002090601f0160209004810192826200022b576000855562000277565b82601f106200024657805160ff191683800117855562000277565b8280016001018555821562000277579182015b828111156200027657825182559160200191906001019062000259565b5b5090506200028691906200028a565b5090565b5b80821115620002a55760008160009055506001016200028b565b5090565b60006002820490506001821680620002c257607f821691505b60208210811415620002d957620002d8620002df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6150b0806200031e6000396000f3fe60806040526004361061023b5760003560e01c80636817c76c1161012e578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c514610851578063f11207d81461088e578063f14c07f8146108b9578063f2fde38b146108e4578063f4a0a5281461090d5761023b565b8063b88d4fde1461076e578063beafc89b14610797578063c4e41b22146107c0578063c87b56dd146107eb578063e8acf7b7146108285761023b565b8063715018a6116100f2578063715018a61461069b5780638da5cb5b146106b257806393203294146106dd57806395d89b411461071a578063a22cb465146107455761023b565b80636817c76c146105c157806368575685146105ec5780636cbf2c2e146106175780637080d6fc1461063357806370a082311461065e5761023b565b80633215b32d116101bc57806351cff8d91161018057806351cff8d9146104e057806355f804b3146105095780635640e83c146105325780635edd95f91461055b5780636352211e146105845761023b565b80633215b32d146103e957806332cb6b0c14610412578063372c12b11461043d57806342842e0e1461047a5780634f6ccce7146104a35761023b565b806318160ddd1161020357806318160ddd146103255780631ca62dbc1461035057806323b872dd146103675780632e2a366f146103905780632f745c59146103ac5761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806312675f361461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061397f565b610936565b6040516102749190614070565b60405180910390f35b34801561028957600080fd5b50610292610948565b60405161029f919061408b565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613a22565b6109da565b6040516102dc9190613fe7565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906138f2565b610a5f565b005b34801561031a57600080fd5b50610323610b77565b005b34801561033157600080fd5b5061033a610c1f565b604051610347919061440d565b60405180910390f35b34801561035c57600080fd5b50610365610c2c565b005b34801561037357600080fd5b5061038e600480360381019061038991906137dc565b610cd4565b005b6103aa60048036038101906103a59190613a22565b610d34565b005b3480156103b857600080fd5b506103d360048036038101906103ce91906138f2565b610e75565b6040516103e0919061440d565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613932565b610f1a565b005b34801561041e57600080fd5b50610427611028565b604051610434919061440d565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f919061376f565b61102e565b604051610471919061440d565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c91906137dc565b611046565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613a22565b611066565b6040516104d7919061440d565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061376f565b6110d7565b005b34801561051557600080fd5b50610530600480360381019061052b91906139d9565b6111a3565b005b34801561053e57600080fd5b5061055960048036038101906105549190613932565b611239565b005b34801561056757600080fd5b50610582600480360381019061057d9190613a4f565b611347565b005b34801561059057600080fd5b506105ab60048036038101906105a69190613a22565b611466565b6040516105b89190613fe7565b60405180910390f35b3480156105cd57600080fd5b506105d6611518565b6040516105e3919061440d565b60405180910390f35b3480156105f857600080fd5b5061060161151e565b60405161060e919061440d565b60405180910390f35b610631600480360381019061062c9190613a22565b611524565b005b34801561063f57600080fd5b50610648611a50565b6040516106559190614070565b60405180910390f35b34801561066a57600080fd5b506106856004803603810190610680919061376f565b611a63565b604051610692919061440d565b60405180910390f35b3480156106a757600080fd5b506106b0611b1b565b005b3480156106be57600080fd5b506106c7611ba3565b6040516106d49190613fe7565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061376f565b611bcd565b604051610711919061404e565b60405180910390f35b34801561072657600080fd5b5061072f611c7b565b60405161073c919061408b565b60405180910390f35b34801561075157600080fd5b5061076c600480360381019061076791906138b2565b611d0d565b005b34801561077a57600080fd5b506107956004803603810190610790919061382f565b611d23565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613a22565b611d85565b005b3480156107cc57600080fd5b506107d5611e0b565b6040516107e2919061440d565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190613a22565b611e1a565b60405161081f919061408b565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613932565b611ee0565b005b34801561085d57600080fd5b506108786004803603810190610873919061379c565b611fee565b6040516108859190614070565b60405180910390f35b34801561089a57600080fd5b506108a3612082565b6040516108b09190614070565b60405180910390f35b3480156108c557600080fd5b506108ce612095565b6040516108db919061440d565b60405180910390f35b3480156108f057600080fd5b5061090b6004803603810190610906919061376f565b61209b565b005b34801561091957600080fd5b50610934600480360381019061092f9190613a22565b612193565b005b600061094182612219565b9050919050565b606060008054610957906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610983906146f6565b80156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b5050505050905090565b60006109e582612293565b610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b906142cd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6a82611466565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad29061438d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610afa6122ff565b73ffffffffffffffffffffffffffffffffffffffff161480610b295750610b2881610b236122ff565b611fee565b5b610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f9061424d565b60405180910390fd5b610b728383612307565b505050565b610b7f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16610b9d611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906142ed565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b6000600880549050905090565b610c346122ff565b73ffffffffffffffffffffffffffffffffffffffff16610c52611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f906142ed565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b610ce5610cdf6122ff565b826123c0565b610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b906143ad565b60405180910390fd5b610d2f83838361249e565b505050565b600a60159054906101000a900460ff16610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a906140ad565b60405180910390fd5b6101a481610d8f610c1f565b610d99919061452b565b1115610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd19061416d565b60405180910390fd5b34600b5482610de991906145b2565b1115610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906143ed565b60405180910390fd5b610e3481336126fa565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e610e5d610c1f565b604051610e6a919061440d565b60405180910390a150565b6000610e8083611a63565b8210610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906140ed565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f226122ff565b73ffffffffffffffffffffffffffffffffffffffff16610f40611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906142ed565b60405180910390fd5b60005b82829050811015611023576003600f6000858585818110610fbd57610fbc61488f565b5b9050602002016020810190610fd2919061376f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061101b90614759565b915050610f99565b505050565b6101a481565b600f6020528060005260406000206000915090505481565b61106183838360405180602001604052806000815250611d23565b505050565b6000611070610c1f565b82106110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a8906143cd565b60405180910390fd5b600882815481106110c5576110c461488f565b5b90600052602060002001549050919050565b6110df6122ff565b73ffffffffffffffffffffffffffffffffffffffff166110fd611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a906142ed565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561119e573d6000803e3d6000fd5b505050565b6111ab6122ff565b73ffffffffffffffffffffffffffffffffffffffff166111c9611ba3565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611216906142ed565b60405180910390fd5b80600e908051906020019061123592919061352d565b5050565b6112416122ff565b73ffffffffffffffffffffffffffffffffffffffff1661125f611ba3565b73ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac906142ed565b60405180910390fd5b60005b82829050811015611342576004600f60008585858181106112dc576112db61488f565b5b90506020020160208101906112f1919061376f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061133a90614759565b9150506112b8565b505050565b61134f6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661136d611ba3565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906142ed565b60405180910390fd5b6101a4826113cf610c1f565b6113d9919061452b565b111561141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114119061434d565b60405180910390fd5b61142482826126fa565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e61144d610c1f565b60405161145a919061440d565b60405180910390a15050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115069061428d565b60405180910390fd5b80915050919050565b600b5481565b600c5481565b600a60149054906101000a900460ff16611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a906140ad565b60405180910390fd5b6101a48161157f610c1f565b611589919061452b565b11156115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c19061416d565b60405180910390fd5b600d54816115d733611a63565b6115e1919061452b565b1115611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061418d565b60405180910390fd5b6000600c54905034818361163691906145b2565b1115611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e906143ed565b60405180910390fd5b6004600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561171a57600c54905081600d546116d2919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a04565b6003600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156117bc57600c549050816003611774919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a03565b6002600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561185e57600c549050816002611816919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a02565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561194357600182146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e0906141ad565b60405180910390fd5b600c5490508160016118fb919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a01565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd9061420d565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061430d565b60405180910390fd5b5b5b5b611a0e82336126fa565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611a37610c1f565b604051611a44919061440d565b60405180910390a15050565b600a60159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb9061426d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b236122ff565b73ffffffffffffffffffffffffffffffffffffffff16611b41611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e906142ed565b60405180910390fd5b611ba1600061273f565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606000611bda83611a63565b905060008167ffffffffffffffff811115611bf857611bf76148be565b5b604051908082528060200260200182016040528015611c265781602001602082028036833780820191505090505b50905060005b82811015611c7057611c3e8582610e75565b828281518110611c5157611c5061488f565b5b6020026020010181815250508080611c6890614759565b915050611c2c565b508092505050919050565b606060018054611c8a906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb6906146f6565b8015611d035780601f10611cd857610100808354040283529160200191611d03565b820191906000526020600020905b815481529060010190602001808311611ce657829003601f168201915b5050505050905090565b611d1f611d186122ff565b8383612805565b5050565b611d34611d2e6122ff565b836123c0565b611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906143ad565b60405180910390fd5b611d7f84848484612972565b50505050565b611d8d6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611dab611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906142ed565b60405180910390fd5b80600c8190555050565b6000611e15610c1f565b905090565b6060611e2582612293565b611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b9061436d565b60405180910390fd5b6101a48210611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f906140cd565b60405180910390fd5b611eb06129ce565b611eb983612a60565b604051602001611eca929190613fb8565b6040516020818303038152906040529050919050565b611ee86122ff565b73ffffffffffffffffffffffffffffffffffffffff16611f06611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f53906142ed565b60405180910390fd5b60005b82829050811015611fe9576002600f6000858585818110611f8357611f8261488f565b5b9050602002016020810190611f98919061376f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611fe190614759565b915050611f5f565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b600d5481565b6120a36122ff565b73ffffffffffffffffffffffffffffffffffffffff166120c1611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e906142ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9061412d565b60405180910390fd5b6121908161273f565b50565b61219b6122ff565b73ffffffffffffffffffffffffffffffffffffffff166121b9611ba3565b73ffffffffffffffffffffffffffffffffffffffff161461220f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612206906142ed565b60405180910390fd5b80600b8190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061228c575061228b82612bc1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661237a83611466565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123cb82612293565b61240a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124019061422d565b60405180910390fd5b600061241583611466565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061248457508373ffffffffffffffffffffffffffffffffffffffff1661246c846109da565b73ffffffffffffffffffffffffffffffffffffffff16145b8061249557506124948185611fee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124be82611466565b73ffffffffffffffffffffffffffffffffffffffff1614612514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b9061432d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b906141cd565b60405180910390fd5b61258f838383612ca3565b61259a600082612307565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ea919061460c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612641919061452b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612704610c1f565b905060005b8381101561273957612726838284612721919061452b565b612cb3565b808061273190614759565b915050612709565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b906141ed565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129659190614070565b60405180910390a3505050565b61297d84848461249e565b61298984848484612cd1565b6129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061410d565b60405180910390fd5b50505050565b6060600e80546129dd906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612a09906146f6565b8015612a565780601f10612a2b57610100808354040283529160200191612a56565b820191906000526020600020905b815481529060010190602001808311612a3957829003601f168201915b5050505050905090565b60606000821415612aa8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bbc565b600082905060005b60008214612ada578080612ac390614759565b915050600a82612ad39190614581565b9150612ab0565b60008167ffffffffffffffff811115612af657612af56148be565b5b6040519080825280601f01601f191660200182016040528015612b285781602001600182028036833780820191505090505b5090505b60008514612bb557600182612b41919061460c565b9150600a85612b5091906147a2565b6030612b5c919061452b565b60f81b818381518110612b7257612b7161488f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bae9190614581565b9450612b2c565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c9c5750612c9b82612e68565b5b9050919050565b612cae838383612ed2565b505050565b612ccd828260405180602001604052806000815250612fe6565b5050565b6000612cf28473ffffffffffffffffffffffffffffffffffffffff16613041565b15612e5b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1b6122ff565b8786866040518563ffffffff1660e01b8152600401612d3d9493929190614002565b602060405180830381600087803b158015612d5757600080fd5b505af1925050508015612d8857506040513d601f19601f82011682018060405250810190612d8591906139ac565b60015b612e0b573d8060008114612db8576040519150601f19603f3d011682016040523d82523d6000602084013e612dbd565b606091505b50600081511415612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa9061410d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e60565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612edd838383613054565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f2057612f1b81613059565b612f5f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f5e57612f5d83826130a2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fa257612f9d8161320f565b612fe1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fe057612fdf82826132e0565b5b5b505050565b612ff0838361335f565b612ffd6000848484612cd1565b61303c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130339061410d565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130af84611a63565b6130b9919061460c565b905060006007600084815260200190815260200160002054905081811461319e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613223919061460c565b90506000600960008481526020019081526020016000205490506000600883815481106132535761325261488f565b5b9060005260206000200154905080600883815481106132755761327461488f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132c4576132c3614860565b5b6001900381819060005260206000200160009055905550505050565b60006132eb83611a63565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c6906142ad565b60405180910390fd5b6133d881612293565b15613418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340f9061414d565b60405180910390fd5b61342460008383612ca3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613474919061452b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613539906146f6565b90600052602060002090601f01602090048101928261355b57600085556135a2565b82601f1061357457805160ff19168380011785556135a2565b828001600101855582156135a2579182015b828111156135a1578251825591602001919060010190613586565b5b5090506135af91906135b3565b5090565b5b808211156135cc5760008160009055506001016135b4565b5090565b60006135e36135de8461444d565b614428565b9050828152602081018484840111156135ff576135fe6148fc565b5b61360a8482856146b4565b509392505050565b60006136256136208461447e565b614428565b905082815260208101848484011115613641576136406148fc565b5b61364c8482856146b4565b509392505050565b6000813590506136638161501e565b92915050565b60008083601f84011261367f5761367e6148f2565b5b8235905067ffffffffffffffff81111561369c5761369b6148ed565b5b6020830191508360208202830111156136b8576136b76148f7565b5b9250929050565b6000813590506136ce81615035565b92915050565b6000813590506136e38161504c565b92915050565b6000815190506136f88161504c565b92915050565b600082601f830112613713576137126148f2565b5b81356137238482602086016135d0565b91505092915050565b600082601f830112613741576137406148f2565b5b8135613751848260208601613612565b91505092915050565b60008135905061376981615063565b92915050565b60006020828403121561378557613784614906565b5b600061379384828501613654565b91505092915050565b600080604083850312156137b3576137b2614906565b5b60006137c185828601613654565b92505060206137d285828601613654565b9150509250929050565b6000806000606084860312156137f5576137f4614906565b5b600061380386828701613654565b935050602061381486828701613654565b92505060406138258682870161375a565b9150509250925092565b6000806000806080858703121561384957613848614906565b5b600061385787828801613654565b945050602061386887828801613654565b93505060406138798782880161375a565b925050606085013567ffffffffffffffff81111561389a57613899614901565b5b6138a6878288016136fe565b91505092959194509250565b600080604083850312156138c9576138c8614906565b5b60006138d785828601613654565b92505060206138e8858286016136bf565b9150509250929050565b6000806040838503121561390957613908614906565b5b600061391785828601613654565b92505060206139288582860161375a565b9150509250929050565b6000806020838503121561394957613948614906565b5b600083013567ffffffffffffffff81111561396757613966614901565b5b61397385828601613669565b92509250509250929050565b60006020828403121561399557613994614906565b5b60006139a3848285016136d4565b91505092915050565b6000602082840312156139c2576139c1614906565b5b60006139d0848285016136e9565b91505092915050565b6000602082840312156139ef576139ee614906565b5b600082013567ffffffffffffffff811115613a0d57613a0c614901565b5b613a198482850161372c565b91505092915050565b600060208284031215613a3857613a37614906565b5b6000613a468482850161375a565b91505092915050565b60008060408385031215613a6657613a65614906565b5b6000613a748582860161375a565b9250506020613a8585828601613654565b9150509250929050565b6000613a9b8383613f9a565b60208301905092915050565b613ab081614640565b82525050565b6000613ac1826144bf565b613acb81856144ed565b9350613ad6836144af565b8060005b83811015613b07578151613aee8882613a8f565b9750613af9836144e0565b925050600181019050613ada565b5085935050505092915050565b613b1d81614652565b82525050565b6000613b2e826144ca565b613b3881856144fe565b9350613b488185602086016146c3565b613b518161490b565b840191505092915050565b6000613b67826144d5565b613b71818561450f565b9350613b818185602086016146c3565b613b8a8161490b565b840191505092915050565b6000613ba0826144d5565b613baa8185614520565b9350613bba8185602086016146c3565b80840191505092915050565b6000613bd360218361450f565b9150613bde8261491c565b604082019050919050565b6000613bf6600f8361450f565b9150613c018261496b565b602082019050919050565b6000613c19602b8361450f565b9150613c2482614994565b604082019050919050565b6000613c3c60328361450f565b9150613c47826149e3565b604082019050919050565b6000613c5f60268361450f565b9150613c6a82614a32565b604082019050919050565b6000613c82601c8361450f565b9150613c8d82614a81565b602082019050919050565b6000613ca5601c8361450f565b9150613cb082614aaa565b602082019050919050565b6000613cc860278361450f565b9150613cd382614ad3565b604082019050919050565b6000613ceb600f8361450f565b9150613cf682614b22565b602082019050919050565b6000613d0e60248361450f565b9150613d1982614b4b565b604082019050919050565b6000613d3160198361450f565b9150613d3c82614b9a565b602082019050919050565b6000613d54601a8361450f565b9150613d5f82614bc3565b602082019050919050565b6000613d77602c8361450f565b9150613d8282614bec565b604082019050919050565b6000613d9a60388361450f565b9150613da582614c3b565b604082019050919050565b6000613dbd602a8361450f565b9150613dc882614c8a565b604082019050919050565b6000613de060298361450f565b9150613deb82614cd9565b604082019050919050565b6000613e0360208361450f565b9150613e0e82614d28565b602082019050919050565b6000613e26602c8361450f565b9150613e3182614d51565b604082019050919050565b6000613e49600583614520565b9150613e5482614da0565b600582019050919050565b6000613e6c60208361450f565b9150613e7782614dc9565b602082019050919050565b6000613e8f60118361450f565b9150613e9a82614df2565b602082019050919050565b6000613eb260298361450f565b9150613ebd82614e1b565b604082019050919050565b6000613ed560258361450f565b9150613ee082614e6a565b604082019050919050565b6000613ef8602f8361450f565b9150613f0382614eb9565b604082019050919050565b6000613f1b60218361450f565b9150613f2682614f08565b604082019050919050565b6000613f3e60318361450f565b9150613f4982614f57565b604082019050919050565b6000613f61602c8361450f565b9150613f6c82614fa6565b604082019050919050565b6000613f8460158361450f565b9150613f8f82614ff5565b602082019050919050565b613fa3816146aa565b82525050565b613fb2816146aa565b82525050565b6000613fc48285613b95565b9150613fd08284613b95565b9150613fdb82613e3c565b91508190509392505050565b6000602082019050613ffc6000830184613aa7565b92915050565b60006080820190506140176000830187613aa7565b6140246020830186613aa7565b6140316040830185613fa9565b81810360608301526140438184613b23565b905095945050505050565b600060208201905081810360008301526140688184613ab6565b905092915050565b60006020820190506140856000830184613b14565b92915050565b600060208201905081810360008301526140a58184613b5c565b905092915050565b600060208201905081810360008301526140c681613bc6565b9050919050565b600060208201905081810360008301526140e681613be9565b9050919050565b6000602082019050818103600083015261410681613c0c565b9050919050565b6000602082019050818103600083015261412681613c2f565b9050919050565b6000602082019050818103600083015261414681613c52565b9050919050565b6000602082019050818103600083015261416681613c75565b9050919050565b6000602082019050818103600083015261418681613c98565b9050919050565b600060208201905081810360008301526141a681613cbb565b9050919050565b600060208201905081810360008301526141c681613cde565b9050919050565b600060208201905081810360008301526141e681613d01565b9050919050565b6000602082019050818103600083015261420681613d24565b9050919050565b6000602082019050818103600083015261422681613d47565b9050919050565b6000602082019050818103600083015261424681613d6a565b9050919050565b6000602082019050818103600083015261426681613d8d565b9050919050565b6000602082019050818103600083015261428681613db0565b9050919050565b600060208201905081810360008301526142a681613dd3565b9050919050565b600060208201905081810360008301526142c681613df6565b9050919050565b600060208201905081810360008301526142e681613e19565b9050919050565b6000602082019050818103600083015261430681613e5f565b9050919050565b6000602082019050818103600083015261432681613e82565b9050919050565b6000602082019050818103600083015261434681613ea5565b9050919050565b6000602082019050818103600083015261436681613ec8565b9050919050565b6000602082019050818103600083015261438681613eeb565b9050919050565b600060208201905081810360008301526143a681613f0e565b9050919050565b600060208201905081810360008301526143c681613f31565b9050919050565b600060208201905081810360008301526143e681613f54565b9050919050565b6000602082019050818103600083015261440681613f77565b9050919050565b60006020820190506144226000830184613fa9565b92915050565b6000614432614443565b905061443e8282614728565b919050565b6000604051905090565b600067ffffffffffffffff821115614468576144676148be565b5b6144718261490b565b9050602081019050919050565b600067ffffffffffffffff821115614499576144986148be565b5b6144a28261490b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614536826146aa565b9150614541836146aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614576576145756147d3565b5b828201905092915050565b600061458c826146aa565b9150614597836146aa565b9250826145a7576145a6614802565b5b828204905092915050565b60006145bd826146aa565b91506145c8836146aa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614601576146006147d3565b5b828202905092915050565b6000614617826146aa565b9150614622836146aa565b925082821015614635576146346147d3565b5b828203905092915050565b600061464b8261468a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146e15780820151818401526020810190506146c6565b838111156146f0576000848401525b50505050565b6000600282049050600182168061470e57607f821691505b6020821081141561472257614721614831565b5b50919050565b6147318261490b565b810181811067ffffffffffffffff821117156147505761474f6148be565b5b80604052505050565b6000614764826146aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614797576147966147d3565b5b600182019050919050565b60006147ad826146aa565b91506147b8836146aa565b9250826147c8576147c7614802565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74204a694a6960008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f536f6d657468696e672077726f6e670000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f53616c6520776f756c6420657863656564206d61782057686974656c6973742060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f536f6d657468696e672057726f6e670000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f752068617665206e6f206d6f72652077686974656c697374000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f7420696e207768697465206c697374000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5072657365727665206d696e7420776f756c6420657863656564206d6178207360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b61502781614640565b811461503257600080fd5b50565b61503e81614652565b811461504957600080fd5b50565b6150558161465e565b811461506057600080fd5b50565b61506c816146aa565b811461507757600080fd5b5056fea2646970667358221220cbfce60cd11461dd67561fdc7285a7b4e6e21640ffeb828041f8773fcfcad67a64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80636817c76c1161012e578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c514610851578063f11207d81461088e578063f14c07f8146108b9578063f2fde38b146108e4578063f4a0a5281461090d5761023b565b8063b88d4fde1461076e578063beafc89b14610797578063c4e41b22146107c0578063c87b56dd146107eb578063e8acf7b7146108285761023b565b8063715018a6116100f2578063715018a61461069b5780638da5cb5b146106b257806393203294146106dd57806395d89b411461071a578063a22cb465146107455761023b565b80636817c76c146105c157806368575685146105ec5780636cbf2c2e146106175780637080d6fc1461063357806370a082311461065e5761023b565b80633215b32d116101bc57806351cff8d91161018057806351cff8d9146104e057806355f804b3146105095780635640e83c146105325780635edd95f91461055b5780636352211e146105845761023b565b80633215b32d146103e957806332cb6b0c14610412578063372c12b11461043d57806342842e0e1461047a5780634f6ccce7146104a35761023b565b806318160ddd1161020357806318160ddd146103255780631ca62dbc1461035057806323b872dd146103675780632e2a366f146103905780632f745c59146103ac5761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806312675f361461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061397f565b610936565b6040516102749190614070565b60405180910390f35b34801561028957600080fd5b50610292610948565b60405161029f919061408b565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613a22565b6109da565b6040516102dc9190613fe7565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906138f2565b610a5f565b005b34801561031a57600080fd5b50610323610b77565b005b34801561033157600080fd5b5061033a610c1f565b604051610347919061440d565b60405180910390f35b34801561035c57600080fd5b50610365610c2c565b005b34801561037357600080fd5b5061038e600480360381019061038991906137dc565b610cd4565b005b6103aa60048036038101906103a59190613a22565b610d34565b005b3480156103b857600080fd5b506103d360048036038101906103ce91906138f2565b610e75565b6040516103e0919061440d565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613932565b610f1a565b005b34801561041e57600080fd5b50610427611028565b604051610434919061440d565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f919061376f565b61102e565b604051610471919061440d565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c91906137dc565b611046565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613a22565b611066565b6040516104d7919061440d565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061376f565b6110d7565b005b34801561051557600080fd5b50610530600480360381019061052b91906139d9565b6111a3565b005b34801561053e57600080fd5b5061055960048036038101906105549190613932565b611239565b005b34801561056757600080fd5b50610582600480360381019061057d9190613a4f565b611347565b005b34801561059057600080fd5b506105ab60048036038101906105a69190613a22565b611466565b6040516105b89190613fe7565b60405180910390f35b3480156105cd57600080fd5b506105d6611518565b6040516105e3919061440d565b60405180910390f35b3480156105f857600080fd5b5061060161151e565b60405161060e919061440d565b60405180910390f35b610631600480360381019061062c9190613a22565b611524565b005b34801561063f57600080fd5b50610648611a50565b6040516106559190614070565b60405180910390f35b34801561066a57600080fd5b506106856004803603810190610680919061376f565b611a63565b604051610692919061440d565b60405180910390f35b3480156106a757600080fd5b506106b0611b1b565b005b3480156106be57600080fd5b506106c7611ba3565b6040516106d49190613fe7565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061376f565b611bcd565b604051610711919061404e565b60405180910390f35b34801561072657600080fd5b5061072f611c7b565b60405161073c919061408b565b60405180910390f35b34801561075157600080fd5b5061076c600480360381019061076791906138b2565b611d0d565b005b34801561077a57600080fd5b506107956004803603810190610790919061382f565b611d23565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613a22565b611d85565b005b3480156107cc57600080fd5b506107d5611e0b565b6040516107e2919061440d565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190613a22565b611e1a565b60405161081f919061408b565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613932565b611ee0565b005b34801561085d57600080fd5b506108786004803603810190610873919061379c565b611fee565b6040516108859190614070565b60405180910390f35b34801561089a57600080fd5b506108a3612082565b6040516108b09190614070565b60405180910390f35b3480156108c557600080fd5b506108ce612095565b6040516108db919061440d565b60405180910390f35b3480156108f057600080fd5b5061090b6004803603810190610906919061376f565b61209b565b005b34801561091957600080fd5b50610934600480360381019061092f9190613a22565b612193565b005b600061094182612219565b9050919050565b606060008054610957906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610983906146f6565b80156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b5050505050905090565b60006109e582612293565b610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b906142cd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6a82611466565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad29061438d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610afa6122ff565b73ffffffffffffffffffffffffffffffffffffffff161480610b295750610b2881610b236122ff565b611fee565b5b610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f9061424d565b60405180910390fd5b610b728383612307565b505050565b610b7f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16610b9d611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906142ed565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b6000600880549050905090565b610c346122ff565b73ffffffffffffffffffffffffffffffffffffffff16610c52611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f906142ed565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b610ce5610cdf6122ff565b826123c0565b610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b906143ad565b60405180910390fd5b610d2f83838361249e565b505050565b600a60159054906101000a900460ff16610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a906140ad565b60405180910390fd5b6101a481610d8f610c1f565b610d99919061452b565b1115610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd19061416d565b60405180910390fd5b34600b5482610de991906145b2565b1115610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906143ed565b60405180910390fd5b610e3481336126fa565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e610e5d610c1f565b604051610e6a919061440d565b60405180910390a150565b6000610e8083611a63565b8210610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906140ed565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f226122ff565b73ffffffffffffffffffffffffffffffffffffffff16610f40611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906142ed565b60405180910390fd5b60005b82829050811015611023576003600f6000858585818110610fbd57610fbc61488f565b5b9050602002016020810190610fd2919061376f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061101b90614759565b915050610f99565b505050565b6101a481565b600f6020528060005260406000206000915090505481565b61106183838360405180602001604052806000815250611d23565b505050565b6000611070610c1f565b82106110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a8906143cd565b60405180910390fd5b600882815481106110c5576110c461488f565b5b90600052602060002001549050919050565b6110df6122ff565b73ffffffffffffffffffffffffffffffffffffffff166110fd611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a906142ed565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561119e573d6000803e3d6000fd5b505050565b6111ab6122ff565b73ffffffffffffffffffffffffffffffffffffffff166111c9611ba3565b73ffffffffffffffffffffffffffffffffffffffff161461121f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611216906142ed565b60405180910390fd5b80600e908051906020019061123592919061352d565b5050565b6112416122ff565b73ffffffffffffffffffffffffffffffffffffffff1661125f611ba3565b73ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac906142ed565b60405180910390fd5b60005b82829050811015611342576004600f60008585858181106112dc576112db61488f565b5b90506020020160208101906112f1919061376f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061133a90614759565b9150506112b8565b505050565b61134f6122ff565b73ffffffffffffffffffffffffffffffffffffffff1661136d611ba3565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906142ed565b60405180910390fd5b6101a4826113cf610c1f565b6113d9919061452b565b111561141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114119061434d565b60405180910390fd5b61142482826126fa565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e61144d610c1f565b60405161145a919061440d565b60405180910390a15050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115069061428d565b60405180910390fd5b80915050919050565b600b5481565b600c5481565b600a60149054906101000a900460ff16611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a906140ad565b60405180910390fd5b6101a48161157f610c1f565b611589919061452b565b11156115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c19061416d565b60405180910390fd5b600d54816115d733611a63565b6115e1919061452b565b1115611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061418d565b60405180910390fd5b6000600c54905034818361163691906145b2565b1115611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e906143ed565b60405180910390fd5b6004600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561171a57600c54905081600d546116d2919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a04565b6003600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156117bc57600c549050816003611774919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a03565b6002600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561185e57600c549050816002611816919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a02565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561194357600182146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e0906141ad565b60405180910390fd5b600c5490508160016118fb919061460c565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a01565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd9061420d565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061430d565b60405180910390fd5b5b5b5b611a0e82336126fa565b7ff00d28232b285f24f2e38415deb2ceb31069e70d4505838b3911b4f02058502e611a37610c1f565b604051611a44919061440d565b60405180910390a15050565b600a60159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb9061426d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b236122ff565b73ffffffffffffffffffffffffffffffffffffffff16611b41611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e906142ed565b60405180910390fd5b611ba1600061273f565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606000611bda83611a63565b905060008167ffffffffffffffff811115611bf857611bf76148be565b5b604051908082528060200260200182016040528015611c265781602001602082028036833780820191505090505b50905060005b82811015611c7057611c3e8582610e75565b828281518110611c5157611c5061488f565b5b6020026020010181815250508080611c6890614759565b915050611c2c565b508092505050919050565b606060018054611c8a906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb6906146f6565b8015611d035780601f10611cd857610100808354040283529160200191611d03565b820191906000526020600020905b815481529060010190602001808311611ce657829003601f168201915b5050505050905090565b611d1f611d186122ff565b8383612805565b5050565b611d34611d2e6122ff565b836123c0565b611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906143ad565b60405180910390fd5b611d7f84848484612972565b50505050565b611d8d6122ff565b73ffffffffffffffffffffffffffffffffffffffff16611dab611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906142ed565b60405180910390fd5b80600c8190555050565b6000611e15610c1f565b905090565b6060611e2582612293565b611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b9061436d565b60405180910390fd5b6101a48210611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f906140cd565b60405180910390fd5b611eb06129ce565b611eb983612a60565b604051602001611eca929190613fb8565b6040516020818303038152906040529050919050565b611ee86122ff565b73ffffffffffffffffffffffffffffffffffffffff16611f06611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f53906142ed565b60405180910390fd5b60005b82829050811015611fe9576002600f6000858585818110611f8357611f8261488f565b5b9050602002016020810190611f98919061376f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611fe190614759565b915050611f5f565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b600d5481565b6120a36122ff565b73ffffffffffffffffffffffffffffffffffffffff166120c1611ba3565b73ffffffffffffffffffffffffffffffffffffffff1614612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e906142ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9061412d565b60405180910390fd5b6121908161273f565b50565b61219b6122ff565b73ffffffffffffffffffffffffffffffffffffffff166121b9611ba3565b73ffffffffffffffffffffffffffffffffffffffff161461220f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612206906142ed565b60405180910390fd5b80600b8190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061228c575061228b82612bc1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661237a83611466565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123cb82612293565b61240a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124019061422d565b60405180910390fd5b600061241583611466565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061248457508373ffffffffffffffffffffffffffffffffffffffff1661246c846109da565b73ffffffffffffffffffffffffffffffffffffffff16145b8061249557506124948185611fee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124be82611466565b73ffffffffffffffffffffffffffffffffffffffff1614612514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b9061432d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b906141cd565b60405180910390fd5b61258f838383612ca3565b61259a600082612307565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ea919061460c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612641919061452b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612704610c1f565b905060005b8381101561273957612726838284612721919061452b565b612cb3565b808061273190614759565b915050612709565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b906141ed565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129659190614070565b60405180910390a3505050565b61297d84848461249e565b61298984848484612cd1565b6129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061410d565b60405180910390fd5b50505050565b6060600e80546129dd906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612a09906146f6565b8015612a565780601f10612a2b57610100808354040283529160200191612a56565b820191906000526020600020905b815481529060010190602001808311612a3957829003601f168201915b5050505050905090565b60606000821415612aa8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bbc565b600082905060005b60008214612ada578080612ac390614759565b915050600a82612ad39190614581565b9150612ab0565b60008167ffffffffffffffff811115612af657612af56148be565b5b6040519080825280601f01601f191660200182016040528015612b285781602001600182028036833780820191505090505b5090505b60008514612bb557600182612b41919061460c565b9150600a85612b5091906147a2565b6030612b5c919061452b565b60f81b818381518110612b7257612b7161488f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bae9190614581565b9450612b2c565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c9c5750612c9b82612e68565b5b9050919050565b612cae838383612ed2565b505050565b612ccd828260405180602001604052806000815250612fe6565b5050565b6000612cf28473ffffffffffffffffffffffffffffffffffffffff16613041565b15612e5b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d1b6122ff565b8786866040518563ffffffff1660e01b8152600401612d3d9493929190614002565b602060405180830381600087803b158015612d5757600080fd5b505af1925050508015612d8857506040513d601f19601f82011682018060405250810190612d8591906139ac565b60015b612e0b573d8060008114612db8576040519150601f19603f3d011682016040523d82523d6000602084013e612dbd565b606091505b50600081511415612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa9061410d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e60565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612edd838383613054565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f2057612f1b81613059565b612f5f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f5e57612f5d83826130a2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fa257612f9d8161320f565b612fe1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fe057612fdf82826132e0565b5b5b505050565b612ff0838361335f565b612ffd6000848484612cd1565b61303c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130339061410d565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130af84611a63565b6130b9919061460c565b905060006007600084815260200190815260200160002054905081811461319e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613223919061460c565b90506000600960008481526020019081526020016000205490506000600883815481106132535761325261488f565b5b9060005260206000200154905080600883815481106132755761327461488f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132c4576132c3614860565b5b6001900381819060005260206000200160009055905550505050565b60006132eb83611a63565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c6906142ad565b60405180910390fd5b6133d881612293565b15613418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340f9061414d565b60405180910390fd5b61342460008383612ca3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613474919061452b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613539906146f6565b90600052602060002090601f01602090048101928261355b57600085556135a2565b82601f1061357457805160ff19168380011785556135a2565b828001600101855582156135a2579182015b828111156135a1578251825591602001919060010190613586565b5b5090506135af91906135b3565b5090565b5b808211156135cc5760008160009055506001016135b4565b5090565b60006135e36135de8461444d565b614428565b9050828152602081018484840111156135ff576135fe6148fc565b5b61360a8482856146b4565b509392505050565b60006136256136208461447e565b614428565b905082815260208101848484011115613641576136406148fc565b5b61364c8482856146b4565b509392505050565b6000813590506136638161501e565b92915050565b60008083601f84011261367f5761367e6148f2565b5b8235905067ffffffffffffffff81111561369c5761369b6148ed565b5b6020830191508360208202830111156136b8576136b76148f7565b5b9250929050565b6000813590506136ce81615035565b92915050565b6000813590506136e38161504c565b92915050565b6000815190506136f88161504c565b92915050565b600082601f830112613713576137126148f2565b5b81356137238482602086016135d0565b91505092915050565b600082601f830112613741576137406148f2565b5b8135613751848260208601613612565b91505092915050565b60008135905061376981615063565b92915050565b60006020828403121561378557613784614906565b5b600061379384828501613654565b91505092915050565b600080604083850312156137b3576137b2614906565b5b60006137c185828601613654565b92505060206137d285828601613654565b9150509250929050565b6000806000606084860312156137f5576137f4614906565b5b600061380386828701613654565b935050602061381486828701613654565b92505060406138258682870161375a565b9150509250925092565b6000806000806080858703121561384957613848614906565b5b600061385787828801613654565b945050602061386887828801613654565b93505060406138798782880161375a565b925050606085013567ffffffffffffffff81111561389a57613899614901565b5b6138a6878288016136fe565b91505092959194509250565b600080604083850312156138c9576138c8614906565b5b60006138d785828601613654565b92505060206138e8858286016136bf565b9150509250929050565b6000806040838503121561390957613908614906565b5b600061391785828601613654565b92505060206139288582860161375a565b9150509250929050565b6000806020838503121561394957613948614906565b5b600083013567ffffffffffffffff81111561396757613966614901565b5b61397385828601613669565b92509250509250929050565b60006020828403121561399557613994614906565b5b60006139a3848285016136d4565b91505092915050565b6000602082840312156139c2576139c1614906565b5b60006139d0848285016136e9565b91505092915050565b6000602082840312156139ef576139ee614906565b5b600082013567ffffffffffffffff811115613a0d57613a0c614901565b5b613a198482850161372c565b91505092915050565b600060208284031215613a3857613a37614906565b5b6000613a468482850161375a565b91505092915050565b60008060408385031215613a6657613a65614906565b5b6000613a748582860161375a565b9250506020613a8585828601613654565b9150509250929050565b6000613a9b8383613f9a565b60208301905092915050565b613ab081614640565b82525050565b6000613ac1826144bf565b613acb81856144ed565b9350613ad6836144af565b8060005b83811015613b07578151613aee8882613a8f565b9750613af9836144e0565b925050600181019050613ada565b5085935050505092915050565b613b1d81614652565b82525050565b6000613b2e826144ca565b613b3881856144fe565b9350613b488185602086016146c3565b613b518161490b565b840191505092915050565b6000613b67826144d5565b613b71818561450f565b9350613b818185602086016146c3565b613b8a8161490b565b840191505092915050565b6000613ba0826144d5565b613baa8185614520565b9350613bba8185602086016146c3565b80840191505092915050565b6000613bd360218361450f565b9150613bde8261491c565b604082019050919050565b6000613bf6600f8361450f565b9150613c018261496b565b602082019050919050565b6000613c19602b8361450f565b9150613c2482614994565b604082019050919050565b6000613c3c60328361450f565b9150613c47826149e3565b604082019050919050565b6000613c5f60268361450f565b9150613c6a82614a32565b604082019050919050565b6000613c82601c8361450f565b9150613c8d82614a81565b602082019050919050565b6000613ca5601c8361450f565b9150613cb082614aaa565b602082019050919050565b6000613cc860278361450f565b9150613cd382614ad3565b604082019050919050565b6000613ceb600f8361450f565b9150613cf682614b22565b602082019050919050565b6000613d0e60248361450f565b9150613d1982614b4b565b604082019050919050565b6000613d3160198361450f565b9150613d3c82614b9a565b602082019050919050565b6000613d54601a8361450f565b9150613d5f82614bc3565b602082019050919050565b6000613d77602c8361450f565b9150613d8282614bec565b604082019050919050565b6000613d9a60388361450f565b9150613da582614c3b565b604082019050919050565b6000613dbd602a8361450f565b9150613dc882614c8a565b604082019050919050565b6000613de060298361450f565b9150613deb82614cd9565b604082019050919050565b6000613e0360208361450f565b9150613e0e82614d28565b602082019050919050565b6000613e26602c8361450f565b9150613e3182614d51565b604082019050919050565b6000613e49600583614520565b9150613e5482614da0565b600582019050919050565b6000613e6c60208361450f565b9150613e7782614dc9565b602082019050919050565b6000613e8f60118361450f565b9150613e9a82614df2565b602082019050919050565b6000613eb260298361450f565b9150613ebd82614e1b565b604082019050919050565b6000613ed560258361450f565b9150613ee082614e6a565b604082019050919050565b6000613ef8602f8361450f565b9150613f0382614eb9565b604082019050919050565b6000613f1b60218361450f565b9150613f2682614f08565b604082019050919050565b6000613f3e60318361450f565b9150613f4982614f57565b604082019050919050565b6000613f61602c8361450f565b9150613f6c82614fa6565b604082019050919050565b6000613f8460158361450f565b9150613f8f82614ff5565b602082019050919050565b613fa3816146aa565b82525050565b613fb2816146aa565b82525050565b6000613fc48285613b95565b9150613fd08284613b95565b9150613fdb82613e3c565b91508190509392505050565b6000602082019050613ffc6000830184613aa7565b92915050565b60006080820190506140176000830187613aa7565b6140246020830186613aa7565b6140316040830185613fa9565b81810360608301526140438184613b23565b905095945050505050565b600060208201905081810360008301526140688184613ab6565b905092915050565b60006020820190506140856000830184613b14565b92915050565b600060208201905081810360008301526140a58184613b5c565b905092915050565b600060208201905081810360008301526140c681613bc6565b9050919050565b600060208201905081810360008301526140e681613be9565b9050919050565b6000602082019050818103600083015261410681613c0c565b9050919050565b6000602082019050818103600083015261412681613c2f565b9050919050565b6000602082019050818103600083015261414681613c52565b9050919050565b6000602082019050818103600083015261416681613c75565b9050919050565b6000602082019050818103600083015261418681613c98565b9050919050565b600060208201905081810360008301526141a681613cbb565b9050919050565b600060208201905081810360008301526141c681613cde565b9050919050565b600060208201905081810360008301526141e681613d01565b9050919050565b6000602082019050818103600083015261420681613d24565b9050919050565b6000602082019050818103600083015261422681613d47565b9050919050565b6000602082019050818103600083015261424681613d6a565b9050919050565b6000602082019050818103600083015261426681613d8d565b9050919050565b6000602082019050818103600083015261428681613db0565b9050919050565b600060208201905081810360008301526142a681613dd3565b9050919050565b600060208201905081810360008301526142c681613df6565b9050919050565b600060208201905081810360008301526142e681613e19565b9050919050565b6000602082019050818103600083015261430681613e5f565b9050919050565b6000602082019050818103600083015261432681613e82565b9050919050565b6000602082019050818103600083015261434681613ea5565b9050919050565b6000602082019050818103600083015261436681613ec8565b9050919050565b6000602082019050818103600083015261438681613eeb565b9050919050565b600060208201905081810360008301526143a681613f0e565b9050919050565b600060208201905081810360008301526143c681613f31565b9050919050565b600060208201905081810360008301526143e681613f54565b9050919050565b6000602082019050818103600083015261440681613f77565b9050919050565b60006020820190506144226000830184613fa9565b92915050565b6000614432614443565b905061443e8282614728565b919050565b6000604051905090565b600067ffffffffffffffff821115614468576144676148be565b5b6144718261490b565b9050602081019050919050565b600067ffffffffffffffff821115614499576144986148be565b5b6144a28261490b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614536826146aa565b9150614541836146aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614576576145756147d3565b5b828201905092915050565b600061458c826146aa565b9150614597836146aa565b9250826145a7576145a6614802565b5b828204905092915050565b60006145bd826146aa565b91506145c8836146aa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614601576146006147d3565b5b828202905092915050565b6000614617826146aa565b9150614622836146aa565b925082821015614635576146346147d3565b5b828203905092915050565b600061464b8261468a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146e15780820151818401526020810190506146c6565b838111156146f0576000848401525b50505050565b6000600282049050600182168061470e57607f821691505b6020821081141561472257614721614831565b5b50919050565b6147318261490b565b810181811067ffffffffffffffff821117156147505761474f6148be565b5b80604052505050565b6000614764826146aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614797576147966147d3565b5b600182019050919050565b60006147ad826146aa565b91506147b8836146aa565b9250826147c8576147c7614802565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74204a694a6960008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f536f6d657468696e672077726f6e670000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c6520776f756c6420657863656564206d617820737570706c7900000000600082015250565b7f53616c6520776f756c6420657863656564206d61782057686974656c6973742060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f536f6d657468696e672057726f6e670000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f752068617665206e6f206d6f72652077686974656c697374000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f7420696e207768697465206c697374000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5072657365727665206d696e7420776f756c6420657863656564206d6178207360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b61502781614640565b811461503257600080fd5b50565b61503e81614652565b811461504957600080fd5b50565b6150558161465e565b811461506057600080fd5b50565b61506c816146aa565b811461507757600080fd5b5056fea2646970667358221220cbfce60cd11461dd67561fdc7285a7b4e6e21640ffeb828041f8773fcfcad67a64736f6c63430008070033

Deployed Bytecode Sourcemap

44530:5151:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49490:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25746:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27305:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26828:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45224:86;;;;;;;;;;;;;:::i;:::-;;38788:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45101;;;;;;;;;;;;;:::i;:::-;;28055:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46909:357;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38456:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45728:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44719:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44944:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28465:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38978:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46092:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48728:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45550:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46237:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25440:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44764:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44806:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47275:1229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44663:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25170:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2771:103;;;;;;;;;;;;;:::i;:::-;;2120:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46581:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25915:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27598:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28721:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45422:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46482:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48962:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45906:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27824:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44616:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44853:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3029:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45322:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49490:188;49613:4;49636:36;49660:11;49636:23;:36::i;:::-;49629:43;;49490:188;;;:::o;25746:100::-;25800:13;25833:5;25826:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25746:100;:::o;27305:221::-;27381:7;27409:16;27417:7;27409;:16::i;:::-;27401:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27494:15;:24;27510:7;27494:24;;;;;;;;;;;;;;;;;;;;;27487:31;;27305:221;;;:::o;26828:411::-;26909:13;26925:23;26940:7;26925:14;:23::i;:::-;26909:39;;26973:5;26967:11;;:2;:11;;;;26959:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27067:5;27051:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27076:37;27093:5;27100:12;:10;:12::i;:::-;27076:16;:37::i;:::-;27051:62;27029:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27210:21;27219:2;27223:7;27210:8;:21::i;:::-;26898:341;26828:411;;:::o;45224:86::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45291:13:::1;;;;;;;;;;;45290:14;45274:13;;:30;;;;;;;;;;;;;;;;;;45224:86::o:0;38788:113::-;38849:7;38876:10;:17;;;;38869:24;;38788:113;:::o;45101:::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45186:22:::1;;;;;;;;;;;45185:23;45160:22;;:48;;;;;;;;;;;;;;;;;;45101:113::o:0;28055:339::-;28250:41;28269:12;:10;:12::i;:::-;28283:7;28250:18;:41::i;:::-;28242:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28358:28;28368:4;28374:2;28378:7;28358:9;:28::i;:::-;28055:339;;;:::o;46909:357::-;46973:13;;;;;;;;;;;46965:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44756:3;47055:8;47039:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;47031:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;47149:9;47136;;47125:8;:20;;;;:::i;:::-;:33;;47117:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47191:31;47201:8;47211:10;47191:9;:31::i;:::-;47234:26;47246:13;:11;:13::i;:::-;47234:26;;;;;;:::i;:::-;;;;;;;;46909:357;:::o;38456:256::-;38553:7;38589:23;38606:5;38589:16;:23::i;:::-;38581:5;:31;38573:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38678:12;:19;38691:5;38678:19;;;;;;;;;;;;;;;:26;38698:5;38678:26;;;;;;;;;;;;38671:33;;38456:256;;;;:::o;45728:174::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45812:6:::1;45808:89;45828:10;;:17;;45824:1;:21;45808:89;;;45888:1;45861:9;:24;45871:10;;45882:1;45871:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45861:24;;;;;;;;;;;;;;;:28;;;;45847:3;;;;;:::i;:::-;;;;45808:89;;;;45728:174:::0;;:::o;44719:40::-;44756:3;44719:40;:::o;44944:44::-;;;;;;;;;;;;;;;;;:::o;28465:185::-;28603:39;28620:4;28626:2;28630:7;28603:39;;;;;;;;;;;;:16;:39::i;:::-;28465:185;;;:::o;38978:233::-;39053:7;39089:30;:28;:30::i;:::-;39081:5;:38;39073:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39186:10;39197:5;39186:17;;;;;;;;:::i;:::-;;;;;;;;;;39179:24;;38978:233;;;:::o;46092:135::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46146:15:::1;46164:21;46146:39;;46200:2;46192:20;;:29;46213:7;46192:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46139:88;46092:135:::0;:::o;48728:103::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48817:8:::1;48798:16;:27;;;;;;;;;;;;:::i;:::-;;48728:103:::0;:::o;45550:174::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45634:6:::1;45630:89;45650:10;;:17;;45646:1;:21;45630:89;;;45710:1;45683:9;:24;45693:10;;45704:1;45693:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45683:24;;;;;;;;;;;;;;;:28;;;;45669:3;;;;;:::i;:::-;;;;45630:89;;;;45550:174:::0;;:::o;46237:235::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44756:3:::1;46334:8;46318:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;46310:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;46405:23;46415:8;46425:2;46405:9;:23::i;:::-;46440:26;46452:13;:11;:13::i;:::-;46440:26;;;;;;:::i;:::-;;;;;;;;46237:235:::0;;:::o;25440:239::-;25512:7;25532:13;25548:7;:16;25556:7;25548:16;;;;;;;;;;;;;;;;;;;;;25532:32;;25600:1;25583:19;;:5;:19;;;;25575:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25666:5;25659:12;;;25440:239;;;:::o;44764:37::-;;;;:::o;44806:42::-;;;;:::o;47275:1229::-;47348:22;;;;;;;;;;;47340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44756:3;47439:8;47423:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;47415:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;47545:19;;47533:8;47509:21;47519:10;47509:9;:21::i;:::-;:32;;;;:::i;:::-;:55;;47501:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;47615:13;47631:14;;47615:30;;47680:9;47671:5;47660:8;:16;;;;:::i;:::-;:29;;47652:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47751:1;47726:9;:21;47736:10;47726:21;;;;;;;;;;;;;;;;:26;47722:689;;;47769:14;;47761:22;;47834:8;47814:19;;:28;;;;:::i;:::-;47790:9;:21;47800:10;47790:21;;;;;;;;;;;;;;;:52;;;;47722:689;;;47890:1;47865:9;:21;47875:10;47865:21;;;;;;;;;;;;;;;;:26;47862:549;;;47909:14;;47901:22;;47956:8;47954:1;:10;;;;:::i;:::-;47930:9;:21;47940:10;47930:21;;;;;;;;;;;;;;;:34;;;;47862:549;;;48011:1;47986:9;:21;47996:10;47986:21;;;;;;;;;;;;;;;;:26;47983:428;;;48030:14;;48022:22;;48077:8;48075:1;:10;;;;:::i;:::-;48051:9;:21;48061:10;48051:21;;;;;;;;;;;;;;;:34;;;;47983:428;;;48132:1;48107:9;:21;48117:10;48107:21;;;;;;;;;;;;;;;;:26;48104:307;;;48163:1;48151:8;:13;48143:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;48200:14;;48192:22;;48247:8;48245:1;:10;;;;:::i;:::-;48221:9;:21;48231:10;48221:21;;;;;;;;;;;;;;;:34;;;;48104:307;;;48302:1;48277:9;:21;48287:10;48277:21;;;;;;;;;;;;;;;;:26;48274:137;;;48313:36;;;;;;;;;;:::i;:::-;;;;;;;;48274:137;48376:27;;;;;;;;;;:::i;:::-;;;;;;;;48104:307;47983:428;47862:549;47722:689;48429:31;48439:8;48449:10;48429:9;:31::i;:::-;48472:26;48484:13;:11;:13::i;:::-;48472:26;;;;;;:::i;:::-;;;;;;;;47333:1171;47275:1229;:::o;44663:33::-;;;;;;;;;;;;;:::o;25170:208::-;25242:7;25287:1;25270:19;;:5;:19;;;;25262:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25354:9;:16;25364:5;25354:16;;;;;;;;;;;;;;;;25347:23;;25170:208;;;:::o;2771:103::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2836:30:::1;2863:1;2836:18;:30::i;:::-;2771:103::o:0;2120:87::-;2166:7;2193:6;;;;;;;;;;;2186:13;;2120:87;:::o;46581:316::-;46642:16;46667:18;46688:17;46698:6;46688:9;:17::i;:::-;46667:38;;46712:25;46754:10;46740:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46712:53;;46777:9;46772:98;46792:10;46788:1;:14;46772:98;;;46832:30;46852:6;46860:1;46832:19;:30::i;:::-;46818:8;46827:1;46818:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;46804:3;;;;;:::i;:::-;;;;46772:98;;;;46883:8;46876:15;;;;46581:316;;;:::o;25915:104::-;25971:13;26004:7;25997:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25915:104;:::o;27598:155::-;27693:52;27712:12;:10;:12::i;:::-;27726:8;27736;27693:18;:52::i;:::-;27598:155;;:::o;28721:328::-;28896:41;28915:12;:10;:12::i;:::-;28929:7;28896:18;:41::i;:::-;28888:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29002:39;29016:4;29022:2;29026:7;29035:5;29002:13;:39::i;:::-;28721:328;;;;:::o;45422:114::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45515:15:::1;45498:14;:32;;;;45422:114:::0;:::o;46482:89::-;46529:7;46552:13;:11;:13::i;:::-;46545:20;;46482:89;:::o;48962:316::-;49035:13;49065:16;49073:7;49065;:16::i;:::-;49057:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44756:3;49148:7;:20;49140:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;49229:10;:8;:10::i;:::-;49241:18;:7;:16;:18::i;:::-;49212:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49198:72;;48962:316;;;:::o;45906:174::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45990:6:::1;45986:89;46006:10;;:17;;46002:1;:21;45986:89;;;46066:1;46039:9;:24;46049:10;;46060:1;46049:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46039:24;;;;;;;;;;;;;;;:28;;;;46025:3;;;;;:::i;:::-;;;;45986:89;;;;45906:174:::0;;:::o;27824:164::-;27921:4;27945:18;:25;27964:5;27945:25;;;;;;;;;;;;;;;:35;27971:8;27945:35;;;;;;;;;;;;;;;;;;;;;;;;;27938:42;;27824:164;;;;:::o;44616:42::-;;;;;;;;;;;;;:::o;44853:38::-;;;;:::o;3029:201::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3138:1:::1;3118:22;;:8;:22;;;;3110:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3194:28;3213:8;3194:18;:28::i;:::-;3029:201:::0;:::o;45322:94::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45400:10:::1;45388:9;:22;;;;45322:94:::0;:::o;38148:224::-;38250:4;38289:35;38274:50;;;:11;:50;;;;:90;;;;38328:36;38352:11;38328:23;:36::i;:::-;38274:90;38267:97;;38148:224;;;:::o;30559:127::-;30624:4;30676:1;30648:30;;:7;:16;30656:7;30648:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30641:37;;30559:127;;;:::o;869:98::-;922:7;949:10;942:17;;869:98;:::o;34541:174::-;34643:2;34616:15;:24;34632:7;34616:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34699:7;34695:2;34661:46;;34670:23;34685:7;34670:14;:23::i;:::-;34661:46;;;;;;;;;;;;34541:174;;:::o;30853:348::-;30946:4;30971:16;30979:7;30971;:16::i;:::-;30963:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31047:13;31063:23;31078:7;31063:14;:23::i;:::-;31047:39;;31116:5;31105:16;;:7;:16;;;:51;;;;31149:7;31125:31;;:20;31137:7;31125:11;:20::i;:::-;:31;;;31105:51;:87;;;;31160:32;31177:5;31184:7;31160:16;:32::i;:::-;31105:87;31097:96;;;30853:348;;;;:::o;33845:578::-;34004:4;33977:31;;:23;33992:7;33977:14;:23::i;:::-;:31;;;33969:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34087:1;34073:16;;:2;:16;;;;34065:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34143:39;34164:4;34170:2;34174:7;34143:20;:39::i;:::-;34247:29;34264:1;34268:7;34247:8;:29::i;:::-;34308:1;34289:9;:15;34299:4;34289:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34337:1;34320:9;:13;34330:2;34320:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34368:2;34349:7;:16;34357:7;34349:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34407:7;34403:2;34388:27;;34397:4;34388:27;;;;;;;;;;;;33845:578;;;:::o;48516:202::-;48588:14;48605:13;:11;:13::i;:::-;48588:30;;48630:9;48625:88;48649:8;48645:1;:12;48625:88;;;48673:32;48683:9;48703:1;48694:6;:10;;;;:::i;:::-;48673:9;:32::i;:::-;48659:3;;;;;:::i;:::-;;;;48625:88;;;;48581:137;48516:202;;:::o;3390:191::-;3464:16;3483:6;;;;;;;;;;;3464:25;;3509:8;3500:6;;:17;;;;;;;;;;;;;;;;;;3564:8;3533:40;;3554:8;3533:40;;;;;;;;;;;;3453:128;3390:191;:::o;34857:315::-;35012:8;35003:17;;:5;:17;;;;34995:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35099:8;35061:18;:25;35080:5;35061:25;;;;;;;;;;;;;;;:35;35087:8;35061:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35145:8;35123:41;;35138:5;35123:41;;;35155:8;35123:41;;;;;;:::i;:::-;;;;;;;;34857:315;;;:::o;29931:::-;30088:28;30098:4;30104:2;30108:7;30088:9;:28::i;:::-;30135:48;30158:4;30164:2;30168:7;30177:5;30135:22;:48::i;:::-;30127:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29931:315;;;;:::o;48841:111::-;48901:13;48930:16;48923:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48841:111;:::o;14796:723::-;14852:13;15082:1;15073:5;:10;15069:53;;;15100:10;;;;;;;;;;;;;;;;;;;;;15069:53;15132:12;15147:5;15132:20;;15163:14;15188:78;15203:1;15195:4;:9;15188:78;;15221:8;;;;;:::i;:::-;;;;15252:2;15244:10;;;;;:::i;:::-;;;15188:78;;;15276:19;15308:6;15298:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15276:39;;15326:154;15342:1;15333:5;:10;15326:154;;15370:1;15360:11;;;;;:::i;:::-;;;15437:2;15429:5;:10;;;;:::i;:::-;15416:2;:24;;;;:::i;:::-;15403:39;;15386:6;15393;15386:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15466:2;15457:11;;;;;:::i;:::-;;;15326:154;;;15504:6;15490:21;;;;;14796:723;;;;:::o;24801:305::-;24903:4;24955:25;24940:40;;;:11;:40;;;;:105;;;;25012:33;24997:48;;;:11;:48;;;;24940:105;:158;;;;25062:36;25086:11;25062:23;:36::i;:::-;24940:158;24920:178;;24801:305;;;:::o;49284:196::-;49429:45;49456:4;49462:2;49466:7;49429:26;:45::i;:::-;49284:196;;;:::o;31543:110::-;31619:26;31629:2;31633:7;31619:26;;;;;;;;;;;;:9;:26::i;:::-;31543:110;;:::o;35737:799::-;35892:4;35913:15;:2;:13;;;:15::i;:::-;35909:620;;;35965:2;35949:36;;;35986:12;:10;:12::i;:::-;36000:4;36006:7;36015:5;35949:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35945:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36208:1;36191:6;:13;:18;36187:272;;;36234:60;;;;;;;;;;:::i;:::-;;;;;;;;36187:272;36409:6;36403:13;36394:6;36390:2;36386:15;36379:38;35945:529;36082:41;;;36072:51;;;:6;:51;;;;36065:58;;;;;35909:620;36513:4;36506:11;;35737:799;;;;;;;:::o;14321:157::-;14406:4;14445:25;14430:40;;;:11;:40;;;;14423:47;;14321:157;;;:::o;39824:589::-;39968:45;39995:4;40001:2;40005:7;39968:26;:45::i;:::-;40046:1;40030:18;;:4;:18;;;40026:187;;;40065:40;40097:7;40065:31;:40::i;:::-;40026:187;;;40135:2;40127:10;;:4;:10;;;40123:90;;40154:47;40187:4;40193:7;40154:32;:47::i;:::-;40123:90;40026:187;40241:1;40227:16;;:2;:16;;;40223:183;;;40260:45;40297:7;40260:36;:45::i;:::-;40223:183;;;40333:4;40327:10;;:2;:10;;;40323:83;;40354:40;40382:2;40386:7;40354:27;:40::i;:::-;40323:83;40223:183;39824:589;;;:::o;31880:321::-;32010:18;32016:2;32020:7;32010:5;:18::i;:::-;32061:54;32092:1;32096:2;32100:7;32109:5;32061:22;:54::i;:::-;32039:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31880:321;;;:::o;4354:387::-;4414:4;4622:12;4689:7;4677:20;4669:28;;4732:1;4725:4;:8;4718:15;;;4354:387;;;:::o;37108:126::-;;;;:::o;41136:164::-;41240:10;:17;;;;41213:15;:24;41229:7;41213:24;;;;;;;;;;;:44;;;;41268:10;41284:7;41268:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41136:164;:::o;41927:988::-;42193:22;42243:1;42218:22;42235:4;42218:16;:22::i;:::-;:26;;;;:::i;:::-;42193:51;;42255:18;42276:17;:26;42294:7;42276:26;;;;;;;;;;;;42255:47;;42423:14;42409:10;:28;42405:328;;42454:19;42476:12;:18;42489:4;42476:18;;;;;;;;;;;;;;;:34;42495:14;42476:34;;;;;;;;;;;;42454:56;;42560:11;42527:12;:18;42540:4;42527:18;;;;;;;;;;;;;;;:30;42546:10;42527:30;;;;;;;;;;;:44;;;;42677:10;42644:17;:30;42662:11;42644:30;;;;;;;;;;;:43;;;;42439:294;42405:328;42829:17;:26;42847:7;42829:26;;;;;;;;;;;42822:33;;;42873:12;:18;42886:4;42873:18;;;;;;;;;;;;;;;:34;42892:14;42873:34;;;;;;;;;;;42866:41;;;42008:907;;41927:988;;:::o;43210:1079::-;43463:22;43508:1;43488:10;:17;;;;:21;;;;:::i;:::-;43463:46;;43520:18;43541:15;:24;43557:7;43541:24;;;;;;;;;;;;43520:45;;43892:19;43914:10;43925:14;43914:26;;;;;;;;:::i;:::-;;;;;;;;;;43892:48;;43978:11;43953:10;43964;43953:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44089:10;44058:15;:28;44074:11;44058:28;;;;;;;;;;;:41;;;;44230:15;:24;44246:7;44230:24;;;;;;;;;;;44223:31;;;44265:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43281:1008;;;43210:1079;:::o;40714:221::-;40799:14;40816:20;40833:2;40816:16;:20::i;:::-;40799:37;;40874:7;40847:12;:16;40860:2;40847:16;;;;;;;;;;;;;;;:24;40864:6;40847:24;;;;;;;;;;;:34;;;;40921:6;40892:17;:26;40910:7;40892:26;;;;;;;;;;;:35;;;;40788:147;40714:221;;:::o;32537:382::-;32631:1;32617:16;;:2;:16;;;;32609:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32690:16;32698:7;32690;:16::i;:::-;32689:17;32681:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32752:45;32781:1;32785:2;32789:7;32752:20;:45::i;:::-;32827:1;32810:9;:13;32820:2;32810:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32858:2;32839:7;:16;32847:7;32839:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32903:7;32899:2;32878:33;;32895:1;32878:33;;;;;;;;;;;;32537:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:474::-;8382:6;8390;8439:2;8427:9;8418:7;8414:23;8410:32;8407:119;;;8445:79;;:::i;:::-;8407:119;8565:1;8590:53;8635:7;8626:6;8615:9;8611:22;8590:53;:::i;:::-;8580:63;;8536:117;8692:2;8718:53;8763:7;8754:6;8743:9;8739:22;8718:53;:::i;:::-;8708:63;;8663:118;8314:474;;;;;:::o;8794:179::-;8863:10;8884:46;8926:3;8918:6;8884:46;:::i;:::-;8962:4;8957:3;8953:14;8939:28;;8794:179;;;;:::o;8979:118::-;9066:24;9084:5;9066:24;:::i;:::-;9061:3;9054:37;8979:118;;:::o;9133:732::-;9252:3;9281:54;9329:5;9281:54;:::i;:::-;9351:86;9430:6;9425:3;9351:86;:::i;:::-;9344:93;;9461:56;9511:5;9461:56;:::i;:::-;9540:7;9571:1;9556:284;9581:6;9578:1;9575:13;9556:284;;;9657:6;9651:13;9684:63;9743:3;9728:13;9684:63;:::i;:::-;9677:70;;9770:60;9823:6;9770:60;:::i;:::-;9760:70;;9616:224;9603:1;9600;9596:9;9591:14;;9556:284;;;9560:14;9856:3;9849:10;;9257:608;;;9133:732;;;;:::o;9871:109::-;9952:21;9967:5;9952:21;:::i;:::-;9947:3;9940:34;9871:109;;:::o;9986:360::-;10072:3;10100:38;10132:5;10100:38;:::i;:::-;10154:70;10217:6;10212:3;10154:70;:::i;:::-;10147:77;;10233:52;10278:6;10273:3;10266:4;10259:5;10255:16;10233:52;:::i;:::-;10310:29;10332:6;10310:29;:::i;:::-;10305:3;10301:39;10294:46;;10076:270;9986:360;;;;:::o;10352:364::-;10440:3;10468:39;10501:5;10468:39;:::i;:::-;10523:71;10587:6;10582:3;10523:71;:::i;:::-;10516:78;;10603:52;10648:6;10643:3;10636:4;10629:5;10625:16;10603:52;:::i;:::-;10680:29;10702:6;10680:29;:::i;:::-;10675:3;10671:39;10664:46;;10444:272;10352:364;;;;:::o;10722:377::-;10828:3;10856:39;10889:5;10856:39;:::i;:::-;10911:89;10993:6;10988:3;10911:89;:::i;:::-;10904:96;;11009:52;11054:6;11049:3;11042:4;11035:5;11031:16;11009:52;:::i;:::-;11086:6;11081:3;11077:16;11070:23;;10832:267;10722:377;;;;:::o;11105:366::-;11247:3;11268:67;11332:2;11327:3;11268:67;:::i;:::-;11261:74;;11344:93;11433:3;11344:93;:::i;:::-;11462:2;11457:3;11453:12;11446:19;;11105:366;;;:::o;11477:::-;11619:3;11640:67;11704:2;11699:3;11640:67;:::i;:::-;11633:74;;11716:93;11805:3;11716:93;:::i;:::-;11834:2;11829:3;11825:12;11818:19;;11477:366;;;:::o;11849:::-;11991:3;12012:67;12076:2;12071:3;12012:67;:::i;:::-;12005:74;;12088:93;12177:3;12088:93;:::i;:::-;12206:2;12201:3;12197:12;12190:19;;11849:366;;;:::o;12221:::-;12363:3;12384:67;12448:2;12443:3;12384:67;:::i;:::-;12377:74;;12460:93;12549:3;12460:93;:::i;:::-;12578:2;12573:3;12569:12;12562:19;;12221:366;;;:::o;12593:::-;12735:3;12756:67;12820:2;12815:3;12756:67;:::i;:::-;12749:74;;12832:93;12921:3;12832:93;:::i;:::-;12950:2;12945:3;12941:12;12934:19;;12593:366;;;:::o;12965:::-;13107:3;13128:67;13192:2;13187:3;13128:67;:::i;:::-;13121:74;;13204:93;13293:3;13204:93;:::i;:::-;13322:2;13317:3;13313:12;13306:19;;12965:366;;;:::o;13337:::-;13479:3;13500:67;13564:2;13559:3;13500:67;:::i;:::-;13493:74;;13576:93;13665:3;13576:93;:::i;:::-;13694:2;13689:3;13685:12;13678:19;;13337:366;;;:::o;13709:::-;13851:3;13872:67;13936:2;13931:3;13872:67;:::i;:::-;13865:74;;13948:93;14037:3;13948:93;:::i;:::-;14066:2;14061:3;14057:12;14050:19;;13709:366;;;:::o;14081:::-;14223:3;14244:67;14308:2;14303:3;14244:67;:::i;:::-;14237:74;;14320:93;14409:3;14320:93;:::i;:::-;14438:2;14433:3;14429:12;14422:19;;14081:366;;;:::o;14453:::-;14595:3;14616:67;14680:2;14675:3;14616:67;:::i;:::-;14609:74;;14692:93;14781:3;14692:93;:::i;:::-;14810:2;14805:3;14801:12;14794:19;;14453:366;;;:::o;14825:::-;14967:3;14988:67;15052:2;15047:3;14988:67;:::i;:::-;14981:74;;15064:93;15153:3;15064:93;:::i;:::-;15182:2;15177:3;15173:12;15166:19;;14825:366;;;:::o;15197:::-;15339:3;15360:67;15424:2;15419:3;15360:67;:::i;:::-;15353:74;;15436:93;15525:3;15436:93;:::i;:::-;15554:2;15549:3;15545:12;15538:19;;15197:366;;;:::o;15569:::-;15711:3;15732:67;15796:2;15791:3;15732:67;:::i;:::-;15725:74;;15808:93;15897:3;15808:93;:::i;:::-;15926:2;15921:3;15917:12;15910:19;;15569:366;;;:::o;15941:::-;16083:3;16104:67;16168:2;16163:3;16104:67;:::i;:::-;16097:74;;16180:93;16269:3;16180:93;:::i;:::-;16298:2;16293:3;16289:12;16282:19;;15941:366;;;:::o;16313:::-;16455:3;16476:67;16540:2;16535:3;16476:67;:::i;:::-;16469:74;;16552:93;16641:3;16552:93;:::i;:::-;16670:2;16665:3;16661:12;16654:19;;16313:366;;;:::o;16685:::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:::-;17199:3;17220:67;17284:2;17279:3;17220:67;:::i;:::-;17213:74;;17296:93;17385:3;17296:93;:::i;:::-;17414:2;17409:3;17405:12;17398:19;;17057:366;;;:::o;17429:::-;17571:3;17592:67;17656:2;17651:3;17592:67;:::i;:::-;17585:74;;17668:93;17757:3;17668:93;:::i;:::-;17786:2;17781:3;17777:12;17770:19;;17429:366;;;:::o;17801:400::-;17961:3;17982:84;18064:1;18059:3;17982:84;:::i;:::-;17975:91;;18075:93;18164:3;18075:93;:::i;:::-;18193:1;18188:3;18184:11;18177:18;;17801:400;;;:::o;18207:366::-;18349:3;18370:67;18434:2;18429:3;18370:67;:::i;:::-;18363:74;;18446:93;18535:3;18446:93;:::i;:::-;18564:2;18559:3;18555:12;18548:19;;18207:366;;;:::o;18579:::-;18721:3;18742:67;18806:2;18801:3;18742:67;:::i;:::-;18735:74;;18818:93;18907:3;18818:93;:::i;:::-;18936:2;18931:3;18927:12;18920:19;;18579:366;;;:::o;18951:::-;19093:3;19114:67;19178:2;19173:3;19114:67;:::i;:::-;19107:74;;19190:93;19279:3;19190:93;:::i;:::-;19308:2;19303:3;19299:12;19292:19;;18951:366;;;:::o;19323:::-;19465:3;19486:67;19550:2;19545:3;19486:67;:::i;:::-;19479:74;;19562:93;19651:3;19562:93;:::i;:::-;19680:2;19675:3;19671:12;19664:19;;19323:366;;;:::o;19695:::-;19837:3;19858:67;19922:2;19917:3;19858:67;:::i;:::-;19851:74;;19934:93;20023:3;19934:93;:::i;:::-;20052:2;20047:3;20043:12;20036:19;;19695:366;;;:::o;20067:::-;20209:3;20230:67;20294:2;20289:3;20230:67;:::i;:::-;20223:74;;20306:93;20395:3;20306:93;:::i;:::-;20424:2;20419:3;20415:12;20408:19;;20067:366;;;:::o;20439:::-;20581:3;20602:67;20666:2;20661:3;20602:67;:::i;:::-;20595:74;;20678:93;20767:3;20678:93;:::i;:::-;20796:2;20791:3;20787:12;20780:19;;20439:366;;;:::o;20811:::-;20953:3;20974:67;21038:2;21033:3;20974:67;:::i;:::-;20967:74;;21050:93;21139:3;21050:93;:::i;:::-;21168:2;21163:3;21159:12;21152:19;;20811:366;;;:::o;21183:::-;21325:3;21346:67;21410:2;21405:3;21346:67;:::i;:::-;21339:74;;21422:93;21511:3;21422:93;:::i;:::-;21540:2;21535:3;21531:12;21524:19;;21183:366;;;:::o;21555:108::-;21632:24;21650:5;21632:24;:::i;:::-;21627:3;21620:37;21555:108;;:::o;21669:118::-;21756:24;21774:5;21756:24;:::i;:::-;21751:3;21744:37;21669:118;;:::o;21793:701::-;22074:3;22096:95;22187:3;22178:6;22096:95;:::i;:::-;22089:102;;22208:95;22299:3;22290:6;22208:95;:::i;:::-;22201:102;;22320:148;22464:3;22320:148;:::i;:::-;22313:155;;22485:3;22478:10;;21793:701;;;;;:::o;22500:222::-;22593:4;22631:2;22620:9;22616:18;22608:26;;22644:71;22712:1;22701:9;22697:17;22688:6;22644:71;:::i;:::-;22500:222;;;;:::o;22728:640::-;22923:4;22961:3;22950:9;22946:19;22938:27;;22975:71;23043:1;23032:9;23028:17;23019:6;22975:71;:::i;:::-;23056:72;23124:2;23113:9;23109:18;23100:6;23056:72;:::i;:::-;23138;23206:2;23195:9;23191:18;23182:6;23138:72;:::i;:::-;23257:9;23251:4;23247:20;23242:2;23231:9;23227:18;23220:48;23285:76;23356:4;23347:6;23285:76;:::i;:::-;23277:84;;22728:640;;;;;;;:::o;23374:373::-;23517:4;23555:2;23544:9;23540:18;23532:26;;23604:9;23598:4;23594:20;23590:1;23579:9;23575:17;23568:47;23632:108;23735:4;23726:6;23632:108;:::i;:::-;23624:116;;23374:373;;;;:::o;23753:210::-;23840:4;23878:2;23867:9;23863:18;23855:26;;23891:65;23953:1;23942:9;23938:17;23929:6;23891:65;:::i;:::-;23753:210;;;;:::o;23969:313::-;24082:4;24120:2;24109:9;24105:18;24097:26;;24169:9;24163:4;24159:20;24155:1;24144:9;24140:17;24133:47;24197:78;24270:4;24261:6;24197:78;:::i;:::-;24189:86;;23969:313;;;;:::o;24288:419::-;24454:4;24492:2;24481:9;24477:18;24469:26;;24541:9;24535:4;24531:20;24527:1;24516:9;24512:17;24505:47;24569:131;24695:4;24569:131;:::i;:::-;24561:139;;24288:419;;;:::o;24713:::-;24879:4;24917:2;24906:9;24902:18;24894:26;;24966:9;24960:4;24956:20;24952:1;24941:9;24937:17;24930:47;24994:131;25120:4;24994:131;:::i;:::-;24986:139;;24713:419;;;:::o;25138:::-;25304:4;25342:2;25331:9;25327:18;25319:26;;25391:9;25385:4;25381:20;25377:1;25366:9;25362:17;25355:47;25419:131;25545:4;25419:131;:::i;:::-;25411:139;;25138:419;;;:::o;25563:::-;25729:4;25767:2;25756:9;25752:18;25744:26;;25816:9;25810:4;25806:20;25802:1;25791:9;25787:17;25780:47;25844:131;25970:4;25844:131;:::i;:::-;25836:139;;25563:419;;;:::o;25988:::-;26154:4;26192:2;26181:9;26177:18;26169:26;;26241:9;26235:4;26231:20;26227:1;26216:9;26212:17;26205:47;26269:131;26395:4;26269:131;:::i;:::-;26261:139;;25988:419;;;:::o;26413:::-;26579:4;26617:2;26606:9;26602:18;26594:26;;26666:9;26660:4;26656:20;26652:1;26641:9;26637:17;26630:47;26694:131;26820:4;26694:131;:::i;:::-;26686:139;;26413:419;;;:::o;26838:::-;27004:4;27042:2;27031:9;27027:18;27019:26;;27091:9;27085:4;27081:20;27077:1;27066:9;27062:17;27055:47;27119:131;27245:4;27119:131;:::i;:::-;27111:139;;26838:419;;;:::o;27263:::-;27429:4;27467:2;27456:9;27452:18;27444:26;;27516:9;27510:4;27506:20;27502:1;27491:9;27487:17;27480:47;27544:131;27670:4;27544:131;:::i;:::-;27536:139;;27263:419;;;:::o;27688:::-;27854:4;27892:2;27881:9;27877:18;27869:26;;27941:9;27935:4;27931:20;27927:1;27916:9;27912:17;27905:47;27969:131;28095:4;27969:131;:::i;:::-;27961:139;;27688:419;;;:::o;28113:::-;28279:4;28317:2;28306:9;28302:18;28294:26;;28366:9;28360:4;28356:20;28352:1;28341:9;28337:17;28330:47;28394:131;28520:4;28394:131;:::i;:::-;28386:139;;28113:419;;;:::o;28538:::-;28704:4;28742:2;28731:9;28727:18;28719:26;;28791:9;28785:4;28781:20;28777:1;28766:9;28762:17;28755:47;28819:131;28945:4;28819:131;:::i;:::-;28811:139;;28538:419;;;:::o;28963:::-;29129:4;29167:2;29156:9;29152:18;29144:26;;29216:9;29210:4;29206:20;29202:1;29191:9;29187:17;29180:47;29244:131;29370:4;29244:131;:::i;:::-;29236:139;;28963:419;;;:::o;29388:::-;29554:4;29592:2;29581:9;29577:18;29569:26;;29641:9;29635:4;29631:20;29627:1;29616:9;29612:17;29605:47;29669:131;29795:4;29669:131;:::i;:::-;29661:139;;29388:419;;;:::o;29813:::-;29979:4;30017:2;30006:9;30002:18;29994:26;;30066:9;30060:4;30056:20;30052:1;30041:9;30037:17;30030:47;30094:131;30220:4;30094:131;:::i;:::-;30086:139;;29813:419;;;:::o;30238:::-;30404:4;30442:2;30431:9;30427:18;30419:26;;30491:9;30485:4;30481:20;30477:1;30466:9;30462:17;30455:47;30519:131;30645:4;30519:131;:::i;:::-;30511:139;;30238:419;;;:::o;30663:::-;30829:4;30867:2;30856:9;30852:18;30844:26;;30916:9;30910:4;30906:20;30902:1;30891:9;30887:17;30880:47;30944:131;31070:4;30944:131;:::i;:::-;30936:139;;30663:419;;;:::o;31088:::-;31254:4;31292:2;31281:9;31277:18;31269:26;;31341:9;31335:4;31331:20;31327:1;31316:9;31312:17;31305:47;31369:131;31495:4;31369:131;:::i;:::-;31361:139;;31088:419;;;:::o;31513:::-;31679:4;31717:2;31706:9;31702:18;31694:26;;31766:9;31760:4;31756:20;31752:1;31741:9;31737:17;31730:47;31794:131;31920:4;31794:131;:::i;:::-;31786:139;;31513:419;;;:::o;31938:::-;32104:4;32142:2;32131:9;32127:18;32119:26;;32191:9;32185:4;32181:20;32177:1;32166:9;32162:17;32155:47;32219:131;32345:4;32219:131;:::i;:::-;32211:139;;31938:419;;;:::o;32363:::-;32529:4;32567:2;32556:9;32552:18;32544:26;;32616:9;32610:4;32606:20;32602:1;32591:9;32587:17;32580:47;32644:131;32770:4;32644:131;:::i;:::-;32636:139;;32363:419;;;:::o;32788:::-;32954:4;32992:2;32981:9;32977:18;32969:26;;33041:9;33035:4;33031:20;33027:1;33016:9;33012:17;33005:47;33069:131;33195:4;33069:131;:::i;:::-;33061:139;;32788:419;;;:::o;33213:::-;33379:4;33417:2;33406:9;33402:18;33394:26;;33466:9;33460:4;33456:20;33452:1;33441:9;33437:17;33430:47;33494:131;33620:4;33494:131;:::i;:::-;33486:139;;33213:419;;;:::o;33638:::-;33804:4;33842:2;33831:9;33827:18;33819:26;;33891:9;33885:4;33881:20;33877:1;33866:9;33862:17;33855:47;33919:131;34045:4;33919:131;:::i;:::-;33911:139;;33638:419;;;:::o;34063:::-;34229:4;34267:2;34256:9;34252:18;34244:26;;34316:9;34310:4;34306:20;34302:1;34291:9;34287:17;34280:47;34344:131;34470:4;34344:131;:::i;:::-;34336:139;;34063:419;;;:::o;34488:::-;34654:4;34692:2;34681:9;34677:18;34669:26;;34741:9;34735:4;34731:20;34727:1;34716:9;34712:17;34705:47;34769:131;34895:4;34769:131;:::i;:::-;34761:139;;34488:419;;;:::o;34913:::-;35079:4;35117:2;35106:9;35102:18;35094:26;;35166:9;35160:4;35156:20;35152:1;35141:9;35137:17;35130:47;35194:131;35320:4;35194:131;:::i;:::-;35186:139;;34913:419;;;:::o;35338:::-;35504:4;35542:2;35531:9;35527:18;35519:26;;35591:9;35585:4;35581:20;35577:1;35566:9;35562:17;35555:47;35619:131;35745:4;35619:131;:::i;:::-;35611:139;;35338:419;;;:::o;35763:222::-;35856:4;35894:2;35883:9;35879:18;35871:26;;35907:71;35975:1;35964:9;35960:17;35951:6;35907:71;:::i;:::-;35763:222;;;;:::o;35991:129::-;36025:6;36052:20;;:::i;:::-;36042:30;;36081:33;36109:4;36101:6;36081:33;:::i;:::-;35991:129;;;:::o;36126:75::-;36159:6;36192:2;36186:9;36176:19;;36126:75;:::o;36207:307::-;36268:4;36358:18;36350:6;36347:30;36344:56;;;36380:18;;:::i;:::-;36344:56;36418:29;36440:6;36418:29;:::i;:::-;36410:37;;36502:4;36496;36492:15;36484:23;;36207:307;;;:::o;36520:308::-;36582:4;36672:18;36664:6;36661:30;36658:56;;;36694:18;;:::i;:::-;36658:56;36732:29;36754:6;36732:29;:::i;:::-;36724:37;;36816:4;36810;36806:15;36798:23;;36520:308;;;:::o;36834:132::-;36901:4;36924:3;36916:11;;36954:4;36949:3;36945:14;36937:22;;36834:132;;;:::o;36972:114::-;37039:6;37073:5;37067:12;37057:22;;36972:114;;;:::o;37092:98::-;37143:6;37177:5;37171:12;37161:22;;37092:98;;;:::o;37196:99::-;37248:6;37282:5;37276:12;37266:22;;37196:99;;;:::o;37301:113::-;37371:4;37403;37398:3;37394:14;37386:22;;37301:113;;;:::o;37420:184::-;37519:11;37553:6;37548:3;37541:19;37593:4;37588:3;37584:14;37569:29;;37420:184;;;;:::o;37610:168::-;37693:11;37727:6;37722:3;37715:19;37767:4;37762:3;37758:14;37743:29;;37610:168;;;;:::o;37784:169::-;37868:11;37902:6;37897:3;37890:19;37942:4;37937:3;37933:14;37918:29;;37784:169;;;;:::o;37959:148::-;38061:11;38098:3;38083:18;;37959:148;;;;:::o;38113:305::-;38153:3;38172:20;38190:1;38172:20;:::i;:::-;38167:25;;38206:20;38224:1;38206:20;:::i;:::-;38201:25;;38360:1;38292:66;38288:74;38285:1;38282:81;38279:107;;;38366:18;;:::i;:::-;38279:107;38410:1;38407;38403:9;38396:16;;38113:305;;;;:::o;38424:185::-;38464:1;38481:20;38499:1;38481:20;:::i;:::-;38476:25;;38515:20;38533:1;38515:20;:::i;:::-;38510:25;;38554:1;38544:35;;38559:18;;:::i;:::-;38544:35;38601:1;38598;38594:9;38589:14;;38424:185;;;;:::o;38615:348::-;38655:7;38678:20;38696:1;38678:20;:::i;:::-;38673:25;;38712:20;38730:1;38712:20;:::i;:::-;38707:25;;38900:1;38832:66;38828:74;38825:1;38822:81;38817:1;38810:9;38803:17;38799:105;38796:131;;;38907:18;;:::i;:::-;38796:131;38955:1;38952;38948:9;38937:20;;38615:348;;;;:::o;38969:191::-;39009:4;39029:20;39047:1;39029:20;:::i;:::-;39024:25;;39063:20;39081:1;39063:20;:::i;:::-;39058:25;;39102:1;39099;39096:8;39093:34;;;39107:18;;:::i;:::-;39093:34;39152:1;39149;39145:9;39137:17;;38969:191;;;;:::o;39166:96::-;39203:7;39232:24;39250:5;39232:24;:::i;:::-;39221:35;;39166:96;;;:::o;39268:90::-;39302:7;39345:5;39338:13;39331:21;39320:32;;39268:90;;;:::o;39364:149::-;39400:7;39440:66;39433:5;39429:78;39418:89;;39364:149;;;:::o;39519:126::-;39556:7;39596:42;39589:5;39585:54;39574:65;;39519:126;;;:::o;39651:77::-;39688:7;39717:5;39706:16;;39651:77;;;:::o;39734:154::-;39818:6;39813:3;39808;39795:30;39880:1;39871:6;39866:3;39862:16;39855:27;39734:154;;;:::o;39894:307::-;39962:1;39972:113;39986:6;39983:1;39980:13;39972:113;;;40071:1;40066:3;40062:11;40056:18;40052:1;40047:3;40043:11;40036:39;40008:2;40005:1;40001:10;39996:15;;39972:113;;;40103:6;40100:1;40097:13;40094:101;;;40183:1;40174:6;40169:3;40165:16;40158:27;40094:101;39943:258;39894:307;;;:::o;40207:320::-;40251:6;40288:1;40282:4;40278:12;40268:22;;40335:1;40329:4;40325:12;40356:18;40346:81;;40412:4;40404:6;40400:17;40390:27;;40346:81;40474:2;40466:6;40463:14;40443:18;40440:38;40437:84;;;40493:18;;:::i;:::-;40437:84;40258:269;40207:320;;;:::o;40533:281::-;40616:27;40638:4;40616:27;:::i;:::-;40608:6;40604:40;40746:6;40734:10;40731:22;40710:18;40698:10;40695:34;40692:62;40689:88;;;40757:18;;:::i;:::-;40689:88;40797:10;40793:2;40786:22;40576:238;40533:281;;:::o;40820:233::-;40859:3;40882:24;40900:5;40882:24;:::i;:::-;40873:33;;40928:66;40921:5;40918:77;40915:103;;;40998:18;;:::i;:::-;40915:103;41045:1;41038:5;41034:13;41027:20;;40820:233;;;:::o;41059:176::-;41091:1;41108:20;41126:1;41108:20;:::i;:::-;41103:25;;41142:20;41160:1;41142:20;:::i;:::-;41137:25;;41181:1;41171:35;;41186:18;;:::i;:::-;41171:35;41227:1;41224;41220:9;41215:14;;41059:176;;;;:::o;41241:180::-;41289:77;41286:1;41279:88;41386:4;41383:1;41376:15;41410:4;41407:1;41400:15;41427:180;41475:77;41472:1;41465:88;41572:4;41569:1;41562:15;41596:4;41593:1;41586:15;41613:180;41661:77;41658:1;41651:88;41758:4;41755:1;41748:15;41782:4;41779:1;41772:15;41799:180;41847:77;41844:1;41837:88;41944:4;41941:1;41934:15;41968:4;41965:1;41958:15;41985:180;42033:77;42030:1;42023:88;42130:4;42127:1;42120:15;42154:4;42151:1;42144:15;42171:180;42219:77;42216:1;42209:88;42316:4;42313:1;42306:15;42340:4;42337:1;42330:15;42357:117;42466:1;42463;42456:12;42480:117;42589:1;42586;42579:12;42603:117;42712:1;42709;42702:12;42726:117;42835:1;42832;42825:12;42849:117;42958:1;42955;42948:12;42972:117;43081:1;43078;43071:12;43095:102;43136:6;43187:2;43183:7;43178:2;43171:5;43167:14;43163:28;43153:38;;43095:102;;;:::o;43203:220::-;43343:34;43339:1;43331:6;43327:14;43320:58;43412:3;43407:2;43399:6;43395:15;43388:28;43203:220;:::o;43429:165::-;43569:17;43565:1;43557:6;43553:14;43546:41;43429:165;:::o;43600:230::-;43740:34;43736:1;43728:6;43724:14;43717:58;43809:13;43804:2;43796:6;43792:15;43785:38;43600:230;:::o;43836:237::-;43976:34;43972:1;43964:6;43960:14;43953:58;44045:20;44040:2;44032:6;44028:15;44021:45;43836:237;:::o;44079:225::-;44219:34;44215:1;44207:6;44203:14;44196:58;44288:8;44283:2;44275:6;44271:15;44264:33;44079:225;:::o;44310:178::-;44450:30;44446:1;44438:6;44434:14;44427:54;44310:178;:::o;44494:::-;44634:30;44630:1;44622:6;44618:14;44611:54;44494:178;:::o;44678:226::-;44818:34;44814:1;44806:6;44802:14;44795:58;44887:9;44882:2;44874:6;44870:15;44863:34;44678:226;:::o;44910:165::-;45050:17;45046:1;45038:6;45034:14;45027:41;44910:165;:::o;45081:223::-;45221:34;45217:1;45209:6;45205:14;45198:58;45290:6;45285:2;45277:6;45273:15;45266:31;45081:223;:::o;45310:175::-;45450:27;45446:1;45438:6;45434:14;45427:51;45310:175;:::o;45491:176::-;45631:28;45627:1;45619:6;45615:14;45608:52;45491:176;:::o;45673:231::-;45813:34;45809:1;45801:6;45797:14;45790:58;45882:14;45877:2;45869:6;45865:15;45858:39;45673:231;:::o;45910:243::-;46050:34;46046:1;46038:6;46034:14;46027:58;46119:26;46114:2;46106:6;46102:15;46095:51;45910:243;:::o;46159:229::-;46299:34;46295:1;46287:6;46283:14;46276:58;46368:12;46363:2;46355:6;46351:15;46344:37;46159:229;:::o;46394:228::-;46534:34;46530:1;46522:6;46518:14;46511:58;46603:11;46598:2;46590:6;46586:15;46579:36;46394:228;:::o;46628:182::-;46768:34;46764:1;46756:6;46752:14;46745:58;46628:182;:::o;46816:231::-;46956:34;46952:1;46944:6;46940:14;46933:58;47025:14;47020:2;47012:6;47008:15;47001:39;46816:231;:::o;47053:155::-;47193:7;47189:1;47181:6;47177:14;47170:31;47053:155;:::o;47214:182::-;47354:34;47350:1;47342:6;47338:14;47331:58;47214:182;:::o;47402:167::-;47542:19;47538:1;47530:6;47526:14;47519:43;47402:167;:::o;47575:228::-;47715:34;47711:1;47703:6;47699:14;47692:58;47784:11;47779:2;47771:6;47767:15;47760:36;47575:228;:::o;47809:224::-;47949:34;47945:1;47937:6;47933:14;47926:58;48018:7;48013:2;48005:6;48001:15;47994:32;47809:224;:::o;48039:234::-;48179:34;48175:1;48167:6;48163:14;48156:58;48248:17;48243:2;48235:6;48231:15;48224:42;48039:234;:::o;48279:220::-;48419:34;48415:1;48407:6;48403:14;48396:58;48488:3;48483:2;48475:6;48471:15;48464:28;48279:220;:::o;48505:236::-;48645:34;48641:1;48633:6;48629:14;48622:58;48714:19;48709:2;48701:6;48697:15;48690:44;48505:236;:::o;48747:231::-;48887:34;48883:1;48875:6;48871:14;48864:58;48956:14;48951:2;48943:6;48939:15;48932:39;48747:231;:::o;48984:171::-;49124:23;49120:1;49112:6;49108:14;49101:47;48984:171;:::o;49161:122::-;49234:24;49252:5;49234:24;:::i;:::-;49227:5;49224:35;49214:63;;49273:1;49270;49263:12;49214:63;49161:122;:::o;49289:116::-;49359:21;49374:5;49359:21;:::i;:::-;49352:5;49349:32;49339:60;;49395:1;49392;49385:12;49339:60;49289:116;:::o;49411:120::-;49483:23;49500:5;49483:23;:::i;:::-;49476:5;49473:34;49463:62;;49521:1;49518;49511:12;49463:62;49411:120;:::o;49537:122::-;49610:24;49628:5;49610:24;:::i;:::-;49603:5;49600:35;49590:63;;49649:1;49646;49639:12;49590:63;49537:122;:::o

Swarm Source

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