ETH Price: $2,629.34 (+7.51%)

Token

Final Journey (FLY)
 

Overview

Max Total Supply

53 FLY

Holders

18

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
tonybearbrick.eth
Balance
1 FLY
0x17e566d94b9E9471eaAA1fd48fEd92666Fe0e6c0
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:
FinalJourney

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-13
*/

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

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: https://github.com/chiru-labs/ERC721A/blob/main/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;









error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error AuxQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

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

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

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

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

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

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

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

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

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

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

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

    /**
     * @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 {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

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

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

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

pragma solidity 0.8.7;


contract FinalJourney is ERC721A, Ownable {

    using Strings for uint256;

    bool public paused = false;

    uint256 public mintPrice = 0.0088 ether;
    uint256 public maxNFTSale = 5;

    uint256 public supply = 6666;
    uint256 public airdropReserve = 30;

    bool public revealed = false;

    string private unRevealedURI = "ipfs://QmW6w8gquuQtJc6xgScdkBH82TrmZPfqdekzdnpTRGqqPF/rev.json";
    string private baseURI = "ipfs://QmQW7M3fPqmjf6pSRAiGZQtkXrDhAza8aTsfB6op9kSNSs/";

    constructor() ERC721A ("Final Journey", "FLY") {

    }

    function reveal() public onlyOwner {

        revealed = true;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {

        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        if(!revealed) {

            return unRevealedURI;
        }

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

    function mint(uint256 quantity) external payable {

        require(totalSupply() + quantity <= supply - airdropReserve, "You can't mint more than the total supply");

        if(msg.sender != owner()) {

            require(!paused, "Contract paused");

            require(msg.value >= mintPrice * quantity, "Insufficient funds");
        }
        
        _safeMint(msg.sender, quantity);
    }

    function mintForAddress(uint256 quantity, address recipient) external payable {

        require(!paused, "Contract paused");
        require(recipient != address(0), "Invalid reciever address");
        require(totalSupply() + quantity <= supply, "You can't mint more than the total supply");

        require(msg.value >= mintPrice * quantity, "Insufficient funds");
        
        _safeMint(recipient, quantity);
    }

    function airdrop(uint256 quantity, address recipient) external payable onlyOwner {

        require(recipient != address(0), "Invalid reciever address");
        require(totalSupply() + quantity <= supply, "You can't mint more than the total supply");
        
        _safeMint(recipient, quantity);
    }

    function getBaseURI() public onlyOwner view returns (string memory) {

        return baseURI;
    }

    function getMintPrice() public view returns (uint256) {

        return mintPrice;
    }

    function getMintNFTPerAddressMax() public view returns (uint256) {

        return maxNFTSale;
    }

    function setNotRevealedUrl(string memory unRevealedURI_) external onlyOwner { unRevealedURI = unRevealedURI_; }

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

    function setBaseURI(string memory baseURI_) external onlyOwner { baseURI = baseURI_; }

    function setMintPrice (uint256 _newPrice) external onlyOwner { mintPrice = _newPrice; }

    function setPaused (bool _pausedState) external onlyOwner { paused = _pausedState; }

    function getContractBalance () external view onlyOwner returns (uint256) { return address(this).balance; }

    function setMaxNFTSale(uint256 max_) external onlyOwner { maxNFTSale = max_; }

    function getNotRevealedURL() external onlyOwner view returns (string memory) { return unRevealedURI; }

    function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); }

    function totalMinted() public view returns (uint256) { return _totalMinted(); }

    function exists(uint256 tokenId) public view returns (bool) { return _exists(tokenId); }

    function withdraw() public payable onlyOwner {(bool os, ) = payable(owner()).call{value: address(this).balance}("");require(os);}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"MintedQueryForZeroAddress","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"airdropReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintNFTPerAddressMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNotRevealedURL","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxNFTSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"mintForAddress","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"max_","type":"uint256"}],"name":"setMaxNFTSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"unRevealedURI_","type":"string"}],"name":"setNotRevealedUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pausedState","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000600860146101000a81548160ff021916908315150217905550661f438daa0600006009556005600a55611a0a600b55601e600c556000600d60006101000a81548160ff0219169083151502179055506040518060600160405280603e8152602001620044f6603e9139600e90805190602001906200008692919062000276565b50604051806060016040528060368152602001620044c060369139600f9080519060200190620000b892919062000276565b50348015620000c657600080fd5b506040518060400160405280600d81526020017f46696e616c204a6f75726e6579000000000000000000000000000000000000008152506040518060400160405280600381526020017f464c59000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200014b92919062000276565b5080600390805190602001906200016492919062000276565b5062000175620001a360201b60201c565b60008190555050506200019d62000191620001a860201b60201c565b620001b060201b60201c565b6200038b565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002849062000326565b90600052602060002090601f016020900481019282620002a85760008555620002f4565b82601f10620002c357805160ff1916838001178555620002f4565b82800160010185558215620002f4579182015b82811115620002f3578251825591602001919060010190620002d6565b5b50905062000303919062000307565b5090565b5b808211156200032257600081600090555060010162000308565b5090565b600060028204905060018216806200033f57607f821691505b602082108114156200035657620003556200035c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614125806200039b6000396000f3fe6080604052600436106102465760003560e01c8063714c539811610139578063a7f93ebd116100b6578063e84dddcd1161007a578063e84dddcd14610833578063e985e9c51461085e578063efbd73f41461089b578063f2fde38b146108b7578063f48ce201146108e0578063f4a0a5281461090957610246565b8063a7f93ebd14610749578063b88d4fde14610774578063bc63f02e1461079d578063c87b56dd146107b9578063dc33e681146107f657610246565b80639c12e1bc116100fd5780639c12e1bc14610699578063a0712d68146106c2578063a22cb465146106de578063a2309ff814610707578063a475b5dd1461073257610246565b8063714c5398146105d6578063715018a61461060157806373fba0e8146106185780638da5cb5b1461064357806395d89b411461066e57610246565b806342842e0e116101c75780635c975abb1161018b5780635c975abb146104db5780636352211e146105065780636817c76c146105435780636f9fb98a1461056e57806370a082311461059957610246565b806342842e0e146103f65780634f558e791461041f578063518302271461045c57806353431ecf1461048757806355f804b3146104b257610246565b806316c38b3c1161020e57806316c38b3c1461034457806318160ddd1461036d57806323b872dd1461039857806326964d56146103c15780633ccfd60b146103ec57610246565b806301ffc9a71461024b578063047fc9aa1461028857806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906134b7565b610932565b60405161027f91906138fc565b60405180910390f35b34801561029457600080fd5b5061029d610a14565b6040516102aa9190613a19565b60405180910390f35b3480156102bf57600080fd5b506102c8610a1a565b6040516102d59190613917565b60405180910390f35b3480156102ea57600080fd5b506103056004803603810190610300919061355a565b610aac565b6040516103129190613895565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061344a565b610b28565b005b34801561035057600080fd5b5061036b6004803603810190610366919061348a565b610c33565b005b34801561037957600080fd5b50610382610ccc565b60405161038f9190613a19565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613334565b610ce3565b005b3480156103cd57600080fd5b506103d6610cf3565b6040516103e39190613a19565b60405180910390f35b6103f4610cfd565b005b34801561040257600080fd5b5061041d60048036038101906104189190613334565b610df9565b005b34801561042b57600080fd5b506104466004803603810190610441919061355a565b610e19565b60405161045391906138fc565b60405180910390f35b34801561046857600080fd5b50610471610e2b565b60405161047e91906138fc565b60405180910390f35b34801561049357600080fd5b5061049c610e3e565b6040516104a99190613917565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613511565b610f4c565b005b3480156104e757600080fd5b506104f0610fe2565b6040516104fd91906138fc565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061355a565b610ff5565b60405161053a9190613895565b60405180910390f35b34801561054f57600080fd5b5061055861100b565b6040516105659190613a19565b60405180910390f35b34801561057a57600080fd5b50610583611011565b6040516105909190613a19565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb91906132c7565b611095565b6040516105cd9190613a19565b60405180910390f35b3480156105e257600080fd5b506105eb611165565b6040516105f89190613917565b60405180910390f35b34801561060d57600080fd5b50610616611273565b005b34801561062457600080fd5b5061062d6112fb565b60405161063a9190613a19565b60405180910390f35b34801561064f57600080fd5b50610658611301565b6040516106659190613895565b60405180910390f35b34801561067a57600080fd5b5061068361132b565b6040516106909190613917565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613511565b6113bd565b005b6106dc60048036038101906106d7919061355a565b611453565b005b3480156106ea57600080fd5b506107056004803603810190610700919061340a565b61159f565b005b34801561071357600080fd5b5061071c611717565b6040516107299190613a19565b60405180910390f35b34801561073e57600080fd5b50610747611726565b005b34801561075557600080fd5b5061075e6117bf565b60405161076b9190613a19565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190613387565b6117c9565b005b6107b760048036038101906107b29190613587565b611845565b005b3480156107c557600080fd5b506107e060048036038101906107db919061355a565b611996565b6040516107ed9190613917565b60405180910390f35b34801561080257600080fd5b5061081d600480360381019061081891906132c7565b611ae5565b60405161082a9190613a19565b60405180910390f35b34801561083f57600080fd5b50610848611af7565b6040516108559190613a19565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132f4565b611afd565b60405161089291906138fc565b60405180910390f35b6108b560048036038101906108b09190613587565b611b91565b005b3480156108c357600080fd5b506108de60048036038101906108d991906132c7565b611d06565b005b3480156108ec57600080fd5b506109076004803603810190610902919061355a565b611dfe565b005b34801561091557600080fd5b50610930600480360381019061092b919061355a565b611e84565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d5750610a0c82611f0a565b5b9050919050565b600b5481565b606060028054610a2990613ce9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5590613ce9565b8015610aa25780601f10610a7757610100808354040283529160200191610aa2565b820191906000526020600020905b815481529060010190602001808311610a8557829003601f168201915b5050505050905090565b6000610ab782611f74565b610aed576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3382610ff5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bba611fc2565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bec5750610bea81610be5611fc2565b611afd565b155b15610c23576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c2e838383611fca565b505050565b610c3b611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610c59611301565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca6906139b9565b60405180910390fd5b80600860146101000a81548160ff02191690831515021790555050565b6000610cd661207c565b6001546000540303905090565b610cee838383612081565b505050565b6000600a54905090565b610d05611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610d23611301565b73ffffffffffffffffffffffffffffffffffffffff1614610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906139b9565b60405180910390fd5b6000610d83611301565b73ffffffffffffffffffffffffffffffffffffffff1647604051610da690613880565b60006040518083038185875af1925050503d8060008114610de3576040519150601f19603f3d011682016040523d82523d6000602084013e610de8565b606091505b5050905080610df657600080fd5b50565b610e14838383604051806020016040528060008152506117c9565b505050565b6000610e2482611f74565b9050919050565b600d60009054906101000a900460ff1681565b6060610e48611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610e66611301565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906139b9565b60405180910390fd5b600e8054610ec990613ce9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef590613ce9565b8015610f425780601f10610f1757610100808354040283529160200191610f42565b820191906000526020600020905b815481529060010190602001808311610f2557829003601f168201915b5050505050905090565b610f54611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610f72611301565b73ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf906139b9565b60405180910390fd5b80600f9080519060200190610fde929190613098565b5050565b600860149054906101000a900460ff1681565b600061100082612572565b600001519050919050565b60095481565b600061101b611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611039611301565b73ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906139b9565b60405180910390fd5b47905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b606061116f611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661118d611301565b73ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906139b9565b60405180910390fd5b600f80546111f090613ce9565b80601f016020809104026020016040519081016040528092919081815260200182805461121c90613ce9565b80156112695780601f1061123e57610100808354040283529160200191611269565b820191906000526020600020905b81548152906001019060200180831161124c57829003601f168201915b5050505050905090565b61127b611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611299611301565b73ffffffffffffffffffffffffffffffffffffffff16146112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e6906139b9565b60405180910390fd5b6112f96000612801565b565b600c5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461133a90613ce9565b80601f016020809104026020016040519081016040528092919081815260200182805461136690613ce9565b80156113b35780601f10611388576101008083540402835291602001916113b3565b820191906000526020600020905b81548152906001019060200180831161139657829003601f168201915b5050505050905090565b6113c5611fc2565b73ffffffffffffffffffffffffffffffffffffffff166113e3611301565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906139b9565b60405180910390fd5b80600e908051906020019061144f929190613098565b5050565b600c54600b546114639190613bff565b8161146c610ccc565b6114769190613b1e565b11156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae906139f9565b60405180910390fd5b6114bf611301565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461159257600860149054906101000a900460ff1615611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613959565b60405180910390fd5b8060095461154f9190613ba5565b341015611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613979565b60405180910390fd5b5b61159c33826128c7565b50565b6115a7611fc2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611619611fc2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116c6611fc2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161170b91906138fc565b60405180910390a35050565b60006117216128e5565b905090565b61172e611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661174c611301565b73ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611799906139b9565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600954905090565b6117d4848484612081565b6117f38373ffffffffffffffffffffffffffffffffffffffff166128f8565b801561180857506118068484848461291b565b155b1561183f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61184d611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661186b611301565b73ffffffffffffffffffffffffffffffffffffffff16146118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b8906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613999565b60405180910390fd5b600b548261193d610ccc565b6119479190613b1e565b1115611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f906139f9565b60405180910390fd5b61199281836128c7565b5050565b60606119a182611f74565b6119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906139d9565b60405180910390fd5b600d60009054906101000a900460ff16611a8657600e8054611a0190613ce9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2d90613ce9565b8015611a7a5780601f10611a4f57610100808354040283529160200191611a7a565b820191906000526020600020905b815481529060010190602001808311611a5d57829003601f168201915b50505050509050611ae0565b6000600f8054611a9590613ce9565b905011611ab15760405180602001604052806000815250611add565b600f611abc83612a7b565b604051602001611acd929190613851565b6040516020818303038152906040525b90505b919050565b6000611af082612bdc565b9050919050565b600a5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860149054906101000a900460ff1615611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890613959565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613999565b60405180910390fd5b600b5482611c5d610ccc565b611c679190613b1e565b1115611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f906139f9565b60405180910390fd5b81600954611cb69190613ba5565b341015611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef90613979565b60405180910390fd5b611d0281836128c7565b5050565b611d0e611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611d2c611301565b73ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d79906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613939565b60405180910390fd5b611dfb81612801565b50565b611e06611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611e24611301565b73ffffffffffffffffffffffffffffffffffffffff1614611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e71906139b9565b60405180910390fd5b80600a8190555050565b611e8c611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611eaa611301565b73ffffffffffffffffffffffffffffffffffffffff1614611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef7906139b9565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f7f61207c565b11158015611f8e575060005482105b8015611fbb575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061208c82612572565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166120b3611fc2565b73ffffffffffffffffffffffffffffffffffffffff1614806120e657506120e582600001516120e0611fc2565b611afd565b5b8061212b57506120f4611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661211384610aac565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612164576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121cd576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612234576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122418585856001612cac565b6122516000848460000151611fca565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612502576000548110156125015782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461256b8585856001612cb2565b5050505050565b61257a61311e565b60008290508061258861207c565b11158015612597575060005481105b156127ca576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516127c857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126ac5780925050506127fc565b5b6001156127c757818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127c25780925050506127fc565b6126ad565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128e1828260405180602001604052806000815250612cb8565b5050565b60006128ef61207c565b60005403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612941611fc2565b8786866040518563ffffffff1660e01b815260040161296394939291906138b0565b602060405180830381600087803b15801561297d57600080fd5b505af19250505080156129ae57506040513d601f19601f820116820180604052508101906129ab91906134e4565b60015b612a28573d80600081146129de576040519150601f19603f3d011682016040523d82523d6000602084013e6129e3565b606091505b50600081511415612a20576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612ac3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bd7565b600082905060005b60008214612af5578080612ade90613d4c565b915050600a82612aee9190613b74565b9150612acb565b60008167ffffffffffffffff811115612b1157612b10613e82565b5b6040519080825280601f01601f191660200182016040528015612b435781602001600182028036833780820191505090505b5090505b60008514612bd057600182612b5c9190613bff565b9150600a85612b6b9190613d95565b6030612b779190613b1e565b60f81b818381518110612b8d57612b8c613e53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bc99190613b74565b9450612b47565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c44576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612cc58383836001612cca565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612d37576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612d72576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d7f6000868387612cac565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612f495750612f488773ffffffffffffffffffffffffffffffffffffffff166128f8565b5b1561300f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fbe600088848060010195508861291b565b612ff4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612f4f57826000541461300a57600080fd5b61307b565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613010575b8160008190555050506130916000868387612cb2565b5050505050565b8280546130a490613ce9565b90600052602060002090601f0160209004810192826130c6576000855561310d565b82601f106130df57805160ff191683800117855561310d565b8280016001018555821561310d579182015b8281111561310c5782518255916020019190600101906130f1565b5b50905061311a9190613161565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561317a576000816000905550600101613162565b5090565b600061319161318c84613a59565b613a34565b9050828152602081018484840111156131ad576131ac613eb6565b5b6131b8848285613ca7565b509392505050565b60006131d36131ce84613a8a565b613a34565b9050828152602081018484840111156131ef576131ee613eb6565b5b6131fa848285613ca7565b509392505050565b60008135905061321181614093565b92915050565b600081359050613226816140aa565b92915050565b60008135905061323b816140c1565b92915050565b600081519050613250816140c1565b92915050565b600082601f83011261326b5761326a613eb1565b5b813561327b84826020860161317e565b91505092915050565b600082601f83011261329957613298613eb1565b5b81356132a98482602086016131c0565b91505092915050565b6000813590506132c1816140d8565b92915050565b6000602082840312156132dd576132dc613ec0565b5b60006132eb84828501613202565b91505092915050565b6000806040838503121561330b5761330a613ec0565b5b600061331985828601613202565b925050602061332a85828601613202565b9150509250929050565b60008060006060848603121561334d5761334c613ec0565b5b600061335b86828701613202565b935050602061336c86828701613202565b925050604061337d868287016132b2565b9150509250925092565b600080600080608085870312156133a1576133a0613ec0565b5b60006133af87828801613202565b94505060206133c087828801613202565b93505060406133d1878288016132b2565b925050606085013567ffffffffffffffff8111156133f2576133f1613ebb565b5b6133fe87828801613256565b91505092959194509250565b6000806040838503121561342157613420613ec0565b5b600061342f85828601613202565b925050602061344085828601613217565b9150509250929050565b6000806040838503121561346157613460613ec0565b5b600061346f85828601613202565b9250506020613480858286016132b2565b9150509250929050565b6000602082840312156134a05761349f613ec0565b5b60006134ae84828501613217565b91505092915050565b6000602082840312156134cd576134cc613ec0565b5b60006134db8482850161322c565b91505092915050565b6000602082840312156134fa576134f9613ec0565b5b600061350884828501613241565b91505092915050565b60006020828403121561352757613526613ec0565b5b600082013567ffffffffffffffff81111561354557613544613ebb565b5b61355184828501613284565b91505092915050565b6000602082840312156135705761356f613ec0565b5b600061357e848285016132b2565b91505092915050565b6000806040838503121561359e5761359d613ec0565b5b60006135ac858286016132b2565b92505060206135bd85828601613202565b9150509250929050565b6135d081613c33565b82525050565b6135df81613c45565b82525050565b60006135f082613ad0565b6135fa8185613ae6565b935061360a818560208601613cb6565b61361381613ec5565b840191505092915050565b600061362982613adb565b6136338185613b02565b9350613643818560208601613cb6565b61364c81613ec5565b840191505092915050565b600061366282613adb565b61366c8185613b13565b935061367c818560208601613cb6565b80840191505092915050565b6000815461369581613ce9565b61369f8186613b13565b945060018216600081146136ba57600181146136cb576136fe565b60ff198316865281860193506136fe565b6136d485613abb565b60005b838110156136f6578154818901526001820191506020810190506136d7565b838801955050505b50505092915050565b6000613714602683613b02565b915061371f82613ed6565b604082019050919050565b6000613737600f83613b02565b915061374282613f25565b602082019050919050565b600061375a601283613b02565b915061376582613f4e565b602082019050919050565b600061377d601883613b02565b915061378882613f77565b602082019050919050565b60006137a0600583613b13565b91506137ab82613fa0565b600582019050919050565b60006137c3602083613b02565b91506137ce82613fc9565b602082019050919050565b60006137e6602f83613b02565b91506137f182613ff2565b604082019050919050565b6000613809600083613af7565b915061381482614041565b600082019050919050565b600061382c602983613b02565b915061383782614044565b604082019050919050565b61384b81613c9d565b82525050565b600061385d8285613688565b91506138698284613657565b915061387482613793565b91508190509392505050565b600061388b826137fc565b9150819050919050565b60006020820190506138aa60008301846135c7565b92915050565b60006080820190506138c560008301876135c7565b6138d260208301866135c7565b6138df6040830185613842565b81810360608301526138f181846135e5565b905095945050505050565b600060208201905061391160008301846135d6565b92915050565b60006020820190508181036000830152613931818461361e565b905092915050565b6000602082019050818103600083015261395281613707565b9050919050565b600060208201905081810360008301526139728161372a565b9050919050565b600060208201905081810360008301526139928161374d565b9050919050565b600060208201905081810360008301526139b281613770565b9050919050565b600060208201905081810360008301526139d2816137b6565b9050919050565b600060208201905081810360008301526139f2816137d9565b9050919050565b60006020820190508181036000830152613a128161381f565b9050919050565b6000602082019050613a2e6000830184613842565b92915050565b6000613a3e613a4f565b9050613a4a8282613d1b565b919050565b6000604051905090565b600067ffffffffffffffff821115613a7457613a73613e82565b5b613a7d82613ec5565b9050602081019050919050565b600067ffffffffffffffff821115613aa557613aa4613e82565b5b613aae82613ec5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b2982613c9d565b9150613b3483613c9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b6957613b68613dc6565b5b828201905092915050565b6000613b7f82613c9d565b9150613b8a83613c9d565b925082613b9a57613b99613df5565b5b828204905092915050565b6000613bb082613c9d565b9150613bbb83613c9d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bf457613bf3613dc6565b5b828202905092915050565b6000613c0a82613c9d565b9150613c1583613c9d565b925082821015613c2857613c27613dc6565b5b828203905092915050565b6000613c3e82613c7d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cd4578082015181840152602081019050613cb9565b83811115613ce3576000848401525b50505050565b60006002820490506001821680613d0157607f821691505b60208210811415613d1557613d14613e24565b5b50919050565b613d2482613ec5565b810181811067ffffffffffffffff82111715613d4357613d42613e82565b5b80604052505050565b6000613d5782613c9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d8a57613d89613dc6565b5b600182019050919050565b6000613da082613c9d565b9150613dab83613c9d565b925082613dbb57613dba613df5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f496e76616c696420726563696576657220616464726573730000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f596f752063616e2774206d696e74206d6f7265207468616e2074686520746f7460008201527f616c20737570706c790000000000000000000000000000000000000000000000602082015250565b61409c81613c33565b81146140a757600080fd5b50565b6140b381613c45565b81146140be57600080fd5b50565b6140ca81613c51565b81146140d557600080fd5b50565b6140e181613c9d565b81146140ec57600080fd5b5056fea2646970667358221220221dd839ae869b51659908b2c5fd547c05010814fc0a9ee48d0fd85e09b290ad64736f6c63430008070033697066733a2f2f516d5157374d336650716d6a66367053524169475a51746b58724468417a61386154736642366f70396b534e53732f697066733a2f2f516d573677386771757551744a633678675363646b4248383254726d5a50667164656b7a646e70545247717150462f7265762e6a736f6e

Deployed Bytecode

0x6080604052600436106102465760003560e01c8063714c539811610139578063a7f93ebd116100b6578063e84dddcd1161007a578063e84dddcd14610833578063e985e9c51461085e578063efbd73f41461089b578063f2fde38b146108b7578063f48ce201146108e0578063f4a0a5281461090957610246565b8063a7f93ebd14610749578063b88d4fde14610774578063bc63f02e1461079d578063c87b56dd146107b9578063dc33e681146107f657610246565b80639c12e1bc116100fd5780639c12e1bc14610699578063a0712d68146106c2578063a22cb465146106de578063a2309ff814610707578063a475b5dd1461073257610246565b8063714c5398146105d6578063715018a61461060157806373fba0e8146106185780638da5cb5b1461064357806395d89b411461066e57610246565b806342842e0e116101c75780635c975abb1161018b5780635c975abb146104db5780636352211e146105065780636817c76c146105435780636f9fb98a1461056e57806370a082311461059957610246565b806342842e0e146103f65780634f558e791461041f578063518302271461045c57806353431ecf1461048757806355f804b3146104b257610246565b806316c38b3c1161020e57806316c38b3c1461034457806318160ddd1461036d57806323b872dd1461039857806326964d56146103c15780633ccfd60b146103ec57610246565b806301ffc9a71461024b578063047fc9aa1461028857806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906134b7565b610932565b60405161027f91906138fc565b60405180910390f35b34801561029457600080fd5b5061029d610a14565b6040516102aa9190613a19565b60405180910390f35b3480156102bf57600080fd5b506102c8610a1a565b6040516102d59190613917565b60405180910390f35b3480156102ea57600080fd5b506103056004803603810190610300919061355a565b610aac565b6040516103129190613895565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061344a565b610b28565b005b34801561035057600080fd5b5061036b6004803603810190610366919061348a565b610c33565b005b34801561037957600080fd5b50610382610ccc565b60405161038f9190613a19565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613334565b610ce3565b005b3480156103cd57600080fd5b506103d6610cf3565b6040516103e39190613a19565b60405180910390f35b6103f4610cfd565b005b34801561040257600080fd5b5061041d60048036038101906104189190613334565b610df9565b005b34801561042b57600080fd5b506104466004803603810190610441919061355a565b610e19565b60405161045391906138fc565b60405180910390f35b34801561046857600080fd5b50610471610e2b565b60405161047e91906138fc565b60405180910390f35b34801561049357600080fd5b5061049c610e3e565b6040516104a99190613917565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613511565b610f4c565b005b3480156104e757600080fd5b506104f0610fe2565b6040516104fd91906138fc565b60405180910390f35b34801561051257600080fd5b5061052d6004803603810190610528919061355a565b610ff5565b60405161053a9190613895565b60405180910390f35b34801561054f57600080fd5b5061055861100b565b6040516105659190613a19565b60405180910390f35b34801561057a57600080fd5b50610583611011565b6040516105909190613a19565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb91906132c7565b611095565b6040516105cd9190613a19565b60405180910390f35b3480156105e257600080fd5b506105eb611165565b6040516105f89190613917565b60405180910390f35b34801561060d57600080fd5b50610616611273565b005b34801561062457600080fd5b5061062d6112fb565b60405161063a9190613a19565b60405180910390f35b34801561064f57600080fd5b50610658611301565b6040516106659190613895565b60405180910390f35b34801561067a57600080fd5b5061068361132b565b6040516106909190613917565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613511565b6113bd565b005b6106dc60048036038101906106d7919061355a565b611453565b005b3480156106ea57600080fd5b506107056004803603810190610700919061340a565b61159f565b005b34801561071357600080fd5b5061071c611717565b6040516107299190613a19565b60405180910390f35b34801561073e57600080fd5b50610747611726565b005b34801561075557600080fd5b5061075e6117bf565b60405161076b9190613a19565b60405180910390f35b34801561078057600080fd5b5061079b60048036038101906107969190613387565b6117c9565b005b6107b760048036038101906107b29190613587565b611845565b005b3480156107c557600080fd5b506107e060048036038101906107db919061355a565b611996565b6040516107ed9190613917565b60405180910390f35b34801561080257600080fd5b5061081d600480360381019061081891906132c7565b611ae5565b60405161082a9190613a19565b60405180910390f35b34801561083f57600080fd5b50610848611af7565b6040516108559190613a19565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132f4565b611afd565b60405161089291906138fc565b60405180910390f35b6108b560048036038101906108b09190613587565b611b91565b005b3480156108c357600080fd5b506108de60048036038101906108d991906132c7565b611d06565b005b3480156108ec57600080fd5b506109076004803603810190610902919061355a565b611dfe565b005b34801561091557600080fd5b50610930600480360381019061092b919061355a565b611e84565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d5750610a0c82611f0a565b5b9050919050565b600b5481565b606060028054610a2990613ce9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5590613ce9565b8015610aa25780601f10610a7757610100808354040283529160200191610aa2565b820191906000526020600020905b815481529060010190602001808311610a8557829003601f168201915b5050505050905090565b6000610ab782611f74565b610aed576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3382610ff5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bba611fc2565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bec5750610bea81610be5611fc2565b611afd565b155b15610c23576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c2e838383611fca565b505050565b610c3b611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610c59611301565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca6906139b9565b60405180910390fd5b80600860146101000a81548160ff02191690831515021790555050565b6000610cd661207c565b6001546000540303905090565b610cee838383612081565b505050565b6000600a54905090565b610d05611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610d23611301565b73ffffffffffffffffffffffffffffffffffffffff1614610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906139b9565b60405180910390fd5b6000610d83611301565b73ffffffffffffffffffffffffffffffffffffffff1647604051610da690613880565b60006040518083038185875af1925050503d8060008114610de3576040519150601f19603f3d011682016040523d82523d6000602084013e610de8565b606091505b5050905080610df657600080fd5b50565b610e14838383604051806020016040528060008152506117c9565b505050565b6000610e2482611f74565b9050919050565b600d60009054906101000a900460ff1681565b6060610e48611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610e66611301565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906139b9565b60405180910390fd5b600e8054610ec990613ce9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef590613ce9565b8015610f425780601f10610f1757610100808354040283529160200191610f42565b820191906000526020600020905b815481529060010190602001808311610f2557829003601f168201915b5050505050905090565b610f54611fc2565b73ffffffffffffffffffffffffffffffffffffffff16610f72611301565b73ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf906139b9565b60405180910390fd5b80600f9080519060200190610fde929190613098565b5050565b600860149054906101000a900460ff1681565b600061100082612572565b600001519050919050565b60095481565b600061101b611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611039611301565b73ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906139b9565b60405180910390fd5b47905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b606061116f611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661118d611301565b73ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906139b9565b60405180910390fd5b600f80546111f090613ce9565b80601f016020809104026020016040519081016040528092919081815260200182805461121c90613ce9565b80156112695780601f1061123e57610100808354040283529160200191611269565b820191906000526020600020905b81548152906001019060200180831161124c57829003601f168201915b5050505050905090565b61127b611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611299611301565b73ffffffffffffffffffffffffffffffffffffffff16146112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e6906139b9565b60405180910390fd5b6112f96000612801565b565b600c5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461133a90613ce9565b80601f016020809104026020016040519081016040528092919081815260200182805461136690613ce9565b80156113b35780601f10611388576101008083540402835291602001916113b3565b820191906000526020600020905b81548152906001019060200180831161139657829003601f168201915b5050505050905090565b6113c5611fc2565b73ffffffffffffffffffffffffffffffffffffffff166113e3611301565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906139b9565b60405180910390fd5b80600e908051906020019061144f929190613098565b5050565b600c54600b546114639190613bff565b8161146c610ccc565b6114769190613b1e565b11156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae906139f9565b60405180910390fd5b6114bf611301565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461159257600860149054906101000a900460ff1615611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613959565b60405180910390fd5b8060095461154f9190613ba5565b341015611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613979565b60405180910390fd5b5b61159c33826128c7565b50565b6115a7611fc2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611619611fc2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116c6611fc2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161170b91906138fc565b60405180910390a35050565b60006117216128e5565b905090565b61172e611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661174c611301565b73ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611799906139b9565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600954905090565b6117d4848484612081565b6117f38373ffffffffffffffffffffffffffffffffffffffff166128f8565b801561180857506118068484848461291b565b155b1561183f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61184d611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661186b611301565b73ffffffffffffffffffffffffffffffffffffffff16146118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b8906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613999565b60405180910390fd5b600b548261193d610ccc565b6119479190613b1e565b1115611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f906139f9565b60405180910390fd5b61199281836128c7565b5050565b60606119a182611f74565b6119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906139d9565b60405180910390fd5b600d60009054906101000a900460ff16611a8657600e8054611a0190613ce9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2d90613ce9565b8015611a7a5780601f10611a4f57610100808354040283529160200191611a7a565b820191906000526020600020905b815481529060010190602001808311611a5d57829003601f168201915b50505050509050611ae0565b6000600f8054611a9590613ce9565b905011611ab15760405180602001604052806000815250611add565b600f611abc83612a7b565b604051602001611acd929190613851565b6040516020818303038152906040525b90505b919050565b6000611af082612bdc565b9050919050565b600a5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860149054906101000a900460ff1615611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890613959565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613999565b60405180910390fd5b600b5482611c5d610ccc565b611c679190613b1e565b1115611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f906139f9565b60405180910390fd5b81600954611cb69190613ba5565b341015611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef90613979565b60405180910390fd5b611d0281836128c7565b5050565b611d0e611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611d2c611301565b73ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d79906139b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613939565b60405180910390fd5b611dfb81612801565b50565b611e06611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611e24611301565b73ffffffffffffffffffffffffffffffffffffffff1614611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e71906139b9565b60405180910390fd5b80600a8190555050565b611e8c611fc2565b73ffffffffffffffffffffffffffffffffffffffff16611eaa611301565b73ffffffffffffffffffffffffffffffffffffffff1614611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef7906139b9565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611f7f61207c565b11158015611f8e575060005482105b8015611fbb575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061208c82612572565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166120b3611fc2565b73ffffffffffffffffffffffffffffffffffffffff1614806120e657506120e582600001516120e0611fc2565b611afd565b5b8061212b57506120f4611fc2565b73ffffffffffffffffffffffffffffffffffffffff1661211384610aac565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612164576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121cd576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612234576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122418585856001612cac565b6122516000848460000151611fca565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612502576000548110156125015782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461256b8585856001612cb2565b5050505050565b61257a61311e565b60008290508061258861207c565b11158015612597575060005481105b156127ca576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516127c857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126ac5780925050506127fc565b5b6001156127c757818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127c25780925050506127fc565b6126ad565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128e1828260405180602001604052806000815250612cb8565b5050565b60006128ef61207c565b60005403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612941611fc2565b8786866040518563ffffffff1660e01b815260040161296394939291906138b0565b602060405180830381600087803b15801561297d57600080fd5b505af19250505080156129ae57506040513d601f19601f820116820180604052508101906129ab91906134e4565b60015b612a28573d80600081146129de576040519150601f19603f3d011682016040523d82523d6000602084013e6129e3565b606091505b50600081511415612a20576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612ac3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bd7565b600082905060005b60008214612af5578080612ade90613d4c565b915050600a82612aee9190613b74565b9150612acb565b60008167ffffffffffffffff811115612b1157612b10613e82565b5b6040519080825280601f01601f191660200182016040528015612b435781602001600182028036833780820191505090505b5090505b60008514612bd057600182612b5c9190613bff565b9150600a85612b6b9190613d95565b6030612b779190613b1e565b60f81b818381518110612b8d57612b8c613e53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bc99190613b74565b9450612b47565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c44576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612cc58383836001612cca565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612d37576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612d72576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d7f6000868387612cac565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612f495750612f488773ffffffffffffffffffffffffffffffffffffffff166128f8565b5b1561300f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fbe600088848060010195508861291b565b612ff4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612f4f57826000541461300a57600080fd5b61307b565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613010575b8160008190555050506130916000868387612cb2565b5050505050565b8280546130a490613ce9565b90600052602060002090601f0160209004810192826130c6576000855561310d565b82601f106130df57805160ff191683800117855561310d565b8280016001018555821561310d579182015b8281111561310c5782518255916020019190600101906130f1565b5b50905061311a9190613161565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561317a576000816000905550600101613162565b5090565b600061319161318c84613a59565b613a34565b9050828152602081018484840111156131ad576131ac613eb6565b5b6131b8848285613ca7565b509392505050565b60006131d36131ce84613a8a565b613a34565b9050828152602081018484840111156131ef576131ee613eb6565b5b6131fa848285613ca7565b509392505050565b60008135905061321181614093565b92915050565b600081359050613226816140aa565b92915050565b60008135905061323b816140c1565b92915050565b600081519050613250816140c1565b92915050565b600082601f83011261326b5761326a613eb1565b5b813561327b84826020860161317e565b91505092915050565b600082601f83011261329957613298613eb1565b5b81356132a98482602086016131c0565b91505092915050565b6000813590506132c1816140d8565b92915050565b6000602082840312156132dd576132dc613ec0565b5b60006132eb84828501613202565b91505092915050565b6000806040838503121561330b5761330a613ec0565b5b600061331985828601613202565b925050602061332a85828601613202565b9150509250929050565b60008060006060848603121561334d5761334c613ec0565b5b600061335b86828701613202565b935050602061336c86828701613202565b925050604061337d868287016132b2565b9150509250925092565b600080600080608085870312156133a1576133a0613ec0565b5b60006133af87828801613202565b94505060206133c087828801613202565b93505060406133d1878288016132b2565b925050606085013567ffffffffffffffff8111156133f2576133f1613ebb565b5b6133fe87828801613256565b91505092959194509250565b6000806040838503121561342157613420613ec0565b5b600061342f85828601613202565b925050602061344085828601613217565b9150509250929050565b6000806040838503121561346157613460613ec0565b5b600061346f85828601613202565b9250506020613480858286016132b2565b9150509250929050565b6000602082840312156134a05761349f613ec0565b5b60006134ae84828501613217565b91505092915050565b6000602082840312156134cd576134cc613ec0565b5b60006134db8482850161322c565b91505092915050565b6000602082840312156134fa576134f9613ec0565b5b600061350884828501613241565b91505092915050565b60006020828403121561352757613526613ec0565b5b600082013567ffffffffffffffff81111561354557613544613ebb565b5b61355184828501613284565b91505092915050565b6000602082840312156135705761356f613ec0565b5b600061357e848285016132b2565b91505092915050565b6000806040838503121561359e5761359d613ec0565b5b60006135ac858286016132b2565b92505060206135bd85828601613202565b9150509250929050565b6135d081613c33565b82525050565b6135df81613c45565b82525050565b60006135f082613ad0565b6135fa8185613ae6565b935061360a818560208601613cb6565b61361381613ec5565b840191505092915050565b600061362982613adb565b6136338185613b02565b9350613643818560208601613cb6565b61364c81613ec5565b840191505092915050565b600061366282613adb565b61366c8185613b13565b935061367c818560208601613cb6565b80840191505092915050565b6000815461369581613ce9565b61369f8186613b13565b945060018216600081146136ba57600181146136cb576136fe565b60ff198316865281860193506136fe565b6136d485613abb565b60005b838110156136f6578154818901526001820191506020810190506136d7565b838801955050505b50505092915050565b6000613714602683613b02565b915061371f82613ed6565b604082019050919050565b6000613737600f83613b02565b915061374282613f25565b602082019050919050565b600061375a601283613b02565b915061376582613f4e565b602082019050919050565b600061377d601883613b02565b915061378882613f77565b602082019050919050565b60006137a0600583613b13565b91506137ab82613fa0565b600582019050919050565b60006137c3602083613b02565b91506137ce82613fc9565b602082019050919050565b60006137e6602f83613b02565b91506137f182613ff2565b604082019050919050565b6000613809600083613af7565b915061381482614041565b600082019050919050565b600061382c602983613b02565b915061383782614044565b604082019050919050565b61384b81613c9d565b82525050565b600061385d8285613688565b91506138698284613657565b915061387482613793565b91508190509392505050565b600061388b826137fc565b9150819050919050565b60006020820190506138aa60008301846135c7565b92915050565b60006080820190506138c560008301876135c7565b6138d260208301866135c7565b6138df6040830185613842565b81810360608301526138f181846135e5565b905095945050505050565b600060208201905061391160008301846135d6565b92915050565b60006020820190508181036000830152613931818461361e565b905092915050565b6000602082019050818103600083015261395281613707565b9050919050565b600060208201905081810360008301526139728161372a565b9050919050565b600060208201905081810360008301526139928161374d565b9050919050565b600060208201905081810360008301526139b281613770565b9050919050565b600060208201905081810360008301526139d2816137b6565b9050919050565b600060208201905081810360008301526139f2816137d9565b9050919050565b60006020820190508181036000830152613a128161381f565b9050919050565b6000602082019050613a2e6000830184613842565b92915050565b6000613a3e613a4f565b9050613a4a8282613d1b565b919050565b6000604051905090565b600067ffffffffffffffff821115613a7457613a73613e82565b5b613a7d82613ec5565b9050602081019050919050565b600067ffffffffffffffff821115613aa557613aa4613e82565b5b613aae82613ec5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b2982613c9d565b9150613b3483613c9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b6957613b68613dc6565b5b828201905092915050565b6000613b7f82613c9d565b9150613b8a83613c9d565b925082613b9a57613b99613df5565b5b828204905092915050565b6000613bb082613c9d565b9150613bbb83613c9d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bf457613bf3613dc6565b5b828202905092915050565b6000613c0a82613c9d565b9150613c1583613c9d565b925082821015613c2857613c27613dc6565b5b828203905092915050565b6000613c3e82613c7d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cd4578082015181840152602081019050613cb9565b83811115613ce3576000848401525b50505050565b60006002820490506001821680613d0157607f821691505b60208210811415613d1557613d14613e24565b5b50919050565b613d2482613ec5565b810181811067ffffffffffffffff82111715613d4357613d42613e82565b5b80604052505050565b6000613d5782613c9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d8a57613d89613dc6565b5b600182019050919050565b6000613da082613c9d565b9150613dab83613c9d565b925082613dbb57613dba613df5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374207061757365640000000000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f496e76616c696420726563696576657220616464726573730000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f596f752063616e2774206d696e74206d6f7265207468616e2074686520746f7460008201527f616c20737570706c790000000000000000000000000000000000000000000000602082015250565b61409c81613c33565b81146140a757600080fd5b50565b6140b381613c45565b81146140be57600080fd5b50565b6140ca81613c51565b81146140d557600080fd5b50565b6140e181613c9d565b81146140ec57600080fd5b5056fea2646970667358221220221dd839ae869b51659908b2c5fd547c05010814fc0a9ee48d0fd85e09b290ad64736f6c63430008070033

Deployed Bytecode Sourcemap

45976:3763:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28485:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46180:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31870:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33373:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32936:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48915:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27734:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34230:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48402:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49607:129;;;:::i;:::-;;34471:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49511:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46258:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49207:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48726:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46061:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31679:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46096:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49007:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28854:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48192:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4903;;;;;;;;;;;;;:::i;:::-;;46215:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4252:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32039:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48513:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47014:410;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33649:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49424:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46552:71;;;;;;;;;;;;;:::i;:::-;;48303:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34727:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47872:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46631:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49317:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46142:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33999:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47432:432;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5161:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49121:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48820:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28485:305;28587:4;28639:25;28624:40;;;:11;:40;;;;:105;;;;28696:33;28681:48;;;:11;:48;;;;28624:105;:158;;;;28746:36;28770:11;28746:23;:36::i;:::-;28624:158;28604:178;;28485:305;;;:::o;46180:28::-;;;;:::o;31870:100::-;31924:13;31957:5;31950:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31870:100;:::o;33373:204::-;33441:7;33466:16;33474:7;33466;:16::i;:::-;33461:64;;33491:34;;;;;;;;;;;;;;33461:64;33545:15;:24;33561:7;33545:24;;;;;;;;;;;;;;;;;;;;;33538:31;;33373:204;;;:::o;32936:371::-;33009:13;33025:24;33041:7;33025:15;:24::i;:::-;33009:40;;33070:5;33064:11;;:2;:11;;;33060:48;;;33084:24;;;;;;;;;;;;;;33060:48;33141:5;33125:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33151:37;33168:5;33175:12;:10;:12::i;:::-;33151:16;:37::i;:::-;33150:38;33125:63;33121:138;;;33212:35;;;;;;;;;;;;;;33121:138;33271:28;33280:2;33284:7;33293:5;33271:8;:28::i;:::-;32998:309;32936:371;;:::o;48915:84::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48984:12:::1;48975:6;;:21;;;;;;;;;;;;;;;;;;48915:84:::0;:::o;27734:303::-;27778:7;28003:15;:13;:15::i;:::-;27988:12;;27972:13;;:28;:46;27965:53;;27734:303;:::o;34230:170::-;34364:28;34374:4;34380:2;34384:7;34364:9;:28::i;:::-;34230:170;;;:::o;48402:103::-;48458:7;48487:10;;48480:17;;48402:103;:::o;49607:129::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49654:7:::1;49675;:5;:7::i;:::-;49667:21;;49696;49667:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49653:69;;;49731:2;49723:11;;;::::0;::::1;;49652:84;49607:129::o:0;34471:185::-;34609:39;34626:4;34632:2;34636:7;34609:39;;;;;;;;;;;;:16;:39::i;:::-;34471:185;;;:::o;49511:88::-;49565:4;49580:16;49588:7;49580;:16::i;:::-;49573:23;;49511:88;;;:::o;46258:28::-;;;;;;;;;;;;;:::o;49207:102::-;49269:13;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49293:13:::1;49286:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49207:102:::0;:::o;48726:86::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48801:8:::1;48791:7;:18;;;;;;;;;;;;:::i;:::-;;48726:86:::0;:::o;46061:26::-;;;;;;;;;;;;;:::o;31679:124::-;31743:7;31770:20;31782:7;31770:11;:20::i;:::-;:25;;;31763:32;;31679:124;;;:::o;46096:39::-;;;;:::o;49007:106::-;49071:7;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49089:21:::1;49082:28;;49007:106:::0;:::o;28854:206::-;28918:7;28959:1;28942:19;;:5;:19;;;28938:60;;;28970:28;;;;;;;;;;;;;;28938:60;29024:12;:19;29037:5;29024:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29016:36;;29009:43;;28854:206;;;:::o;48192:103::-;48245:13;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48280:7:::1;48273:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48192:103:::0;:::o;4903:::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4968:30:::1;4995:1;4968:18;:30::i;:::-;4903:103::o:0;46215:34::-;;;;:::o;4252:87::-;4298:7;4325:6;;;;;;;;;;;4318:13;;4252:87;:::o;32039:104::-;32095:13;32128:7;32121:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32039:104;:::o;48513:111::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48607:14:::1;48591:13;:30;;;;;;;;;;;;:::i;:::-;;48513:111:::0;:::o;47014:410::-;47121:14;;47112:6;;:23;;;;:::i;:::-;47100:8;47084:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:51;;47076:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;47211:7;:5;:7::i;:::-;47197:21;;:10;:21;;;47194:171;;47246:6;;;;;;;;;;;47245:7;47237:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;47322:8;47310:9;;:20;;;;:::i;:::-;47297:9;:33;;47289:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47194:171;47385:31;47395:10;47407:8;47385:9;:31::i;:::-;47014:410;:::o;33649:279::-;33752:12;:10;:12::i;:::-;33740:24;;:8;:24;;;33736:54;;;33773:17;;;;;;;;;;;;;;33736:54;33848:8;33803:18;:32;33822:12;:10;:12::i;:::-;33803:32;;;;;;;;;;;;;;;:42;33836:8;33803:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33901:8;33872:48;;33887:12;:10;:12::i;:::-;33872:48;;;33911:8;33872:48;;;;;;:::i;:::-;;;;;;;;33649:279;;:::o;49424:79::-;49468:7;49486:14;:12;:14::i;:::-;49479:21;;49424:79;:::o;46552:71::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46611:4:::1;46600:8;;:15;;;;;;;;;;;;;;;;;;46552:71::o:0;48303:91::-;48348:7;48377:9;;48370:16;;48303:91;:::o;34727:369::-;34894:28;34904:4;34910:2;34914:7;34894:9;:28::i;:::-;34937:15;:2;:13;;;:15::i;:::-;:76;;;;;34957:56;34988:4;34994:2;34998:7;35007:5;34957:30;:56::i;:::-;34956:57;34937:76;34933:156;;;35037:40;;;;;;;;;;;;;;34933:156;34727:369;;;;:::o;47872:312::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47995:1:::1;47974:23;;:9;:23;;;;47966:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;48073:6;;48061:8;48045:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:34;;48037:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;48146:30;48156:9;48167:8;48146:9;:30::i;:::-;47872:312:::0;;:::o;46631:375::-;46704:13;46740:16;46748:7;46740;:16::i;:::-;46732:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46825:8;;;;;;;;;;;46821:63;;46859:13;46852:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46821:63;46927:1;46909:7;46903:21;;;;;:::i;:::-;;;:25;:95;;;;;;;;;;;;;;;;;46955:7;46964:18;:7;:16;:18::i;:::-;46938:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46903:95;46896:102;;46631:375;;;;:::o;49317:99::-;49375:7;49393:20;49407:5;49393:13;:20::i;:::-;49386:27;;49317:99;;;:::o;46142:29::-;;;;:::o;33999:164::-;34096:4;34120:18;:25;34139:5;34120:25;;;;;;;;;;;;;;;:35;34146:8;34120:35;;;;;;;;;;;;;;;;;;;;;;;;;34113:42;;33999:164;;;;:::o;47432:432::-;47532:6;;;;;;;;;;;47531:7;47523:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;47598:1;47577:23;;:9;:23;;;;47569:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47676:6;;47664:8;47648:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:34;;47640:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;47774:8;47762:9;;:20;;;;:::i;:::-;47749:9;:33;;47741:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47826:30;47836:9;47847:8;47826:9;:30::i;:::-;47432:432;;:::o;5161:201::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5270:1:::1;5250:22;;:8;:22;;;;5242:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5326:28;5345:8;5326:18;:28::i;:::-;5161:201:::0;:::o;49121:78::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49192:4:::1;49179:10;:17;;;;49121:78:::0;:::o;48820:87::-;4483:12;:10;:12::i;:::-;4472:23;;:7;:5;:7::i;:::-;:23;;;4464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48895:9:::1;48883;:21;;;;48820:87:::0;:::o;17036:157::-;17121:4;17160:25;17145:40;;;:11;:40;;;;17138:47;;17036:157;;;:::o;35351:187::-;35408:4;35451:7;35432:15;:13;:15::i;:::-;:26;;:53;;;;;35472:13;;35462:7;:23;35432:53;:98;;;;;35503:11;:20;35515:7;35503:20;;;;;;;;;;;:27;;;;;;;;;;;;35502:28;35432:98;35425:105;;35351:187;;;:::o;2976:98::-;3029:7;3056:10;3049:17;;2976:98;:::o;42962:196::-;43104:2;43077:15;:24;43093:7;43077:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43142:7;43138:2;43122:28;;43131:5;43122:28;;;;;;;;;;;;42962:196;;;:::o;27458:92::-;27514:7;27458:92;:::o;38464:2112::-;38579:35;38617:20;38629:7;38617:11;:20::i;:::-;38579:58;;38650:22;38692:13;:18;;;38676:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;38727:50;38744:13;:18;;;38764:12;:10;:12::i;:::-;38727:16;:50::i;:::-;38676:101;:154;;;;38818:12;:10;:12::i;:::-;38794:36;;:20;38806:7;38794:11;:20::i;:::-;:36;;;38676:154;38650:181;;38849:17;38844:66;;38875:35;;;;;;;;;;;;;;38844:66;38947:4;38925:26;;:13;:18;;;:26;;;38921:67;;38960:28;;;;;;;;;;;;;;38921:67;39017:1;39003:16;;:2;:16;;;38999:52;;;39028:23;;;;;;;;;;;;;;38999:52;39064:43;39086:4;39092:2;39096:7;39105:1;39064:21;:43::i;:::-;39172:49;39189:1;39193:7;39202:13;:18;;;39172:8;:49::i;:::-;39547:1;39517:12;:18;39530:4;39517:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39591:1;39563:12;:16;39576:2;39563:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39637:2;39609:11;:20;39621:7;39609:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39699:15;39654:11;:20;39666:7;39654:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;39967:19;39999:1;39989:7;:11;39967:33;;40060:1;40019:43;;:11;:24;40031:11;40019:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40015:445;;;40244:13;;40230:11;:27;40226:219;;;40314:13;:18;;;40282:11;:24;40294:11;40282:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40397:13;:28;;;40355:11;:24;40367:11;40355:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40226:219;40015:445;39492:979;40507:7;40503:2;40488:27;;40497:4;40488:27;;;;;;;;;;;;40526:42;40547:4;40553:2;40557:7;40566:1;40526:20;:42::i;:::-;38568:2008;;38464:2112;;;:::o;30509:1108::-;30570:21;;:::i;:::-;30604:12;30619:7;30604:22;;30687:4;30668:15;:13;:15::i;:::-;:23;;:47;;;;;30702:13;;30695:4;:20;30668:47;30664:886;;;30736:31;30770:11;:17;30782:4;30770:17;;;;;;;;;;;30736:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30811:9;:16;;;30806:729;;30882:1;30856:28;;:9;:14;;;:28;;;30852:101;;30920:9;30913:16;;;;;;30852:101;31255:261;31262:4;31255:261;;;31295:6;;;;;;;;31340:11;:17;31352:4;31340:17;;;;;;;;;;;31328:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31414:1;31388:28;;:9;:14;;;:28;;;31384:109;;31456:9;31449:16;;;;;;31384:109;31255:261;;;30806:729;30717:833;30664:886;31578:31;;;;;;;;;;;;;;30509:1108;;;;:::o;5522:191::-;5596:16;5615:6;;;;;;;;;;;5596:25;;5641:8;5632:6;;:17;;;;;;;;;;;;;;;;;;5696:8;5665:40;;5686:8;5665:40;;;;;;;;;;;;5585:128;5522:191;:::o;35546:104::-;35615:27;35625:2;35629:8;35615:27;;;;;;;;;;;;:9;:27::i;:::-;35546:104;;:::o;28130:283::-;28177:7;28379:15;:13;:15::i;:::-;28363:13;;:31;28356:38;;28130:283;:::o;6953:326::-;7013:4;7270:1;7248:7;:19;;;:23;7241:30;;6953:326;;;:::o;43650:667::-;43813:4;43850:2;43834:36;;;43871:12;:10;:12::i;:::-;43885:4;43891:7;43900:5;43834:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43830:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44085:1;44068:6;:13;:18;44064:235;;;44114:40;;;;;;;;;;;;;;44064:235;44257:6;44251:13;44242:6;44238:2;44234:15;44227:38;43830:480;43963:45;;;43953:55;;;:6;:55;;;;43946:62;;;43650:667;;;;;;:::o;538:723::-;594:13;824:1;815:5;:10;811:53;;;842:10;;;;;;;;;;;;;;;;;;;;;811:53;874:12;889:5;874:20;;905:14;930:78;945:1;937:4;:9;930:78;;963:8;;;;;:::i;:::-;;;;994:2;986:10;;;;;:::i;:::-;;;930:78;;;1018:19;1050:6;1040:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1018:39;;1068:154;1084:1;1075:5;:10;1068:154;;1112:1;1102:11;;;;;:::i;:::-;;;1179:2;1171:5;:10;;;;:::i;:::-;1158:2;:24;;;;:::i;:::-;1145:39;;1128:6;1135;1128:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1208:2;1199:11;;;;;:::i;:::-;;;1068:154;;;1246:6;1232:21;;;;;538:723;;;;:::o;29142:207::-;29203:7;29244:1;29227:19;;:5;:19;;;29223:59;;;29255:27;;;;;;;;;;;;;;29223:59;29308:12;:19;29321:5;29308:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;29300:41;;29293:48;;29142:207;;;:::o;44965:159::-;;;;;:::o;45783:158::-;;;;;:::o;36013:163::-;36136:32;36142:2;36146:8;36156:5;36163:4;36136:5;:32::i;:::-;36013:163;;;:::o;36435:1775::-;36574:20;36597:13;;36574:36;;36639:1;36625:16;;:2;:16;;;36621:48;;;36650:19;;;;;;;;;;;;;;36621:48;36696:1;36684:8;:13;36680:44;;;36706:18;;;;;;;;;;;;;;36680:44;36737:61;36767:1;36771:2;36775:12;36789:8;36737:21;:61::i;:::-;37110:8;37075:12;:16;37088:2;37075:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37174:8;37134:12;:16;37147:2;37134:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37233:2;37200:11;:25;37212:12;37200:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37300:15;37250:11;:25;37262:12;37250:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37333:20;37356:12;37333:35;;37383:11;37412:8;37397:12;:23;37383:37;;37441:4;:23;;;;;37449:15;:2;:13;;;:15::i;:::-;37441:23;37437:641;;;37485:314;37541:12;37537:2;37516:38;;37533:1;37516:38;;;;;;;;;;;;37582:69;37621:1;37625:2;37629:14;;;;;;37645:5;37582:30;:69::i;:::-;37577:174;;37687:40;;;;;;;;;;;;;;37577:174;37794:3;37778:12;:19;;37485:314;;37880:12;37863:13;;:29;37859:43;;37894:8;;;37859:43;37437:641;;;37943:120;37999:14;;;;;;37995:2;37974:40;;37991:1;37974:40;;;;;;;;;;;;38058:3;38042:12;:19;;37943:120;;37437:641;38108:12;38092:13;:28;;;;37050:1082;;38142:60;38171:1;38175:2;38179:12;38193:8;38142:20;:60::i;:::-;36563:1647;36435:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:118::-;8054:24;8072:5;8054:24;:::i;:::-;8049:3;8042:37;7967:118;;:::o;8091:109::-;8172:21;8187:5;8172:21;:::i;:::-;8167:3;8160:34;8091:109;;:::o;8206:360::-;8292:3;8320:38;8352:5;8320:38;:::i;:::-;8374:70;8437:6;8432:3;8374:70;:::i;:::-;8367:77;;8453:52;8498:6;8493:3;8486:4;8479:5;8475:16;8453:52;:::i;:::-;8530:29;8552:6;8530:29;:::i;:::-;8525:3;8521:39;8514:46;;8296:270;8206:360;;;;:::o;8572:364::-;8660:3;8688:39;8721:5;8688:39;:::i;:::-;8743:71;8807:6;8802:3;8743:71;:::i;:::-;8736:78;;8823:52;8868:6;8863:3;8856:4;8849:5;8845:16;8823:52;:::i;:::-;8900:29;8922:6;8900:29;:::i;:::-;8895:3;8891:39;8884:46;;8664:272;8572:364;;;;:::o;8942:377::-;9048:3;9076:39;9109:5;9076:39;:::i;:::-;9131:89;9213:6;9208:3;9131:89;:::i;:::-;9124:96;;9229:52;9274:6;9269:3;9262:4;9255:5;9251:16;9229:52;:::i;:::-;9306:6;9301:3;9297:16;9290:23;;9052:267;8942:377;;;;:::o;9349:845::-;9452:3;9489:5;9483:12;9518:36;9544:9;9518:36;:::i;:::-;9570:89;9652:6;9647:3;9570:89;:::i;:::-;9563:96;;9690:1;9679:9;9675:17;9706:1;9701:137;;;;9852:1;9847:341;;;;9668:520;;9701:137;9785:4;9781:9;9770;9766:25;9761:3;9754:38;9821:6;9816:3;9812:16;9805:23;;9701:137;;9847:341;9914:38;9946:5;9914:38;:::i;:::-;9974:1;9988:154;10002:6;9999:1;9996:13;9988:154;;;10076:7;10070:14;10066:1;10061:3;10057:11;10050:35;10126:1;10117:7;10113:15;10102:26;;10024:4;10021:1;10017:12;10012:17;;9988:154;;;10171:6;10166:3;10162:16;10155:23;;9854:334;;9668:520;;9456:738;;9349:845;;;;:::o;10200:366::-;10342:3;10363:67;10427:2;10422:3;10363:67;:::i;:::-;10356:74;;10439:93;10528:3;10439:93;:::i;:::-;10557:2;10552:3;10548:12;10541:19;;10200:366;;;:::o;10572:::-;10714:3;10735:67;10799:2;10794:3;10735:67;:::i;:::-;10728:74;;10811:93;10900:3;10811:93;:::i;:::-;10929:2;10924:3;10920:12;10913:19;;10572:366;;;:::o;10944:::-;11086:3;11107:67;11171:2;11166:3;11107:67;:::i;:::-;11100:74;;11183:93;11272:3;11183:93;:::i;:::-;11301:2;11296:3;11292:12;11285:19;;10944:366;;;:::o;11316:::-;11458:3;11479:67;11543:2;11538:3;11479:67;:::i;:::-;11472:74;;11555:93;11644:3;11555:93;:::i;:::-;11673:2;11668:3;11664:12;11657:19;;11316:366;;;:::o;11688:400::-;11848:3;11869:84;11951:1;11946:3;11869:84;:::i;:::-;11862:91;;11962:93;12051:3;11962:93;:::i;:::-;12080:1;12075:3;12071:11;12064:18;;11688:400;;;:::o;12094:366::-;12236:3;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12333:93;12422:3;12333:93;:::i;:::-;12451:2;12446:3;12442:12;12435:19;;12094:366;;;:::o;12466:::-;12608:3;12629:67;12693:2;12688:3;12629:67;:::i;:::-;12622:74;;12705:93;12794:3;12705:93;:::i;:::-;12823:2;12818:3;12814:12;12807:19;;12466:366;;;:::o;12838:398::-;12997:3;13018:83;13099:1;13094:3;13018:83;:::i;:::-;13011:90;;13110:93;13199:3;13110:93;:::i;:::-;13228:1;13223:3;13219:11;13212:18;;12838:398;;;:::o;13242:366::-;13384:3;13405:67;13469:2;13464:3;13405:67;:::i;:::-;13398:74;;13481:93;13570:3;13481:93;:::i;:::-;13599:2;13594:3;13590:12;13583:19;;13242:366;;;:::o;13614:118::-;13701:24;13719:5;13701:24;:::i;:::-;13696:3;13689:37;13614:118;;:::o;13738:695::-;14016:3;14038:92;14126:3;14117:6;14038:92;:::i;:::-;14031:99;;14147:95;14238:3;14229:6;14147:95;:::i;:::-;14140:102;;14259:148;14403:3;14259:148;:::i;:::-;14252:155;;14424:3;14417:10;;13738:695;;;;;:::o;14439:379::-;14623:3;14645:147;14788:3;14645:147;:::i;:::-;14638:154;;14809:3;14802:10;;14439:379;;;:::o;14824:222::-;14917:4;14955:2;14944:9;14940:18;14932:26;;14968:71;15036:1;15025:9;15021:17;15012:6;14968:71;:::i;:::-;14824:222;;;;:::o;15052:640::-;15247:4;15285:3;15274:9;15270:19;15262:27;;15299:71;15367:1;15356:9;15352:17;15343:6;15299:71;:::i;:::-;15380:72;15448:2;15437:9;15433:18;15424:6;15380:72;:::i;:::-;15462;15530:2;15519:9;15515:18;15506:6;15462:72;:::i;:::-;15581:9;15575:4;15571:20;15566:2;15555:9;15551:18;15544:48;15609:76;15680:4;15671:6;15609:76;:::i;:::-;15601:84;;15052:640;;;;;;;:::o;15698:210::-;15785:4;15823:2;15812:9;15808:18;15800:26;;15836:65;15898:1;15887:9;15883:17;15874:6;15836:65;:::i;:::-;15698:210;;;;:::o;15914:313::-;16027:4;16065:2;16054:9;16050:18;16042:26;;16114:9;16108:4;16104:20;16100:1;16089:9;16085:17;16078:47;16142:78;16215:4;16206:6;16142:78;:::i;:::-;16134:86;;15914:313;;;;:::o;16233:419::-;16399:4;16437:2;16426:9;16422:18;16414:26;;16486:9;16480:4;16476:20;16472:1;16461:9;16457:17;16450:47;16514:131;16640:4;16514:131;:::i;:::-;16506:139;;16233:419;;;:::o;16658:::-;16824:4;16862:2;16851:9;16847:18;16839:26;;16911:9;16905:4;16901:20;16897:1;16886:9;16882:17;16875:47;16939:131;17065:4;16939:131;:::i;:::-;16931:139;;16658:419;;;:::o;17083:::-;17249:4;17287:2;17276:9;17272:18;17264:26;;17336:9;17330:4;17326:20;17322:1;17311:9;17307:17;17300:47;17364:131;17490:4;17364:131;:::i;:::-;17356:139;;17083:419;;;:::o;17508:::-;17674:4;17712:2;17701:9;17697:18;17689:26;;17761:9;17755:4;17751:20;17747:1;17736:9;17732:17;17725:47;17789:131;17915:4;17789:131;:::i;:::-;17781:139;;17508:419;;;:::o;17933:::-;18099:4;18137:2;18126:9;18122:18;18114:26;;18186:9;18180:4;18176:20;18172:1;18161:9;18157:17;18150:47;18214:131;18340:4;18214:131;:::i;:::-;18206:139;;17933:419;;;:::o;18358:::-;18524:4;18562:2;18551:9;18547:18;18539:26;;18611:9;18605:4;18601:20;18597:1;18586:9;18582:17;18575:47;18639:131;18765:4;18639:131;:::i;:::-;18631:139;;18358:419;;;:::o;18783:::-;18949:4;18987:2;18976:9;18972:18;18964:26;;19036:9;19030:4;19026:20;19022:1;19011:9;19007:17;19000:47;19064:131;19190:4;19064:131;:::i;:::-;19056:139;;18783:419;;;:::o;19208:222::-;19301:4;19339:2;19328:9;19324:18;19316:26;;19352:71;19420:1;19409:9;19405:17;19396:6;19352:71;:::i;:::-;19208:222;;;;:::o;19436:129::-;19470:6;19497:20;;:::i;:::-;19487:30;;19526:33;19554:4;19546:6;19526:33;:::i;:::-;19436:129;;;:::o;19571:75::-;19604:6;19637:2;19631:9;19621:19;;19571:75;:::o;19652:307::-;19713:4;19803:18;19795:6;19792:30;19789:56;;;19825:18;;:::i;:::-;19789:56;19863:29;19885:6;19863:29;:::i;:::-;19855:37;;19947:4;19941;19937:15;19929:23;;19652:307;;;:::o;19965:308::-;20027:4;20117:18;20109:6;20106:30;20103:56;;;20139:18;;:::i;:::-;20103:56;20177:29;20199:6;20177:29;:::i;:::-;20169:37;;20261:4;20255;20251:15;20243:23;;19965:308;;;:::o;20279:141::-;20328:4;20351:3;20343:11;;20374:3;20371:1;20364:14;20408:4;20405:1;20395:18;20387:26;;20279:141;;;:::o;20426:98::-;20477:6;20511:5;20505:12;20495:22;;20426:98;;;:::o;20530:99::-;20582:6;20616:5;20610:12;20600:22;;20530:99;;;:::o;20635:168::-;20718:11;20752:6;20747:3;20740:19;20792:4;20787:3;20783:14;20768:29;;20635:168;;;;:::o;20809:147::-;20910:11;20947:3;20932:18;;20809:147;;;;:::o;20962:169::-;21046:11;21080:6;21075:3;21068:19;21120:4;21115:3;21111:14;21096:29;;20962:169;;;;:::o;21137:148::-;21239:11;21276:3;21261:18;;21137:148;;;;:::o;21291:305::-;21331:3;21350:20;21368:1;21350:20;:::i;:::-;21345:25;;21384:20;21402:1;21384:20;:::i;:::-;21379:25;;21538:1;21470:66;21466:74;21463:1;21460:81;21457:107;;;21544:18;;:::i;:::-;21457:107;21588:1;21585;21581:9;21574:16;;21291:305;;;;:::o;21602:185::-;21642:1;21659:20;21677:1;21659:20;:::i;:::-;21654:25;;21693:20;21711:1;21693:20;:::i;:::-;21688:25;;21732:1;21722:35;;21737:18;;:::i;:::-;21722:35;21779:1;21776;21772:9;21767:14;;21602:185;;;;:::o;21793:348::-;21833:7;21856:20;21874:1;21856:20;:::i;:::-;21851:25;;21890:20;21908:1;21890:20;:::i;:::-;21885:25;;22078:1;22010:66;22006:74;22003:1;22000:81;21995:1;21988:9;21981:17;21977:105;21974:131;;;22085:18;;:::i;:::-;21974:131;22133:1;22130;22126:9;22115:20;;21793:348;;;;:::o;22147:191::-;22187:4;22207:20;22225:1;22207:20;:::i;:::-;22202:25;;22241:20;22259:1;22241:20;:::i;:::-;22236:25;;22280:1;22277;22274:8;22271:34;;;22285:18;;:::i;:::-;22271:34;22330:1;22327;22323:9;22315:17;;22147:191;;;;:::o;22344:96::-;22381:7;22410:24;22428:5;22410:24;:::i;:::-;22399:35;;22344:96;;;:::o;22446:90::-;22480:7;22523:5;22516:13;22509:21;22498:32;;22446:90;;;:::o;22542:149::-;22578:7;22618:66;22611:5;22607:78;22596:89;;22542:149;;;:::o;22697:126::-;22734:7;22774:42;22767:5;22763:54;22752:65;;22697:126;;;:::o;22829:77::-;22866:7;22895:5;22884:16;;22829:77;;;:::o;22912:154::-;22996:6;22991:3;22986;22973:30;23058:1;23049:6;23044:3;23040:16;23033:27;22912:154;;;:::o;23072:307::-;23140:1;23150:113;23164:6;23161:1;23158:13;23150:113;;;23249:1;23244:3;23240:11;23234:18;23230:1;23225:3;23221:11;23214:39;23186:2;23183:1;23179:10;23174:15;;23150:113;;;23281:6;23278:1;23275:13;23272:101;;;23361:1;23352:6;23347:3;23343:16;23336:27;23272:101;23121:258;23072:307;;;:::o;23385:320::-;23429:6;23466:1;23460:4;23456:12;23446:22;;23513:1;23507:4;23503:12;23534:18;23524:81;;23590:4;23582:6;23578:17;23568:27;;23524:81;23652:2;23644:6;23641:14;23621:18;23618:38;23615:84;;;23671:18;;:::i;:::-;23615:84;23436:269;23385:320;;;:::o;23711:281::-;23794:27;23816:4;23794:27;:::i;:::-;23786:6;23782:40;23924:6;23912:10;23909:22;23888:18;23876:10;23873:34;23870:62;23867:88;;;23935:18;;:::i;:::-;23867:88;23975:10;23971:2;23964:22;23754:238;23711:281;;:::o;23998:233::-;24037:3;24060:24;24078:5;24060:24;:::i;:::-;24051:33;;24106:66;24099:5;24096:77;24093:103;;;24176:18;;:::i;:::-;24093:103;24223:1;24216:5;24212:13;24205:20;;23998:233;;;:::o;24237:176::-;24269:1;24286:20;24304:1;24286:20;:::i;:::-;24281:25;;24320:20;24338:1;24320:20;:::i;:::-;24315:25;;24359:1;24349:35;;24364:18;;:::i;:::-;24349:35;24405:1;24402;24398:9;24393:14;;24237:176;;;;:::o;24419:180::-;24467:77;24464:1;24457:88;24564:4;24561:1;24554:15;24588:4;24585:1;24578:15;24605:180;24653:77;24650:1;24643:88;24750:4;24747:1;24740:15;24774:4;24771:1;24764:15;24791:180;24839:77;24836:1;24829:88;24936:4;24933:1;24926:15;24960:4;24957:1;24950:15;24977:180;25025:77;25022:1;25015:88;25122:4;25119:1;25112:15;25146:4;25143:1;25136:15;25163:180;25211:77;25208:1;25201:88;25308:4;25305:1;25298:15;25332:4;25329:1;25322:15;25349:117;25458:1;25455;25448:12;25472:117;25581:1;25578;25571:12;25595:117;25704:1;25701;25694:12;25718:117;25827:1;25824;25817:12;25841:102;25882:6;25933:2;25929:7;25924:2;25917:5;25913:14;25909:28;25899:38;;25841:102;;;:::o;25949:225::-;26089:34;26085:1;26077:6;26073:14;26066:58;26158:8;26153:2;26145:6;26141:15;26134:33;25949:225;:::o;26180:165::-;26320:17;26316:1;26308:6;26304:14;26297:41;26180:165;:::o;26351:168::-;26491:20;26487:1;26479:6;26475:14;26468:44;26351:168;:::o;26525:174::-;26665:26;26661:1;26653:6;26649:14;26642:50;26525:174;:::o;26705:155::-;26845:7;26841:1;26833:6;26829:14;26822:31;26705:155;:::o;26866:182::-;27006:34;27002:1;26994:6;26990:14;26983:58;26866:182;:::o;27054:234::-;27194:34;27190:1;27182:6;27178:14;27171:58;27263:17;27258:2;27250:6;27246:15;27239:42;27054:234;:::o;27294:114::-;;:::o;27414:228::-;27554:34;27550:1;27542:6;27538:14;27531:58;27623:11;27618:2;27610:6;27606:15;27599:36;27414:228;:::o;27648:122::-;27721:24;27739:5;27721:24;:::i;:::-;27714:5;27711:35;27701:63;;27760:1;27757;27750:12;27701:63;27648:122;:::o;27776:116::-;27846:21;27861:5;27846:21;:::i;:::-;27839:5;27836:32;27826:60;;27882:1;27879;27872:12;27826:60;27776:116;:::o;27898:120::-;27970:23;27987:5;27970:23;:::i;:::-;27963:5;27960:34;27950:62;;28008:1;28005;27998:12;27950:62;27898:120;:::o;28024:122::-;28097:24;28115:5;28097:24;:::i;:::-;28090:5;28087:35;28077:63;;28136:1;28133;28126:12;28077:63;28024:122;:::o

Swarm Source

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