ETH Price: $3,063.18 (+1.24%)
Gas: 6 Gwei

Token

STRANGER THINGS ETH (STHNGS)
 

Overview

Max Total Supply

100 STHNGS

Holders

13

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 STHNGS
0x878b996ddce8d74f55a487e378d05a3a64fa5d02
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:
STRANGERTHINGSETH

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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.7.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
                /// @solidity memory-safe-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 (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/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 (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/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: @openzeppelin/contracts/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        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 overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

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

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

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

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


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

pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/ST_NFT.sol



pragma solidity ^0.8.0;





contract STRANGERTHINGSETH is ERC721, ERC721Enumerable , Ownable {

    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter internal supply;

    uint256 constant public MAX_SUPPLY = 100;

    string uriPrefix = "";
    string public uriSuffix = ".json";

    uint96 royalityFeeInBips;
    string contractUri;
    address RoyalityReciever;

    constructor(string memory _contractUri) ERC721("STRANGER THINGS ETH", "STHNGS") {
        contractUri = _contractUri;
        royalityFeeInBips = 500;
        RoyalityReciever = 0x5d6068838c8FFCA58061FB54d3C4d0c064107e4E;
    }
    
    function mint(uint256 _mintAmount) public onlyOwner {
        checker(_mintAmount);
        for (uint256 i = 1; i <= _mintAmount; i++) {
            supply.increment();
            _safeMint(msg.sender, supply.current());
        }
    }

    function airDrop(address _recipient) public onlyOwner {
        checker(1);
        unchecked{
            supply.increment();
            _safeMint(_recipient, supply.current());
        }
    }

    function batchAirDrop(address[] calldata _adr) public  onlyOwner {
        uint256 length = _adr.length;
        checker(length);
        for(uint i = 0 ; i < length ; i++){
            supply.increment();
            _safeMint(_adr[i], supply.current());
        }
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = 1;
        uint256 ownedTokenIndex = 0;

        while (ownedTokenIndex < ownerTokenCount && currentTokenId <= MAX_SUPPLY) {
            address currentTokenOwner = ownerOf(currentTokenId);

            if (currentTokenOwner == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;

                ownedTokenIndex++;
            }
            currentTokenId++;
        }

        return ownedTokenIds;
    }

    function checker(uint _value) private view {
        uint runningSupply = totalSupply();
        require(runningSupply + _value <= MAX_SUPPLY,"Error: Max Limit Exceeded!");
    }

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

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

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
        uriSuffix = _uriSuffix;
    }

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

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
        uriPrefix = _uriPrefix;
    }

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

    function contractURI() public view returns (string memory) {
        return contractUri;
    }

    function royaltyInfo(
        uint256 _tokenId,
        uint256 _salePrice
    ) external view returns (
        address receiver,
        uint256 royaltyAmount
    ) {
        if(_tokenId>=0){}
        return (RoyalityReciever , calculateRoyality(_salePrice));
    }

    function calculateRoyality(uint256 _salePrice) internal view returns (uint256){
        return (_salePrice / 10000) * royalityFeeInBips; 
    }

    function setRoyalityInfo(address _Reciever, uint96 _royalityFeeInBips) public onlyOwner {
        royalityFeeInBips = _royalityFeeInBips;
        RoyalityReciever = _Reciever;
    }

    function setContractUri(string calldata _contrctURI) public onlyOwner {
        contractUri = _contrctURI;
    } 

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

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

    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_contractUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adr","type":"address[]"}],"name":"batchAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"_contrctURI","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_Reciever","type":"address"},{"internalType":"uint96","name":"_royalityFeeInBips","type":"uint96"}],"name":"setRoyalityInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260405180602001604052806000815250600c90805190602001906200002b929190620002e3565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d908051906020019062000079929190620002e3565b503480156200008757600080fd5b50604051620047f1380380620047f18339818101604052810190620000ad919062000411565b6040518060400160405280601381526020017f535452414e474552205448494e475320455448000000000000000000000000008152506040518060400160405280600681526020017f5354484e47530000000000000000000000000000000000000000000000000000815250816000908051906020019062000131929190620002e3565b5080600190805190602001906200014a929190620002e3565b5050506200016d620001616200021560201b60201c565b6200021d60201b60201c565b80600f908051906020019062000185929190620002e3565b506101f4600e60006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550735d6068838c8ffca58061fb54d3c4d0c064107e4e601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620005e6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002f190620004f7565b90600052602060002090601f01602090048101928262000315576000855562000361565b82601f106200033057805160ff191683800117855562000361565b8280016001018555821562000361579182015b828111156200036057825182559160200191906001019062000343565b5b50905062000370919062000374565b5090565b5b808211156200038f57600081600090555060010162000375565b5090565b6000620003aa620003a4846200048b565b62000462565b905082815260208101848484011115620003c957620003c8620005c6565b5b620003d6848285620004c1565b509392505050565b600082601f830112620003f657620003f5620005c1565b5b81516200040884826020860162000393565b91505092915050565b6000602082840312156200042a5762000429620005d0565b5b600082015167ffffffffffffffff8111156200044b576200044a620005cb565b5b6200045984828501620003de565b91505092915050565b60006200046e62000481565b90506200047c82826200052d565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a862000592565b5b620004b482620005d5565b9050602081019050919050565b60005b83811015620004e1578082015181840152602081019050620004c4565b83811115620004f1576000848401525b50505050565b600060028204905060018216806200051057607f821691505b6020821081141562000527576200052662000563565b5b50919050565b6200053882620005d5565b810181811067ffffffffffffffff821117156200055a576200055962000592565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6141fb80620005f66000396000f3fe6080604052600436106101e75760003560e01c806370a0823111610102578063acf4920511610095578063cd18d5a411610064578063cd18d5a41461070c578063e8a3d48514610735578063e985e9c514610760578063f2fde38b1461079d576101ee565b8063acf4920514610654578063b88d4fde1461067d578063c87b56dd146106a6578063ccb4807b146106e3576101ee565b806395d89b41116100d157806395d89b41146105ae578063a0712d68146105d9578063a22cb46514610602578063a43f31731461062b576101ee565b806370a0823114610506578063715018a6146105435780637ec4a6591461055a5780638da5cb5b14610583576101ee565b80632f745c591161017a578063438b630011610149578063438b6300146104245780634f6ccce7146104615780635503a0e81461049e5780636352211e146104c9576101ee565b80632f745c591461037c57806332cb6b0c146103b95780633ccfd60b146103e457806342842e0e146103fb576101ee565b806316ba10e0116101b657806316ba10e0146102c157806318160ddd146102ea57806323b872dd146103155780632a55205a1461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612eb1565b6107c6565b6040516102279190613550565b60405180910390f35b34801561023c57600080fd5b50610245610808565b604051610252919061356b565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612fa1565b61089a565b60405161028f919061349e565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612de4565b6108e0565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190612f58565b6109f8565b005b3480156102f657600080fd5b506102ff610a1a565b60405161030c91906137ad565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190612cce565b610a27565b005b34801561034a57600080fd5b5061036560048036038101906103609190612fce565b610a87565b604051610373929190613505565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612de4565b610ac1565b6040516103b091906137ad565b60405180910390f35b3480156103c557600080fd5b506103ce610b66565b6040516103db91906137ad565b60405180910390f35b3480156103f057600080fd5b506103f9610b6b565b005b34801561040757600080fd5b50610422600480360381019061041d9190612cce565b610bf3565b005b34801561043057600080fd5b5061044b60048036038101906104469190612c61565b610c13565b604051610458919061352e565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190612fa1565b610d1d565b60405161049591906137ad565b60405180910390f35b3480156104aa57600080fd5b506104b3610d8e565b6040516104c0919061356b565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190612fa1565b610e1c565b6040516104fd919061349e565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190612c61565b610ece565b60405161053a91906137ad565b60405180910390f35b34801561054f57600080fd5b50610558610f86565b005b34801561056657600080fd5b50610581600480360381019061057c9190612f58565b610f9a565b005b34801561058f57600080fd5b50610598610fbc565b6040516105a5919061349e565b60405180910390f35b3480156105ba57600080fd5b506105c3610fe6565b6040516105d0919061356b565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190612fa1565b611078565b005b34801561060e57600080fd5b5061062960048036038101906106249190612da4565b6110cb565b005b34801561063757600080fd5b50610652600480360381019061064d9190612e64565b6110e1565b005b34801561066057600080fd5b5061067b60048036038101906106769190612e24565b611162565b005b34801561068957600080fd5b506106a4600480360381019061069f9190612d21565b6111e0565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190612fa1565b611242565b6040516106da919061356b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612f0b565b6112ec565b005b34801561071857600080fd5b50610733600480360381019061072e9190612c61565b61130a565b005b34801561074157600080fd5b5061074a61133c565b604051610757919061356b565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190612c8e565b6113ce565b6040516107949190613550565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf9190612c61565b611462565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108015750610800826114e6565b5b9050919050565b60606000805461081790613ace565b80601f016020809104026020016040519081016040528092919081815260200182805461084390613ace565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b60006108a582611560565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108eb82610e1c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561095c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109539061372d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097b6115ab565b73ffffffffffffffffffffffffffffffffffffffff1614806109aa57506109a9816109a46115ab565b6113ce565b5b6109e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e09061368d565b60405180910390fd5b6109f383836115b3565b505050565b610a0061166c565b80600d9080519060200190610a1692919061292e565b5050565b6000600880549050905090565b610a38610a326115ab565b826116ea565b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e9061378d565b60405180910390fd5b610a8283838361177f565b505050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ab6846119e6565b915091509250929050565b6000610acc83610ece565b8210610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b049061358d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b606481565b610b7361166c565b6000610b7d610fbc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610ba090613489565b60006040518083038185875af1925050503d8060008114610bdd576040519150601f19603f3d011682016040523d82523d6000602084013e610be2565b606091505b5050905080610bf057600080fd5b50565b610c0e838383604051806020016040528060008152506111e0565b505050565b60606000610c2083610ece565b905060008167ffffffffffffffff811115610c3e57610c3d613c96565b5b604051908082528060200260200182016040528015610c6c5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610c88575060648211155b15610d11576000610c9883610e1c565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cfd5782848381518110610ce257610ce1613c67565b5b6020026020010181815250508180610cf990613b31565b9250505b8280610d0890613b31565b93505050610c78565b82945050505050919050565b6000610d27610a1a565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f9061376d565b60405180910390fd5b60088281548110610d7c57610d7b613c67565b5b90600052602060002001549050919050565b600d8054610d9b90613ace565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc790613ace565b8015610e145780601f10610de957610100808354040283529160200191610e14565b820191906000526020600020905b815481529060010190602001808311610df757829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc9061370d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f369061366d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f8e61166c565b610f986000611a30565b565b610fa261166c565b80600c9080519060200190610fb892919061292e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ff590613ace565b80601f016020809104026020016040519081016040528092919081815260200182805461102190613ace565b801561106e5780601f106110435761010080835404028352916020019161106e565b820191906000526020600020905b81548152906001019060200180831161105157829003601f168201915b5050505050905090565b61108061166c565b61108981611af6565b6000600190505b8181116110c7576110a1600b611b55565b6110b4336110af600b611b6b565b611b79565b80806110bf90613b31565b915050611090565b5050565b6110dd6110d66115ab565b8383611b97565b5050565b6110e961166c565b60008282905090506110fa81611af6565b60005b8181101561115c5761110f600b611b55565b61114984848381811061112557611124613c67565b5b905060200201602081019061113a9190612c61565b611144600b611b6b565b611b79565b808061115490613b31565b9150506110fd565b50505050565b61116a61166c565b80600e60006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6111f16111eb6115ab565b836116ea565b611230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112279061378d565b60405180910390fd5b61123c84848484611d04565b50505050565b606061124d82611d60565b61128c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611283906136ed565b60405180910390fd5b6000611296611dcc565b905060008151116112b657604051806020016040528060008152506112e4565b806112c084611e5e565b600d6040516020016112d493929190613458565b6040516020818303038152906040525b915050919050565b6112f461166c565b8181600f91906113059291906129b4565b505050565b61131261166c565b61131c6001611af6565b611326600b611b55565b61133981611334600b611b6b565b611b79565b50565b6060600f805461134b90613ace565b80601f016020809104026020016040519081016040528092919081815260200182805461137790613ace565b80156113c45780601f10611399576101008083540402835291602001916113c4565b820191906000526020600020905b8154815290600101906020018083116113a757829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61146a61166c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d1906135cd565b60405180910390fd5b6114e381611a30565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611559575061155882611fbf565b5b9050919050565b61156981611d60565b6115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f9061370d565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661162683610e1c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116746115ab565b73ffffffffffffffffffffffffffffffffffffffff16611692610fbc565b73ffffffffffffffffffffffffffffffffffffffff16146116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906136cd565b60405180910390fd5b565b6000806116f683610e1c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611738575061173781856113ce565b5b8061177657508373ffffffffffffffffffffffffffffffffffffffff1661175e8461089a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661179f82610e1c565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec906135ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c9061362d565b60405180910390fd5b6118708383836120a1565b61187b6000826115b3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118cb91906139cc565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461192291906138eb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e18383836120b1565b505050565b6000600e60009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1661271083611a1f9190613941565b611a299190613972565b9050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611b00610a1a565b905060648282611b1091906138eb565b1115611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b489061374d565b60405180910390fd5b5050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611b938282604051806020016040528060008152506120b6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd9061364d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf79190613550565b60405180910390a3505050565b611d0f84848461177f565b611d1b84848484612111565b611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d51906135ad565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600c8054611ddb90613ace565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0790613ace565b8015611e545780601f10611e2957610100808354040283529160200191611e54565b820191906000526020600020905b815481529060010190602001808311611e3757829003601f168201915b5050505050905090565b60606000821415611ea6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fba565b600082905060005b60008214611ed8578080611ec190613b31565b915050600a82611ed19190613941565b9150611eae565b60008167ffffffffffffffff811115611ef457611ef3613c96565b5b6040519080825280601f01601f191660200182016040528015611f265781602001600182028036833780820191505090505b5090505b60008514611fb357600182611f3f91906139cc565b9150600a85611f4e9190613b7a565b6030611f5a91906138eb565b60f81b818381518110611f7057611f6f613c67565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fac9190613941565b9450611f2a565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209a5750612099826122a8565b5b9050919050565b6120ac838383612312565b505050565b505050565b6120c08383612426565b6120cd6000848484612111565b61210c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612103906135ad565b60405180910390fd5b505050565b60006121328473ffffffffffffffffffffffffffffffffffffffff16612600565b1561229b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261215b6115ab565b8786866040518563ffffffff1660e01b815260040161217d94939291906134b9565b602060405180830381600087803b15801561219757600080fd5b505af19250505080156121c857506040513d601f19601f820116820180604052508101906121c59190612ede565b60015b61224b573d80600081146121f8576040519150601f19603f3d011682016040523d82523d6000602084013e6121fd565b606091505b50600081511415612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906135ad565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506122a0565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61231d838383612623565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123605761235b81612628565b61239f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461239e5761239d8382612671565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e2576123dd816127de565b612421565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124205761241f82826128af565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906136ad565b60405180910390fd5b61249f81611d60565b156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d69061360d565b60405180910390fd5b6124eb600083836120a1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461253b91906138eb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125fc600083836120b1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161267e84610ece565b61268891906139cc565b905060006007600084815260200190815260200160002054905081811461276d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127f291906139cc565b905060006009600084815260200190815260200160002054905060006008838154811061282257612821613c67565b5b90600052602060002001549050806008838154811061284457612843613c67565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061289357612892613c38565b5b6001900381819060005260206000200160009055905550505050565b60006128ba83610ece565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461293a90613ace565b90600052602060002090601f01602090048101928261295c57600085556129a3565b82601f1061297557805160ff19168380011785556129a3565b828001600101855582156129a3579182015b828111156129a2578251825591602001919060010190612987565b5b5090506129b09190612a3a565b5090565b8280546129c090613ace565b90600052602060002090601f0160209004810192826129e25760008555612a29565b82601f106129fb57803560ff1916838001178555612a29565b82800160010185558215612a29579182015b82811115612a28578235825591602001919060010190612a0d565b5b509050612a369190612a3a565b5090565b5b80821115612a53576000816000905550600101612a3b565b5090565b6000612a6a612a65846137ed565b6137c8565b905082815260208101848484011115612a8657612a85613cd4565b5b612a91848285613a8c565b509392505050565b6000612aac612aa78461381e565b6137c8565b905082815260208101848484011115612ac857612ac7613cd4565b5b612ad3848285613a8c565b509392505050565b600081359050612aea81614152565b92915050565b60008083601f840112612b0657612b05613cca565b5b8235905067ffffffffffffffff811115612b2357612b22613cc5565b5b602083019150836020820283011115612b3f57612b3e613ccf565b5b9250929050565b600081359050612b5581614169565b92915050565b600081359050612b6a81614180565b92915050565b600081519050612b7f81614180565b92915050565b600082601f830112612b9a57612b99613cca565b5b8135612baa848260208601612a57565b91505092915050565b60008083601f840112612bc957612bc8613cca565b5b8235905067ffffffffffffffff811115612be657612be5613cc5565b5b602083019150836001820283011115612c0257612c01613ccf565b5b9250929050565b600082601f830112612c1e57612c1d613cca565b5b8135612c2e848260208601612a99565b91505092915050565b600081359050612c4681614197565b92915050565b600081359050612c5b816141ae565b92915050565b600060208284031215612c7757612c76613cde565b5b6000612c8584828501612adb565b91505092915050565b60008060408385031215612ca557612ca4613cde565b5b6000612cb385828601612adb565b9250506020612cc485828601612adb565b9150509250929050565b600080600060608486031215612ce757612ce6613cde565b5b6000612cf586828701612adb565b9350506020612d0686828701612adb565b9250506040612d1786828701612c37565b9150509250925092565b60008060008060808587031215612d3b57612d3a613cde565b5b6000612d4987828801612adb565b9450506020612d5a87828801612adb565b9350506040612d6b87828801612c37565b925050606085013567ffffffffffffffff811115612d8c57612d8b613cd9565b5b612d9887828801612b85565b91505092959194509250565b60008060408385031215612dbb57612dba613cde565b5b6000612dc985828601612adb565b9250506020612dda85828601612b46565b9150509250929050565b60008060408385031215612dfb57612dfa613cde565b5b6000612e0985828601612adb565b9250506020612e1a85828601612c37565b9150509250929050565b60008060408385031215612e3b57612e3a613cde565b5b6000612e4985828601612adb565b9250506020612e5a85828601612c4c565b9150509250929050565b60008060208385031215612e7b57612e7a613cde565b5b600083013567ffffffffffffffff811115612e9957612e98613cd9565b5b612ea585828601612af0565b92509250509250929050565b600060208284031215612ec757612ec6613cde565b5b6000612ed584828501612b5b565b91505092915050565b600060208284031215612ef457612ef3613cde565b5b6000612f0284828501612b70565b91505092915050565b60008060208385031215612f2257612f21613cde565b5b600083013567ffffffffffffffff811115612f4057612f3f613cd9565b5b612f4c85828601612bb3565b92509250509250929050565b600060208284031215612f6e57612f6d613cde565b5b600082013567ffffffffffffffff811115612f8c57612f8b613cd9565b5b612f9884828501612c09565b91505092915050565b600060208284031215612fb757612fb6613cde565b5b6000612fc584828501612c37565b91505092915050565b60008060408385031215612fe557612fe4613cde565b5b6000612ff385828601612c37565b925050602061300485828601612c37565b9150509250929050565b600061301a838361343a565b60208301905092915050565b61302f81613a00565b82525050565b600061304082613874565b61304a81856138a2565b93506130558361384f565b8060005b8381101561308657815161306d888261300e565b975061307883613895565b925050600181019050613059565b5085935050505092915050565b61309c81613a12565b82525050565b60006130ad8261387f565b6130b781856138b3565b93506130c7818560208601613a9b565b6130d081613ce3565b840191505092915050565b60006130e68261388a565b6130f081856138cf565b9350613100818560208601613a9b565b61310981613ce3565b840191505092915050565b600061311f8261388a565b61312981856138e0565b9350613139818560208601613a9b565b80840191505092915050565b6000815461315281613ace565b61315c81866138e0565b945060018216600081146131775760018114613188576131bb565b60ff198316865281860193506131bb565b6131918561385f565b60005b838110156131b357815481890152600182019150602081019050613194565b838801955050505b50505092915050565b60006131d1602b836138cf565b91506131dc82613cf4565b604082019050919050565b60006131f46032836138cf565b91506131ff82613d43565b604082019050919050565b60006132176026836138cf565b915061322282613d92565b604082019050919050565b600061323a6025836138cf565b915061324582613de1565b604082019050919050565b600061325d601c836138cf565b915061326882613e30565b602082019050919050565b60006132806024836138cf565b915061328b82613e59565b604082019050919050565b60006132a36019836138cf565b91506132ae82613ea8565b602082019050919050565b60006132c66029836138cf565b91506132d182613ed1565b604082019050919050565b60006132e9603e836138cf565b91506132f482613f20565b604082019050919050565b600061330c6020836138cf565b915061331782613f6f565b602082019050919050565b600061332f6020836138cf565b915061333a82613f98565b602082019050919050565b6000613352602f836138cf565b915061335d82613fc1565b604082019050919050565b60006133756018836138cf565b915061338082614010565b602082019050919050565b60006133986021836138cf565b91506133a382614039565b604082019050919050565b60006133bb601a836138cf565b91506133c682614088565b602082019050919050565b60006133de6000836138c4565b91506133e9826140b1565b600082019050919050565b6000613401602c836138cf565b915061340c826140b4565b604082019050919050565b6000613424602e836138cf565b915061342f82614103565b604082019050919050565b61344381613a6a565b82525050565b61345281613a6a565b82525050565b60006134648286613114565b91506134708285613114565b915061347c8284613145565b9150819050949350505050565b6000613494826133d1565b9150819050919050565b60006020820190506134b36000830184613026565b92915050565b60006080820190506134ce6000830187613026565b6134db6020830186613026565b6134e86040830185613449565b81810360608301526134fa81846130a2565b905095945050505050565b600060408201905061351a6000830185613026565b6135276020830184613449565b9392505050565b600060208201905081810360008301526135488184613035565b905092915050565b60006020820190506135656000830184613093565b92915050565b6000602082019050818103600083015261358581846130db565b905092915050565b600060208201905081810360008301526135a6816131c4565b9050919050565b600060208201905081810360008301526135c6816131e7565b9050919050565b600060208201905081810360008301526135e68161320a565b9050919050565b600060208201905081810360008301526136068161322d565b9050919050565b6000602082019050818103600083015261362681613250565b9050919050565b6000602082019050818103600083015261364681613273565b9050919050565b6000602082019050818103600083015261366681613296565b9050919050565b60006020820190508181036000830152613686816132b9565b9050919050565b600060208201905081810360008301526136a6816132dc565b9050919050565b600060208201905081810360008301526136c6816132ff565b9050919050565b600060208201905081810360008301526136e681613322565b9050919050565b6000602082019050818103600083015261370681613345565b9050919050565b6000602082019050818103600083015261372681613368565b9050919050565b600060208201905081810360008301526137468161338b565b9050919050565b60006020820190508181036000830152613766816133ae565b9050919050565b60006020820190508181036000830152613786816133f4565b9050919050565b600060208201905081810360008301526137a681613417565b9050919050565b60006020820190506137c26000830184613449565b92915050565b60006137d26137e3565b90506137de8282613b00565b919050565b6000604051905090565b600067ffffffffffffffff82111561380857613807613c96565b5b61381182613ce3565b9050602081019050919050565b600067ffffffffffffffff82111561383957613838613c96565b5b61384282613ce3565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138f682613a6a565b915061390183613a6a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561393657613935613bab565b5b828201905092915050565b600061394c82613a6a565b915061395783613a6a565b92508261396757613966613bda565b5b828204905092915050565b600061397d82613a6a565b915061398883613a6a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139c1576139c0613bab565b5b828202905092915050565b60006139d782613a6a565b91506139e283613a6a565b9250828210156139f5576139f4613bab565b5b828203905092915050565b6000613a0b82613a4a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613ab9578082015181840152602081019050613a9e565b83811115613ac8576000848401525b50505050565b60006002820490506001821680613ae657607f821691505b60208210811415613afa57613af9613c09565b5b50919050565b613b0982613ce3565b810181811067ffffffffffffffff82111715613b2857613b27613c96565b5b80604052505050565b6000613b3c82613a6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b6f57613b6e613bab565b5b600182019050919050565b6000613b8582613a6a565b9150613b9083613a6a565b925082613ba057613b9f613bda565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d6178204c696d697420457863656564656421000000000000600082015250565b50565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61415b81613a00565b811461416657600080fd5b50565b61417281613a12565b811461417d57600080fd5b50565b61418981613a1e565b811461419457600080fd5b50565b6141a081613a6a565b81146141ab57600080fd5b50565b6141b781613a74565b81146141c257600080fd5b5056fea264697066735822122092c2aea1c6f953fa20be16412b414560e47388a6ddc06b96f078e63a37555bbb64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6357564c6d72786665435264374847623958566e55776731574164437433734d78576537737a46575a74695500000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101e75760003560e01c806370a0823111610102578063acf4920511610095578063cd18d5a411610064578063cd18d5a41461070c578063e8a3d48514610735578063e985e9c514610760578063f2fde38b1461079d576101ee565b8063acf4920514610654578063b88d4fde1461067d578063c87b56dd146106a6578063ccb4807b146106e3576101ee565b806395d89b41116100d157806395d89b41146105ae578063a0712d68146105d9578063a22cb46514610602578063a43f31731461062b576101ee565b806370a0823114610506578063715018a6146105435780637ec4a6591461055a5780638da5cb5b14610583576101ee565b80632f745c591161017a578063438b630011610149578063438b6300146104245780634f6ccce7146104615780635503a0e81461049e5780636352211e146104c9576101ee565b80632f745c591461037c57806332cb6b0c146103b95780633ccfd60b146103e457806342842e0e146103fb576101ee565b806316ba10e0116101b657806316ba10e0146102c157806318160ddd146102ea57806323b872dd146103155780632a55205a1461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612eb1565b6107c6565b6040516102279190613550565b60405180910390f35b34801561023c57600080fd5b50610245610808565b604051610252919061356b565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612fa1565b61089a565b60405161028f919061349e565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612de4565b6108e0565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190612f58565b6109f8565b005b3480156102f657600080fd5b506102ff610a1a565b60405161030c91906137ad565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190612cce565b610a27565b005b34801561034a57600080fd5b5061036560048036038101906103609190612fce565b610a87565b604051610373929190613505565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612de4565b610ac1565b6040516103b091906137ad565b60405180910390f35b3480156103c557600080fd5b506103ce610b66565b6040516103db91906137ad565b60405180910390f35b3480156103f057600080fd5b506103f9610b6b565b005b34801561040757600080fd5b50610422600480360381019061041d9190612cce565b610bf3565b005b34801561043057600080fd5b5061044b60048036038101906104469190612c61565b610c13565b604051610458919061352e565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190612fa1565b610d1d565b60405161049591906137ad565b60405180910390f35b3480156104aa57600080fd5b506104b3610d8e565b6040516104c0919061356b565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190612fa1565b610e1c565b6040516104fd919061349e565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190612c61565b610ece565b60405161053a91906137ad565b60405180910390f35b34801561054f57600080fd5b50610558610f86565b005b34801561056657600080fd5b50610581600480360381019061057c9190612f58565b610f9a565b005b34801561058f57600080fd5b50610598610fbc565b6040516105a5919061349e565b60405180910390f35b3480156105ba57600080fd5b506105c3610fe6565b6040516105d0919061356b565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190612fa1565b611078565b005b34801561060e57600080fd5b5061062960048036038101906106249190612da4565b6110cb565b005b34801561063757600080fd5b50610652600480360381019061064d9190612e64565b6110e1565b005b34801561066057600080fd5b5061067b60048036038101906106769190612e24565b611162565b005b34801561068957600080fd5b506106a4600480360381019061069f9190612d21565b6111e0565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190612fa1565b611242565b6040516106da919061356b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612f0b565b6112ec565b005b34801561071857600080fd5b50610733600480360381019061072e9190612c61565b61130a565b005b34801561074157600080fd5b5061074a61133c565b604051610757919061356b565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190612c8e565b6113ce565b6040516107949190613550565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf9190612c61565b611462565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108015750610800826114e6565b5b9050919050565b60606000805461081790613ace565b80601f016020809104026020016040519081016040528092919081815260200182805461084390613ace565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b60006108a582611560565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108eb82610e1c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561095c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109539061372d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097b6115ab565b73ffffffffffffffffffffffffffffffffffffffff1614806109aa57506109a9816109a46115ab565b6113ce565b5b6109e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e09061368d565b60405180910390fd5b6109f383836115b3565b505050565b610a0061166c565b80600d9080519060200190610a1692919061292e565b5050565b6000600880549050905090565b610a38610a326115ab565b826116ea565b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e9061378d565b60405180910390fd5b610a8283838361177f565b505050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ab6846119e6565b915091509250929050565b6000610acc83610ece565b8210610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b049061358d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b606481565b610b7361166c565b6000610b7d610fbc565b73ffffffffffffffffffffffffffffffffffffffff1647604051610ba090613489565b60006040518083038185875af1925050503d8060008114610bdd576040519150601f19603f3d011682016040523d82523d6000602084013e610be2565b606091505b5050905080610bf057600080fd5b50565b610c0e838383604051806020016040528060008152506111e0565b505050565b60606000610c2083610ece565b905060008167ffffffffffffffff811115610c3e57610c3d613c96565b5b604051908082528060200260200182016040528015610c6c5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610c88575060648211155b15610d11576000610c9883610e1c565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cfd5782848381518110610ce257610ce1613c67565b5b6020026020010181815250508180610cf990613b31565b9250505b8280610d0890613b31565b93505050610c78565b82945050505050919050565b6000610d27610a1a565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f9061376d565b60405180910390fd5b60088281548110610d7c57610d7b613c67565b5b90600052602060002001549050919050565b600d8054610d9b90613ace565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc790613ace565b8015610e145780601f10610de957610100808354040283529160200191610e14565b820191906000526020600020905b815481529060010190602001808311610df757829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc9061370d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f369061366d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f8e61166c565b610f986000611a30565b565b610fa261166c565b80600c9080519060200190610fb892919061292e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ff590613ace565b80601f016020809104026020016040519081016040528092919081815260200182805461102190613ace565b801561106e5780601f106110435761010080835404028352916020019161106e565b820191906000526020600020905b81548152906001019060200180831161105157829003601f168201915b5050505050905090565b61108061166c565b61108981611af6565b6000600190505b8181116110c7576110a1600b611b55565b6110b4336110af600b611b6b565b611b79565b80806110bf90613b31565b915050611090565b5050565b6110dd6110d66115ab565b8383611b97565b5050565b6110e961166c565b60008282905090506110fa81611af6565b60005b8181101561115c5761110f600b611b55565b61114984848381811061112557611124613c67565b5b905060200201602081019061113a9190612c61565b611144600b611b6b565b611b79565b808061115490613b31565b9150506110fd565b50505050565b61116a61166c565b80600e60006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6111f16111eb6115ab565b836116ea565b611230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112279061378d565b60405180910390fd5b61123c84848484611d04565b50505050565b606061124d82611d60565b61128c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611283906136ed565b60405180910390fd5b6000611296611dcc565b905060008151116112b657604051806020016040528060008152506112e4565b806112c084611e5e565b600d6040516020016112d493929190613458565b6040516020818303038152906040525b915050919050565b6112f461166c565b8181600f91906113059291906129b4565b505050565b61131261166c565b61131c6001611af6565b611326600b611b55565b61133981611334600b611b6b565b611b79565b50565b6060600f805461134b90613ace565b80601f016020809104026020016040519081016040528092919081815260200182805461137790613ace565b80156113c45780601f10611399576101008083540402835291602001916113c4565b820191906000526020600020905b8154815290600101906020018083116113a757829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61146a61166c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d1906135cd565b60405180910390fd5b6114e381611a30565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611559575061155882611fbf565b5b9050919050565b61156981611d60565b6115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f9061370d565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661162683610e1c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116746115ab565b73ffffffffffffffffffffffffffffffffffffffff16611692610fbc565b73ffffffffffffffffffffffffffffffffffffffff16146116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906136cd565b60405180910390fd5b565b6000806116f683610e1c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611738575061173781856113ce565b5b8061177657508373ffffffffffffffffffffffffffffffffffffffff1661175e8461089a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661179f82610e1c565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec906135ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c9061362d565b60405180910390fd5b6118708383836120a1565b61187b6000826115b3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118cb91906139cc565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461192291906138eb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e18383836120b1565b505050565b6000600e60009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1661271083611a1f9190613941565b611a299190613972565b9050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611b00610a1a565b905060648282611b1091906138eb565b1115611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b489061374d565b60405180910390fd5b5050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611b938282604051806020016040528060008152506120b6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd9061364d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf79190613550565b60405180910390a3505050565b611d0f84848461177f565b611d1b84848484612111565b611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d51906135ad565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600c8054611ddb90613ace565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0790613ace565b8015611e545780601f10611e2957610100808354040283529160200191611e54565b820191906000526020600020905b815481529060010190602001808311611e3757829003601f168201915b5050505050905090565b60606000821415611ea6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fba565b600082905060005b60008214611ed8578080611ec190613b31565b915050600a82611ed19190613941565b9150611eae565b60008167ffffffffffffffff811115611ef457611ef3613c96565b5b6040519080825280601f01601f191660200182016040528015611f265781602001600182028036833780820191505090505b5090505b60008514611fb357600182611f3f91906139cc565b9150600a85611f4e9190613b7a565b6030611f5a91906138eb565b60f81b818381518110611f7057611f6f613c67565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fac9190613941565b9450611f2a565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209a5750612099826122a8565b5b9050919050565b6120ac838383612312565b505050565b505050565b6120c08383612426565b6120cd6000848484612111565b61210c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612103906135ad565b60405180910390fd5b505050565b60006121328473ffffffffffffffffffffffffffffffffffffffff16612600565b1561229b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261215b6115ab565b8786866040518563ffffffff1660e01b815260040161217d94939291906134b9565b602060405180830381600087803b15801561219757600080fd5b505af19250505080156121c857506040513d601f19601f820116820180604052508101906121c59190612ede565b60015b61224b573d80600081146121f8576040519150601f19603f3d011682016040523d82523d6000602084013e6121fd565b606091505b50600081511415612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906135ad565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506122a0565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61231d838383612623565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123605761235b81612628565b61239f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461239e5761239d8382612671565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e2576123dd816127de565b612421565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124205761241f82826128af565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906136ad565b60405180910390fd5b61249f81611d60565b156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d69061360d565b60405180910390fd5b6124eb600083836120a1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461253b91906138eb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125fc600083836120b1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161267e84610ece565b61268891906139cc565b905060006007600084815260200190815260200160002054905081811461276d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127f291906139cc565b905060006009600084815260200190815260200160002054905060006008838154811061282257612821613c67565b5b90600052602060002001549050806008838154811061284457612843613c67565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061289357612892613c38565b5b6001900381819060005260206000200160009055905550505050565b60006128ba83610ece565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461293a90613ace565b90600052602060002090601f01602090048101928261295c57600085556129a3565b82601f1061297557805160ff19168380011785556129a3565b828001600101855582156129a3579182015b828111156129a2578251825591602001919060010190612987565b5b5090506129b09190612a3a565b5090565b8280546129c090613ace565b90600052602060002090601f0160209004810192826129e25760008555612a29565b82601f106129fb57803560ff1916838001178555612a29565b82800160010185558215612a29579182015b82811115612a28578235825591602001919060010190612a0d565b5b509050612a369190612a3a565b5090565b5b80821115612a53576000816000905550600101612a3b565b5090565b6000612a6a612a65846137ed565b6137c8565b905082815260208101848484011115612a8657612a85613cd4565b5b612a91848285613a8c565b509392505050565b6000612aac612aa78461381e565b6137c8565b905082815260208101848484011115612ac857612ac7613cd4565b5b612ad3848285613a8c565b509392505050565b600081359050612aea81614152565b92915050565b60008083601f840112612b0657612b05613cca565b5b8235905067ffffffffffffffff811115612b2357612b22613cc5565b5b602083019150836020820283011115612b3f57612b3e613ccf565b5b9250929050565b600081359050612b5581614169565b92915050565b600081359050612b6a81614180565b92915050565b600081519050612b7f81614180565b92915050565b600082601f830112612b9a57612b99613cca565b5b8135612baa848260208601612a57565b91505092915050565b60008083601f840112612bc957612bc8613cca565b5b8235905067ffffffffffffffff811115612be657612be5613cc5565b5b602083019150836001820283011115612c0257612c01613ccf565b5b9250929050565b600082601f830112612c1e57612c1d613cca565b5b8135612c2e848260208601612a99565b91505092915050565b600081359050612c4681614197565b92915050565b600081359050612c5b816141ae565b92915050565b600060208284031215612c7757612c76613cde565b5b6000612c8584828501612adb565b91505092915050565b60008060408385031215612ca557612ca4613cde565b5b6000612cb385828601612adb565b9250506020612cc485828601612adb565b9150509250929050565b600080600060608486031215612ce757612ce6613cde565b5b6000612cf586828701612adb565b9350506020612d0686828701612adb565b9250506040612d1786828701612c37565b9150509250925092565b60008060008060808587031215612d3b57612d3a613cde565b5b6000612d4987828801612adb565b9450506020612d5a87828801612adb565b9350506040612d6b87828801612c37565b925050606085013567ffffffffffffffff811115612d8c57612d8b613cd9565b5b612d9887828801612b85565b91505092959194509250565b60008060408385031215612dbb57612dba613cde565b5b6000612dc985828601612adb565b9250506020612dda85828601612b46565b9150509250929050565b60008060408385031215612dfb57612dfa613cde565b5b6000612e0985828601612adb565b9250506020612e1a85828601612c37565b9150509250929050565b60008060408385031215612e3b57612e3a613cde565b5b6000612e4985828601612adb565b9250506020612e5a85828601612c4c565b9150509250929050565b60008060208385031215612e7b57612e7a613cde565b5b600083013567ffffffffffffffff811115612e9957612e98613cd9565b5b612ea585828601612af0565b92509250509250929050565b600060208284031215612ec757612ec6613cde565b5b6000612ed584828501612b5b565b91505092915050565b600060208284031215612ef457612ef3613cde565b5b6000612f0284828501612b70565b91505092915050565b60008060208385031215612f2257612f21613cde565b5b600083013567ffffffffffffffff811115612f4057612f3f613cd9565b5b612f4c85828601612bb3565b92509250509250929050565b600060208284031215612f6e57612f6d613cde565b5b600082013567ffffffffffffffff811115612f8c57612f8b613cd9565b5b612f9884828501612c09565b91505092915050565b600060208284031215612fb757612fb6613cde565b5b6000612fc584828501612c37565b91505092915050565b60008060408385031215612fe557612fe4613cde565b5b6000612ff385828601612c37565b925050602061300485828601612c37565b9150509250929050565b600061301a838361343a565b60208301905092915050565b61302f81613a00565b82525050565b600061304082613874565b61304a81856138a2565b93506130558361384f565b8060005b8381101561308657815161306d888261300e565b975061307883613895565b925050600181019050613059565b5085935050505092915050565b61309c81613a12565b82525050565b60006130ad8261387f565b6130b781856138b3565b93506130c7818560208601613a9b565b6130d081613ce3565b840191505092915050565b60006130e68261388a565b6130f081856138cf565b9350613100818560208601613a9b565b61310981613ce3565b840191505092915050565b600061311f8261388a565b61312981856138e0565b9350613139818560208601613a9b565b80840191505092915050565b6000815461315281613ace565b61315c81866138e0565b945060018216600081146131775760018114613188576131bb565b60ff198316865281860193506131bb565b6131918561385f565b60005b838110156131b357815481890152600182019150602081019050613194565b838801955050505b50505092915050565b60006131d1602b836138cf565b91506131dc82613cf4565b604082019050919050565b60006131f46032836138cf565b91506131ff82613d43565b604082019050919050565b60006132176026836138cf565b915061322282613d92565b604082019050919050565b600061323a6025836138cf565b915061324582613de1565b604082019050919050565b600061325d601c836138cf565b915061326882613e30565b602082019050919050565b60006132806024836138cf565b915061328b82613e59565b604082019050919050565b60006132a36019836138cf565b91506132ae82613ea8565b602082019050919050565b60006132c66029836138cf565b91506132d182613ed1565b604082019050919050565b60006132e9603e836138cf565b91506132f482613f20565b604082019050919050565b600061330c6020836138cf565b915061331782613f6f565b602082019050919050565b600061332f6020836138cf565b915061333a82613f98565b602082019050919050565b6000613352602f836138cf565b915061335d82613fc1565b604082019050919050565b60006133756018836138cf565b915061338082614010565b602082019050919050565b60006133986021836138cf565b91506133a382614039565b604082019050919050565b60006133bb601a836138cf565b91506133c682614088565b602082019050919050565b60006133de6000836138c4565b91506133e9826140b1565b600082019050919050565b6000613401602c836138cf565b915061340c826140b4565b604082019050919050565b6000613424602e836138cf565b915061342f82614103565b604082019050919050565b61344381613a6a565b82525050565b61345281613a6a565b82525050565b60006134648286613114565b91506134708285613114565b915061347c8284613145565b9150819050949350505050565b6000613494826133d1565b9150819050919050565b60006020820190506134b36000830184613026565b92915050565b60006080820190506134ce6000830187613026565b6134db6020830186613026565b6134e86040830185613449565b81810360608301526134fa81846130a2565b905095945050505050565b600060408201905061351a6000830185613026565b6135276020830184613449565b9392505050565b600060208201905081810360008301526135488184613035565b905092915050565b60006020820190506135656000830184613093565b92915050565b6000602082019050818103600083015261358581846130db565b905092915050565b600060208201905081810360008301526135a6816131c4565b9050919050565b600060208201905081810360008301526135c6816131e7565b9050919050565b600060208201905081810360008301526135e68161320a565b9050919050565b600060208201905081810360008301526136068161322d565b9050919050565b6000602082019050818103600083015261362681613250565b9050919050565b6000602082019050818103600083015261364681613273565b9050919050565b6000602082019050818103600083015261366681613296565b9050919050565b60006020820190508181036000830152613686816132b9565b9050919050565b600060208201905081810360008301526136a6816132dc565b9050919050565b600060208201905081810360008301526136c6816132ff565b9050919050565b600060208201905081810360008301526136e681613322565b9050919050565b6000602082019050818103600083015261370681613345565b9050919050565b6000602082019050818103600083015261372681613368565b9050919050565b600060208201905081810360008301526137468161338b565b9050919050565b60006020820190508181036000830152613766816133ae565b9050919050565b60006020820190508181036000830152613786816133f4565b9050919050565b600060208201905081810360008301526137a681613417565b9050919050565b60006020820190506137c26000830184613449565b92915050565b60006137d26137e3565b90506137de8282613b00565b919050565b6000604051905090565b600067ffffffffffffffff82111561380857613807613c96565b5b61381182613ce3565b9050602081019050919050565b600067ffffffffffffffff82111561383957613838613c96565b5b61384282613ce3565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138f682613a6a565b915061390183613a6a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561393657613935613bab565b5b828201905092915050565b600061394c82613a6a565b915061395783613a6a565b92508261396757613966613bda565b5b828204905092915050565b600061397d82613a6a565b915061398883613a6a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139c1576139c0613bab565b5b828202905092915050565b60006139d782613a6a565b91506139e283613a6a565b9250828210156139f5576139f4613bab565b5b828203905092915050565b6000613a0b82613a4a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613ab9578082015181840152602081019050613a9e565b83811115613ac8576000848401525b50505050565b60006002820490506001821680613ae657607f821691505b60208210811415613afa57613af9613c09565b5b50919050565b613b0982613ce3565b810181811067ffffffffffffffff82111715613b2857613b27613c96565b5b80604052505050565b6000613b3c82613a6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b6f57613b6e613bab565b5b600182019050919050565b6000613b8582613a6a565b9150613b9083613a6a565b925082613ba057613b9f613bda565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d6178204c696d697420457863656564656421000000000000600082015250565b50565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61415b81613a00565b811461416657600080fd5b50565b61417281613a12565b811461417d57600080fd5b50565b61418981613a1e565b811461419457600080fd5b50565b6141a081613a6a565b81146141ab57600080fd5b50565b6141b781613a74565b81146141c257600080fd5b5056fea264697066735822122092c2aea1c6f953fa20be16412b414560e47388a6ddc06b96f078e63a37555bbb64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6357564c6d72786665435264374847623958566e55776731574164437433734d78576537737a46575a74695500000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _contractUri (string): https://gateway.pinata.cloud/ipfs/QmcWVLmrxfeCRd7HGb9XVnUwg1WAdCt3sMxWe7szFWZtiU

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d6357564c6d72786665435264374847623958566e5577673157416443
Arg [4] : 7433734d78576537737a46575a74695500000000000000000000000000000000


Deployed Bytecode Sourcemap

47732:4638:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52083:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28246:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29759:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29276:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50514:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42152:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30459:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51119:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;41820:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47923:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50628:147;;;;;;;;;;;;;:::i;:::-;;30866:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49120:718;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42342:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48000:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27957:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27688:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6775:103;;;;;;;;;;;;;:::i;:::-;;50783:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6127:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28415:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48374:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30002:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48834:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51556:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31122:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50035:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51748:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48625:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51015:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30228:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7033:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52083:242;52223:4;52267:10;52252:25;;:11;:25;;;;:65;;;;52281:36;52305:11;52281:23;:36::i;:::-;52252:65;52245:72;;52083:242;;;:::o;28246:100::-;28300:13;28333:5;28326:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28246:100;:::o;29759:171::-;29835:7;29855:23;29870:7;29855:14;:23::i;:::-;29898:15;:24;29914:7;29898:24;;;;;;;;;;;;;;;;;;;;;29891:31;;29759:171;;;:::o;29276:417::-;29357:13;29373:23;29388:7;29373:14;:23::i;:::-;29357:39;;29421:5;29415:11;;:2;:11;;;;29407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29515:5;29499:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29524:37;29541:5;29548:12;:10;:12::i;:::-;29524:16;:37::i;:::-;29499:62;29477:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;29664:21;29673:2;29677:7;29664:8;:21::i;:::-;29346:347;29276:417;;:::o;50514:106::-;6013:13;:11;:13::i;:::-;50602:10:::1;50590:9;:22;;;;;;;;;;;;:::i;:::-;;50514:106:::0;:::o;42152:113::-;42213:7;42240:10;:17;;;;42233:24;;42152:113;:::o;30459:336::-;30654:41;30673:12;:10;:12::i;:::-;30687:7;30654:18;:41::i;:::-;30646:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30759:28;30769:4;30775:2;30779:7;30759:9;:28::i;:::-;30459:336;;;:::o;51119:276::-;51236:16;51263:21;51338:16;;;;;;;;;;;51357:29;51375:10;51357:17;:29::i;:::-;51330:57;;;;51119:276;;;;;:::o;41820:256::-;41917:7;41953:23;41970:5;41953:16;:23::i;:::-;41945:5;:31;41937:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42042:12;:19;42055:5;42042:19;;;;;;;;;;;;;;;:26;42062:5;42042:26;;;;;;;;;;;;42035:33;;41820:256;;;;:::o;47923:40::-;47960:3;47923:40;:::o;50628:147::-;6013:13;:11;:13::i;:::-;50677:7:::1;50698;:5;:7::i;:::-;50690:21;;50719;50690:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50676:69;;;50764:2;50756:11;;;::::0;::::1;;50665:110;50628:147::o:0;30866:185::-;31004:39;31021:4;31027:2;31031:7;31004:39;;;;;;;;;;;;:16;:39::i;:::-;30866:185;;;:::o;49120:718::-;49207:16;49241:23;49267:17;49277:6;49267:9;:17::i;:::-;49241:43;;49295:30;49342:15;49328:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49295:63;;49369:22;49394:1;49369:26;;49406:23;49446:352;49471:15;49453;:33;:65;;;;;47960:3;49490:14;:28;;49453:65;49446:352;;;49535:25;49563:23;49571:14;49563:7;:23::i;:::-;49535:51;;49628:6;49607:27;;:17;:27;;;49603:153;;;49688:14;49655:13;49669:15;49655:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;49723:17;;;;;:::i;:::-;;;;49603:153;49770:16;;;;;:::i;:::-;;;;49520:278;49446:352;;;49817:13;49810:20;;;;;;49120:718;;;:::o;42342:233::-;42417:7;42453:30;:28;:30::i;:::-;42445:5;:38;42437:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42550:10;42561:5;42550:17;;;;;;;;:::i;:::-;;;;;;;;;;42543:24;;42342:233;;;:::o;48000:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27957:222::-;28029:7;28049:13;28065:7;:16;28073:7;28065:16;;;;;;;;;;;;;;;;;;;;;28049:32;;28117:1;28100:19;;:5;:19;;;;28092:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28166:5;28159:12;;;27957:222;;;:::o;27688:207::-;27760:7;27805:1;27788:19;;:5;:19;;;;27780:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27871:9;:16;27881:5;27871:16;;;;;;;;;;;;;;;;27864:23;;27688:207;;;:::o;6775:103::-;6013:13;:11;:13::i;:::-;6840:30:::1;6867:1;6840:18;:30::i;:::-;6775:103::o:0;50783:106::-;6013:13;:11;:13::i;:::-;50871:10:::1;50859:9;:22;;;;;;;;;;;;:::i;:::-;;50783:106:::0;:::o;6127:87::-;6173:7;6200:6;;;;;;;;;;;6193:13;;6127:87;:::o;28415:104::-;28471:13;28504:7;28497:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28415:104;:::o;48374:243::-;6013:13;:11;:13::i;:::-;48437:20:::1;48445:11;48437:7;:20::i;:::-;48473:9;48485:1;48473:13;;48468:142;48493:11;48488:1;:16;48468:142;;48526:18;:6;:16;:18::i;:::-;48559:39;48569:10;48581:16;:6;:14;:16::i;:::-;48559:9;:39::i;:::-;48506:3;;;;;:::i;:::-;;;;48468:142;;;;48374:243:::0;:::o;30002:155::-;30097:52;30116:12;:10;:12::i;:::-;30130:8;30140;30097:18;:52::i;:::-;30002:155;;:::o;48834:278::-;6013:13;:11;:13::i;:::-;48910:14:::1;48927:4;;:11;;48910:28;;48949:15;48957:6;48949:7;:15::i;:::-;48979:6;48975:130;48996:6;48992:1;:10;48975:130;;;49024:18;:6;:16;:18::i;:::-;49057:36;49067:4;;49072:1;49067:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49076:16;:6;:14;:16::i;:::-;49057:9;:36::i;:::-;49005:3;;;;;:::i;:::-;;;;48975:130;;;;48899:213;48834:278:::0;;:::o;51556:184::-;6013:13;:11;:13::i;:::-;51675:18:::1;51655:17;;:38;;;;;;;;;;;;;;;;;;51723:9;51704:16;;:28;;;;;;;;;;;;;;;;;;51556:184:::0;;:::o;31122:323::-;31296:41;31315:12;:10;:12::i;:::-;31329:7;31296:18;:41::i;:::-;31288:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31399:38;31413:4;31419:2;31423:7;31432:4;31399:13;:38::i;:::-;31122:323;;;;:::o;50035:471::-;50153:13;50202:16;50210:7;50202;:16::i;:::-;50184:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;50302:28;50333:10;:8;:10::i;:::-;50302:41;;50392:1;50367:14;50361:28;:32;:137;;;;;;;;;;;;;;;;;50433:14;50449:18;:7;:16;:18::i;:::-;50469:9;50416:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50361:137;50354:144;;;50035:471;;;:::o;51748:114::-;6013:13;:11;:13::i;:::-;51843:11:::1;;51829;:25;;;;;;;:::i;:::-;;51748:114:::0;;:::o;48625:201::-;6013:13;:11;:13::i;:::-;48690:10:::1;48698:1;48690:7;:10::i;:::-;48735:18;:6;:16;:18::i;:::-;48768:39;48778:10;48790:16;:6;:14;:16::i;:::-;48768:9;:39::i;:::-;48625:201:::0;:::o;51015:96::-;51059:13;51092:11;51085:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51015:96;:::o;30228:164::-;30325:4;30349:18;:25;30368:5;30349:25;;;;;;;;;;;;;;;:35;30375:8;30349:35;;;;;;;;;;;;;;;;;;;;;;;;;30342:42;;30228:164;;;;:::o;7033:201::-;6013:13;:11;:13::i;:::-;7142:1:::1;7122:22;;:8;:22;;;;7114:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7198:28;7217:8;7198:18;:28::i;:::-;7033:201:::0;:::o;41512:224::-;41614:4;41653:35;41638:50;;;:11;:50;;;;:90;;;;41692:36;41716:11;41692:23;:36::i;:::-;41638:90;41631:97;;41512:224;;;:::o;37734:135::-;37816:16;37824:7;37816;:16::i;:::-;37808:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37734:135;:::o;4678:98::-;4731:7;4758:10;4751:17;;4678:98;:::o;37013:174::-;37115:2;37088:15;:24;37104:7;37088:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37171:7;37167:2;37133:46;;37142:23;37157:7;37142:14;:23::i;:::-;37133:46;;;;;;;;;;;;37013:174;;:::o;6292:132::-;6367:12;:10;:12::i;:::-;6356:23;;:7;:5;:7::i;:::-;:23;;;6348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6292:132::o;33246:264::-;33339:4;33356:13;33372:23;33387:7;33372:14;:23::i;:::-;33356:39;;33425:5;33414:16;;:7;:16;;;:52;;;;33434:32;33451:5;33458:7;33434:16;:32::i;:::-;33414:52;:87;;;;33494:7;33470:31;;:20;33482:7;33470:11;:20::i;:::-;:31;;;33414:87;33406:96;;;33246:264;;;;:::o;36269:625::-;36428:4;36401:31;;:23;36416:7;36401:14;:23::i;:::-;:31;;;36393:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36507:1;36493:16;;:2;:16;;;;36485:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36563:39;36584:4;36590:2;36594:7;36563:20;:39::i;:::-;36667:29;36684:1;36688:7;36667:8;:29::i;:::-;36728:1;36709:9;:15;36719:4;36709:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36757:1;36740:9;:13;36750:2;36740:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36788:2;36769:7;:16;36777:7;36769:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36827:7;36823:2;36808:27;;36817:4;36808:27;;;;;;;;;;;;36848:38;36868:4;36874:2;36878:7;36848:19;:38::i;:::-;36269:625;;;:::o;51403:145::-;51473:7;51522:17;;;;;;;;;;;51499:40;;51513:5;51500:10;:18;;;;:::i;:::-;51499:40;;;;:::i;:::-;51492:47;;51403:145;;;:::o;7394:191::-;7468:16;7487:6;;;;;;;;;;;7468:25;;7513:8;7504:6;;:17;;;;;;;;;;;;;;;;;;7568:8;7537:40;;7558:8;7537:40;;;;;;;;;;;;7457:128;7394:191;:::o;49846:181::-;49900:18;49921:13;:11;:13::i;:::-;49900:34;;47960:3;49969:6;49953:13;:22;;;;:::i;:::-;:36;;49945:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;49889:138;49846:181;:::o;1031:127::-;1138:1;1120:7;:14;;;:19;;;;;;;;;;;1031:127;:::o;909:114::-;974:7;1001;:14;;;994:21;;909:114;;;:::o;33852:110::-;33928:26;33938:2;33942:7;33928:26;;;;;;;;;;;;:9;:26::i;:::-;33852:110;;:::o;37330:315::-;37485:8;37476:17;;:5;:17;;;;37468:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37572:8;37534:18;:25;37553:5;37534:25;;;;;;;;;;;;;;;:35;37560:8;37534:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37618:8;37596:41;;37611:5;37596:41;;;37628:8;37596:41;;;;;;:::i;:::-;;;;;;;;37330:315;;;:::o;32326:313::-;32482:28;32492:4;32498:2;32502:7;32482:9;:28::i;:::-;32529:47;32552:4;32558:2;32562:7;32571:4;32529:22;:47::i;:::-;32521:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32326:313;;;;:::o;32952:127::-;33017:4;33069:1;33041:30;;:7;:16;33049:7;33041:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33034:37;;32952:127;;;:::o;50897:110::-;50957:13;50990:9;50983:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50897:110;:::o;1932:723::-;1988:13;2218:1;2209:5;:10;2205:53;;;2236:10;;;;;;;;;;;;;;;;;;;;;2205:53;2268:12;2283:5;2268:20;;2299:14;2324:78;2339:1;2331:4;:9;2324:78;;2357:8;;;;;:::i;:::-;;;;2388:2;2380:10;;;;;:::i;:::-;;;2324:78;;;2412:19;2444:6;2434:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2412:39;;2462:154;2478:1;2469:5;:10;2462:154;;2506:1;2496:11;;;;;:::i;:::-;;;2573:2;2565:5;:10;;;;:::i;:::-;2552:2;:24;;;;:::i;:::-;2539:39;;2522:6;2529;2522:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2602:2;2593:11;;;;;:::i;:::-;;;2462:154;;;2640:6;2626:21;;;;;1932:723;;;;:::o;27319:305::-;27421:4;27473:25;27458:40;;;:11;:40;;;;:105;;;;27530:33;27515:48;;;:11;:48;;;;27458:105;:158;;;;27580:36;27604:11;27580:23;:36::i;:::-;27458:158;27438:178;;27319:305;;;:::o;51871:204::-;52022:45;52049:4;52055:2;52059:7;52022:26;:45::i;:::-;51871:204;;;:::o;40369:125::-;;;;:::o;34189:319::-;34318:18;34324:2;34328:7;34318:5;:18::i;:::-;34369:53;34400:1;34404:2;34408:7;34417:4;34369:22;:53::i;:::-;34347:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34189:319;;;:::o;38433:853::-;38587:4;38608:15;:2;:13;;;:15::i;:::-;38604:675;;;38660:2;38644:36;;;38681:12;:10;:12::i;:::-;38695:4;38701:7;38710:4;38644:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38640:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38902:1;38885:6;:13;:18;38881:328;;;38928:60;;;;;;;;;;:::i;:::-;;;;;;;;38881:328;39159:6;39153:13;39144:6;39140:2;39136:15;39129:38;38640:584;38776:41;;;38766:51;;;:6;:51;;;;38759:58;;;;;38604:675;39263:4;39256:11;;38433:853;;;;;;;:::o;18981:157::-;19066:4;19105:25;19090:40;;;:11;:40;;;;19083:47;;18981:157;;;:::o;43188:589::-;43332:45;43359:4;43365:2;43369:7;43332:26;:45::i;:::-;43410:1;43394:18;;:4;:18;;;43390:187;;;43429:40;43461:7;43429:31;:40::i;:::-;43390:187;;;43499:2;43491:10;;:4;:10;;;43487:90;;43518:47;43551:4;43557:7;43518:32;:47::i;:::-;43487:90;43390:187;43605:1;43591:16;;:2;:16;;;43587:183;;;43624:45;43661:7;43624:36;:45::i;:::-;43587:183;;;43697:4;43691:10;;:2;:10;;;43687:83;;43718:40;43746:2;43750:7;43718:27;:40::i;:::-;43687:83;43587:183;43188:589;;;:::o;34844:439::-;34938:1;34924:16;;:2;:16;;;;34916:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34997:16;35005:7;34997;:16::i;:::-;34996:17;34988:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35059:45;35088:1;35092:2;35096:7;35059:20;:45::i;:::-;35134:1;35117:9;:13;35127:2;35117:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35165:2;35146:7;:16;35154:7;35146:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35210:7;35206:2;35185:33;;35202:1;35185:33;;;;;;;;;;;;35231:44;35259:1;35263:2;35267:7;35231:19;:44::i;:::-;34844:439;;:::o;8825:326::-;8885:4;9142:1;9120:7;:19;;;:23;9113:30;;8825:326;;;:::o;39858:126::-;;;;:::o;44500:164::-;44604:10;:17;;;;44577:15;:24;44593:7;44577:24;;;;;;;;;;;:44;;;;44632:10;44648:7;44632:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44500:164;:::o;45291:988::-;45557:22;45607:1;45582:22;45599:4;45582:16;:22::i;:::-;:26;;;;:::i;:::-;45557:51;;45619:18;45640:17;:26;45658:7;45640:26;;;;;;;;;;;;45619:47;;45787:14;45773:10;:28;45769:328;;45818:19;45840:12;:18;45853:4;45840:18;;;;;;;;;;;;;;;:34;45859:14;45840:34;;;;;;;;;;;;45818:56;;45924:11;45891:12;:18;45904:4;45891:18;;;;;;;;;;;;;;;:30;45910:10;45891:30;;;;;;;;;;;:44;;;;46041:10;46008:17;:30;46026:11;46008:30;;;;;;;;;;;:43;;;;45803:294;45769:328;46193:17;:26;46211:7;46193:26;;;;;;;;;;;46186:33;;;46237:12;:18;46250:4;46237:18;;;;;;;;;;;;;;;:34;46256:14;46237:34;;;;;;;;;;;46230:41;;;45372:907;;45291:988;;:::o;46574:1079::-;46827:22;46872:1;46852:10;:17;;;;:21;;;;:::i;:::-;46827:46;;46884:18;46905:15;:24;46921:7;46905:24;;;;;;;;;;;;46884:45;;47256:19;47278:10;47289:14;47278:26;;;;;;;;:::i;:::-;;;;;;;;;;47256:48;;47342:11;47317:10;47328;47317:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;47453:10;47422:15;:28;47438:11;47422:28;;;;;;;;;;;:41;;;;47594:15;:24;47610:7;47594:24;;;;;;;;;;;47587:31;;;47629:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46645:1008;;;46574:1079;:::o;44078:221::-;44163:14;44180:20;44197:2;44180:16;:20::i;:::-;44163:37;;44238:7;44211:12;:16;44224:2;44211:16;;;;;;;;;;;;;;;:24;44228:6;44211:24;;;;;;;;;;;:34;;;;44285:6;44256:17;:26;44274:7;44256:26;;;;;;;;;;;:35;;;;44152:147;44078:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:553::-;2435:8;2445:6;2495:3;2488:4;2480:6;2476:17;2472:27;2462:122;;2503:79;;:::i;:::-;2462:122;2616:6;2603:20;2593:30;;2646:18;2638:6;2635:30;2632:117;;;2668:79;;:::i;:::-;2632:117;2782:4;2774:6;2770:17;2758:29;;2836:3;2828:4;2820:6;2816:17;2806:8;2802:32;2799:41;2796:128;;;2843:79;;:::i;:::-;2796:128;2377:553;;;;;:::o;2950:340::-;3006:5;3055:3;3048:4;3040:6;3036:17;3032:27;3022:122;;3063:79;;:::i;:::-;3022:122;3180:6;3167:20;3205:79;3280:3;3272:6;3265:4;3257:6;3253:17;3205:79;:::i;:::-;3196:88;;3012:278;2950:340;;;;:::o;3296:139::-;3342:5;3380:6;3367:20;3358:29;;3396:33;3423:5;3396:33;:::i;:::-;3296:139;;;;:::o;3441:137::-;3486:5;3524:6;3511:20;3502:29;;3540:32;3566:5;3540:32;:::i;:::-;3441:137;;;;:::o;3584:329::-;3643:6;3692:2;3680:9;3671:7;3667:23;3663:32;3660:119;;;3698:79;;:::i;:::-;3660:119;3818:1;3843:53;3888:7;3879:6;3868:9;3864:22;3843:53;:::i;:::-;3833:63;;3789:117;3584:329;;;;:::o;3919:474::-;3987:6;3995;4044:2;4032:9;4023:7;4019:23;4015:32;4012:119;;;4050:79;;:::i;:::-;4012:119;4170:1;4195:53;4240:7;4231:6;4220:9;4216:22;4195:53;:::i;:::-;4185:63;;4141:117;4297:2;4323:53;4368:7;4359:6;4348:9;4344:22;4323:53;:::i;:::-;4313:63;;4268:118;3919:474;;;;;:::o;4399:619::-;4476:6;4484;4492;4541:2;4529:9;4520:7;4516:23;4512:32;4509:119;;;4547:79;;:::i;:::-;4509:119;4667:1;4692:53;4737:7;4728:6;4717:9;4713:22;4692:53;:::i;:::-;4682:63;;4638:117;4794:2;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4765:118;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;4399:619;;;;;:::o;5024:943::-;5119:6;5127;5135;5143;5192:3;5180:9;5171:7;5167:23;5163:33;5160:120;;;5199:79;;:::i;:::-;5160:120;5319:1;5344:53;5389:7;5380:6;5369:9;5365:22;5344:53;:::i;:::-;5334:63;;5290:117;5446:2;5472:53;5517:7;5508:6;5497:9;5493:22;5472:53;:::i;:::-;5462:63;;5417:118;5574:2;5600:53;5645:7;5636:6;5625:9;5621:22;5600:53;:::i;:::-;5590:63;;5545:118;5730:2;5719:9;5715:18;5702:32;5761:18;5753:6;5750:30;5747:117;;;5783:79;;:::i;:::-;5747:117;5888:62;5942:7;5933:6;5922:9;5918:22;5888:62;:::i;:::-;5878:72;;5673:287;5024:943;;;;;;;:::o;5973:468::-;6038:6;6046;6095:2;6083:9;6074:7;6070:23;6066:32;6063:119;;;6101:79;;:::i;:::-;6063:119;6221:1;6246:53;6291:7;6282:6;6271:9;6267:22;6246:53;:::i;:::-;6236:63;;6192:117;6348:2;6374:50;6416:7;6407:6;6396:9;6392:22;6374:50;:::i;:::-;6364:60;;6319:115;5973:468;;;;;:::o;6447:474::-;6515:6;6523;6572:2;6560:9;6551:7;6547:23;6543:32;6540:119;;;6578:79;;:::i;:::-;6540:119;6698:1;6723:53;6768:7;6759:6;6748:9;6744:22;6723:53;:::i;:::-;6713:63;;6669:117;6825:2;6851:53;6896:7;6887:6;6876:9;6872:22;6851:53;:::i;:::-;6841:63;;6796:118;6447:474;;;;;:::o;6927:472::-;6994:6;7002;7051:2;7039:9;7030:7;7026:23;7022:32;7019:119;;;7057:79;;:::i;:::-;7019:119;7177:1;7202:53;7247:7;7238:6;7227:9;7223:22;7202:53;:::i;:::-;7192:63;;7148:117;7304:2;7330:52;7374:7;7365:6;7354:9;7350:22;7330:52;:::i;:::-;7320:62;;7275:117;6927:472;;;;;:::o;7405:559::-;7491:6;7499;7548:2;7536:9;7527:7;7523:23;7519:32;7516:119;;;7554:79;;:::i;:::-;7516:119;7702:1;7691:9;7687:17;7674:31;7732:18;7724:6;7721:30;7718:117;;;7754:79;;:::i;:::-;7718:117;7867:80;7939:7;7930:6;7919:9;7915:22;7867:80;:::i;:::-;7849:98;;;;7645:312;7405:559;;;;;:::o;7970:327::-;8028:6;8077:2;8065:9;8056:7;8052:23;8048:32;8045:119;;;8083:79;;:::i;:::-;8045:119;8203:1;8228:52;8272:7;8263:6;8252:9;8248:22;8228:52;:::i;:::-;8218:62;;8174:116;7970:327;;;;:::o;8303:349::-;8372:6;8421:2;8409:9;8400:7;8396:23;8392:32;8389:119;;;8427:79;;:::i;:::-;8389:119;8547:1;8572:63;8627:7;8618:6;8607:9;8603:22;8572:63;:::i;:::-;8562:73;;8518:127;8303:349;;;;:::o;8658:529::-;8729:6;8737;8786:2;8774:9;8765:7;8761:23;8757:32;8754:119;;;8792:79;;:::i;:::-;8754:119;8940:1;8929:9;8925:17;8912:31;8970:18;8962:6;8959:30;8956:117;;;8992:79;;:::i;:::-;8956:117;9105:65;9162:7;9153:6;9142:9;9138:22;9105:65;:::i;:::-;9087:83;;;;8883:297;8658:529;;;;;:::o;9193:509::-;9262:6;9311:2;9299:9;9290:7;9286:23;9282:32;9279:119;;;9317:79;;:::i;:::-;9279:119;9465:1;9454:9;9450:17;9437:31;9495:18;9487:6;9484:30;9481:117;;;9517:79;;:::i;:::-;9481:117;9622:63;9677:7;9668:6;9657:9;9653:22;9622:63;:::i;:::-;9612:73;;9408:287;9193:509;;;;:::o;9708:329::-;9767:6;9816:2;9804:9;9795:7;9791:23;9787:32;9784:119;;;9822:79;;:::i;:::-;9784:119;9942:1;9967:53;10012:7;10003:6;9992:9;9988:22;9967:53;:::i;:::-;9957:63;;9913:117;9708:329;;;;:::o;10043:474::-;10111:6;10119;10168:2;10156:9;10147:7;10143:23;10139:32;10136:119;;;10174:79;;:::i;:::-;10136:119;10294:1;10319:53;10364:7;10355:6;10344:9;10340:22;10319:53;:::i;:::-;10309:63;;10265:117;10421:2;10447:53;10492:7;10483:6;10472:9;10468:22;10447:53;:::i;:::-;10437:63;;10392:118;10043:474;;;;;:::o;10523:179::-;10592:10;10613:46;10655:3;10647:6;10613:46;:::i;:::-;10691:4;10686:3;10682:14;10668:28;;10523:179;;;;:::o;10708:118::-;10795:24;10813:5;10795:24;:::i;:::-;10790:3;10783:37;10708:118;;:::o;10862:732::-;10981:3;11010:54;11058:5;11010:54;:::i;:::-;11080:86;11159:6;11154:3;11080:86;:::i;:::-;11073:93;;11190:56;11240:5;11190:56;:::i;:::-;11269:7;11300:1;11285:284;11310:6;11307:1;11304:13;11285:284;;;11386:6;11380:13;11413:63;11472:3;11457:13;11413:63;:::i;:::-;11406:70;;11499:60;11552:6;11499:60;:::i;:::-;11489:70;;11345:224;11332:1;11329;11325:9;11320:14;;11285:284;;;11289:14;11585:3;11578:10;;10986:608;;;10862:732;;;;:::o;11600:109::-;11681:21;11696:5;11681:21;:::i;:::-;11676:3;11669:34;11600:109;;:::o;11715:360::-;11801:3;11829:38;11861:5;11829:38;:::i;:::-;11883:70;11946:6;11941:3;11883:70;:::i;:::-;11876:77;;11962:52;12007:6;12002:3;11995:4;11988:5;11984:16;11962:52;:::i;:::-;12039:29;12061:6;12039:29;:::i;:::-;12034:3;12030:39;12023:46;;11805:270;11715:360;;;;:::o;12081:364::-;12169:3;12197:39;12230:5;12197:39;:::i;:::-;12252:71;12316:6;12311:3;12252:71;:::i;:::-;12245:78;;12332:52;12377:6;12372:3;12365:4;12358:5;12354:16;12332:52;:::i;:::-;12409:29;12431:6;12409:29;:::i;:::-;12404:3;12400:39;12393:46;;12173:272;12081:364;;;;:::o;12451:377::-;12557:3;12585:39;12618:5;12585:39;:::i;:::-;12640:89;12722:6;12717:3;12640:89;:::i;:::-;12633:96;;12738:52;12783:6;12778:3;12771:4;12764:5;12760:16;12738:52;:::i;:::-;12815:6;12810:3;12806:16;12799:23;;12561:267;12451:377;;;;:::o;12858:845::-;12961:3;12998:5;12992:12;13027:36;13053:9;13027:36;:::i;:::-;13079:89;13161:6;13156:3;13079:89;:::i;:::-;13072:96;;13199:1;13188:9;13184:17;13215:1;13210:137;;;;13361:1;13356:341;;;;13177:520;;13210:137;13294:4;13290:9;13279;13275:25;13270:3;13263:38;13330:6;13325:3;13321:16;13314:23;;13210:137;;13356:341;13423:38;13455:5;13423:38;:::i;:::-;13483:1;13497:154;13511:6;13508:1;13505:13;13497:154;;;13585:7;13579:14;13575:1;13570:3;13566:11;13559:35;13635:1;13626:7;13622:15;13611:26;;13533:4;13530:1;13526:12;13521:17;;13497:154;;;13680:6;13675:3;13671:16;13664:23;;13363:334;;13177:520;;12965:738;;12858:845;;;;:::o;13709:366::-;13851:3;13872:67;13936:2;13931:3;13872:67;:::i;:::-;13865:74;;13948:93;14037:3;13948:93;:::i;:::-;14066:2;14061:3;14057:12;14050:19;;13709:366;;;:::o;14081:::-;14223:3;14244:67;14308:2;14303:3;14244:67;:::i;:::-;14237:74;;14320:93;14409:3;14320:93;:::i;:::-;14438:2;14433:3;14429:12;14422:19;;14081:366;;;:::o;14453:::-;14595:3;14616:67;14680:2;14675:3;14616:67;:::i;:::-;14609:74;;14692:93;14781:3;14692:93;:::i;:::-;14810:2;14805:3;14801:12;14794:19;;14453:366;;;:::o;14825:::-;14967:3;14988:67;15052:2;15047:3;14988:67;:::i;:::-;14981:74;;15064:93;15153:3;15064:93;:::i;:::-;15182:2;15177:3;15173:12;15166:19;;14825:366;;;:::o;15197:::-;15339:3;15360:67;15424:2;15419:3;15360:67;:::i;:::-;15353:74;;15436:93;15525:3;15436:93;:::i;:::-;15554:2;15549:3;15545:12;15538:19;;15197:366;;;:::o;15569:::-;15711:3;15732:67;15796:2;15791:3;15732:67;:::i;:::-;15725:74;;15808:93;15897:3;15808:93;:::i;:::-;15926:2;15921:3;15917:12;15910:19;;15569:366;;;:::o;15941:::-;16083:3;16104:67;16168:2;16163:3;16104:67;:::i;:::-;16097:74;;16180:93;16269:3;16180:93;:::i;:::-;16298:2;16293:3;16289:12;16282:19;;15941:366;;;:::o;16313:::-;16455:3;16476:67;16540:2;16535:3;16476:67;:::i;:::-;16469:74;;16552:93;16641:3;16552:93;:::i;:::-;16670:2;16665:3;16661:12;16654:19;;16313:366;;;:::o;16685:::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:::-;17199:3;17220:67;17284:2;17279:3;17220:67;:::i;:::-;17213:74;;17296:93;17385:3;17296:93;:::i;:::-;17414:2;17409:3;17405:12;17398:19;;17057:366;;;:::o;17429:::-;17571:3;17592:67;17656:2;17651:3;17592:67;:::i;:::-;17585:74;;17668:93;17757:3;17668:93;:::i;:::-;17786:2;17781:3;17777:12;17770:19;;17429:366;;;:::o;17801:::-;17943:3;17964:67;18028:2;18023:3;17964:67;:::i;:::-;17957:74;;18040:93;18129:3;18040:93;:::i;:::-;18158:2;18153:3;18149:12;18142:19;;17801:366;;;:::o;18173:::-;18315:3;18336:67;18400:2;18395:3;18336:67;:::i;:::-;18329:74;;18412:93;18501:3;18412:93;:::i;:::-;18530:2;18525:3;18521:12;18514:19;;18173:366;;;:::o;18545:::-;18687:3;18708:67;18772:2;18767:3;18708:67;:::i;:::-;18701:74;;18784:93;18873:3;18784:93;:::i;:::-;18902:2;18897:3;18893:12;18886:19;;18545:366;;;:::o;18917:::-;19059:3;19080:67;19144:2;19139:3;19080:67;:::i;:::-;19073:74;;19156:93;19245:3;19156:93;:::i;:::-;19274:2;19269:3;19265:12;19258:19;;18917:366;;;:::o;19289:398::-;19448:3;19469:83;19550:1;19545:3;19469:83;:::i;:::-;19462:90;;19561:93;19650:3;19561:93;:::i;:::-;19679:1;19674:3;19670:11;19663:18;;19289:398;;;:::o;19693:366::-;19835:3;19856:67;19920:2;19915:3;19856:67;:::i;:::-;19849:74;;19932:93;20021:3;19932:93;:::i;:::-;20050:2;20045:3;20041:12;20034:19;;19693:366;;;:::o;20065:::-;20207:3;20228:67;20292:2;20287:3;20228:67;:::i;:::-;20221:74;;20304:93;20393:3;20304:93;:::i;:::-;20422:2;20417:3;20413:12;20406:19;;20065:366;;;:::o;20437:108::-;20514:24;20532:5;20514:24;:::i;:::-;20509:3;20502:37;20437:108;;:::o;20551:118::-;20638:24;20656:5;20638:24;:::i;:::-;20633:3;20626:37;20551:118;;:::o;20675:589::-;20900:3;20922:95;21013:3;21004:6;20922:95;:::i;:::-;20915:102;;21034:95;21125:3;21116:6;21034:95;:::i;:::-;21027:102;;21146:92;21234:3;21225:6;21146:92;:::i;:::-;21139:99;;21255:3;21248:10;;20675:589;;;;;;:::o;21270:379::-;21454:3;21476:147;21619:3;21476:147;:::i;:::-;21469:154;;21640:3;21633:10;;21270:379;;;:::o;21655:222::-;21748:4;21786:2;21775:9;21771:18;21763:26;;21799:71;21867:1;21856:9;21852:17;21843:6;21799:71;:::i;:::-;21655:222;;;;:::o;21883:640::-;22078:4;22116:3;22105:9;22101:19;22093:27;;22130:71;22198:1;22187:9;22183:17;22174:6;22130:71;:::i;:::-;22211:72;22279:2;22268:9;22264:18;22255:6;22211:72;:::i;:::-;22293;22361:2;22350:9;22346:18;22337:6;22293:72;:::i;:::-;22412:9;22406:4;22402:20;22397:2;22386:9;22382:18;22375:48;22440:76;22511:4;22502:6;22440:76;:::i;:::-;22432:84;;21883:640;;;;;;;:::o;22529:332::-;22650:4;22688:2;22677:9;22673:18;22665:26;;22701:71;22769:1;22758:9;22754:17;22745:6;22701:71;:::i;:::-;22782:72;22850:2;22839:9;22835:18;22826:6;22782:72;:::i;:::-;22529:332;;;;;:::o;22867:373::-;23010:4;23048:2;23037:9;23033:18;23025:26;;23097:9;23091:4;23087:20;23083:1;23072:9;23068:17;23061:47;23125:108;23228:4;23219:6;23125:108;:::i;:::-;23117:116;;22867:373;;;;:::o;23246:210::-;23333:4;23371:2;23360:9;23356:18;23348:26;;23384:65;23446:1;23435:9;23431:17;23422:6;23384:65;:::i;:::-;23246:210;;;;:::o;23462:313::-;23575:4;23613:2;23602:9;23598:18;23590:26;;23662:9;23656:4;23652:20;23648:1;23637:9;23633:17;23626:47;23690:78;23763:4;23754:6;23690:78;:::i;:::-;23682:86;;23462:313;;;;:::o;23781:419::-;23947:4;23985:2;23974:9;23970:18;23962:26;;24034:9;24028:4;24024:20;24020:1;24009:9;24005:17;23998:47;24062:131;24188:4;24062:131;:::i;:::-;24054:139;;23781:419;;;:::o;24206:::-;24372:4;24410:2;24399:9;24395:18;24387:26;;24459:9;24453:4;24449:20;24445:1;24434:9;24430:17;24423:47;24487:131;24613:4;24487:131;:::i;:::-;24479:139;;24206:419;;;:::o;24631:::-;24797:4;24835:2;24824:9;24820:18;24812:26;;24884:9;24878:4;24874:20;24870:1;24859:9;24855:17;24848:47;24912:131;25038:4;24912:131;:::i;:::-;24904:139;;24631:419;;;:::o;25056:::-;25222:4;25260:2;25249:9;25245:18;25237:26;;25309:9;25303:4;25299:20;25295:1;25284:9;25280:17;25273:47;25337:131;25463:4;25337:131;:::i;:::-;25329:139;;25056:419;;;:::o;25481:::-;25647:4;25685:2;25674:9;25670:18;25662:26;;25734:9;25728:4;25724:20;25720:1;25709:9;25705:17;25698:47;25762:131;25888:4;25762:131;:::i;:::-;25754:139;;25481:419;;;:::o;25906:::-;26072:4;26110:2;26099:9;26095:18;26087:26;;26159:9;26153:4;26149:20;26145:1;26134:9;26130:17;26123:47;26187:131;26313:4;26187:131;:::i;:::-;26179:139;;25906:419;;;:::o;26331:::-;26497:4;26535:2;26524:9;26520:18;26512:26;;26584:9;26578:4;26574:20;26570:1;26559:9;26555:17;26548:47;26612:131;26738:4;26612:131;:::i;:::-;26604:139;;26331:419;;;:::o;26756:::-;26922:4;26960:2;26949:9;26945:18;26937:26;;27009:9;27003:4;26999:20;26995:1;26984:9;26980:17;26973:47;27037:131;27163:4;27037:131;:::i;:::-;27029:139;;26756:419;;;:::o;27181:::-;27347:4;27385:2;27374:9;27370:18;27362:26;;27434:9;27428:4;27424:20;27420:1;27409:9;27405:17;27398:47;27462:131;27588:4;27462:131;:::i;:::-;27454:139;;27181:419;;;:::o;27606:::-;27772:4;27810:2;27799:9;27795:18;27787:26;;27859:9;27853:4;27849:20;27845:1;27834:9;27830:17;27823:47;27887:131;28013:4;27887:131;:::i;:::-;27879:139;;27606:419;;;:::o;28031:::-;28197:4;28235:2;28224:9;28220:18;28212:26;;28284:9;28278:4;28274:20;28270:1;28259:9;28255:17;28248:47;28312:131;28438:4;28312:131;:::i;:::-;28304:139;;28031:419;;;:::o;28456:::-;28622:4;28660:2;28649:9;28645:18;28637:26;;28709:9;28703:4;28699:20;28695:1;28684:9;28680:17;28673:47;28737:131;28863:4;28737:131;:::i;:::-;28729:139;;28456:419;;;:::o;28881:::-;29047:4;29085:2;29074:9;29070:18;29062:26;;29134:9;29128:4;29124:20;29120:1;29109:9;29105:17;29098:47;29162:131;29288:4;29162:131;:::i;:::-;29154:139;;28881:419;;;:::o;29306:::-;29472:4;29510:2;29499:9;29495:18;29487:26;;29559:9;29553:4;29549:20;29545:1;29534:9;29530:17;29523:47;29587:131;29713:4;29587:131;:::i;:::-;29579:139;;29306:419;;;:::o;29731:::-;29897:4;29935:2;29924:9;29920:18;29912:26;;29984:9;29978:4;29974:20;29970:1;29959:9;29955:17;29948:47;30012:131;30138:4;30012:131;:::i;:::-;30004:139;;29731:419;;;:::o;30156:::-;30322:4;30360:2;30349:9;30345:18;30337:26;;30409:9;30403:4;30399:20;30395:1;30384:9;30380:17;30373:47;30437:131;30563:4;30437:131;:::i;:::-;30429:139;;30156:419;;;:::o;30581:::-;30747:4;30785:2;30774:9;30770:18;30762:26;;30834:9;30828:4;30824:20;30820:1;30809:9;30805:17;30798:47;30862:131;30988:4;30862:131;:::i;:::-;30854:139;;30581:419;;;:::o;31006:222::-;31099:4;31137:2;31126:9;31122:18;31114:26;;31150:71;31218:1;31207:9;31203:17;31194:6;31150:71;:::i;:::-;31006:222;;;;:::o;31234:129::-;31268:6;31295:20;;:::i;:::-;31285:30;;31324:33;31352:4;31344:6;31324:33;:::i;:::-;31234:129;;;:::o;31369:75::-;31402:6;31435:2;31429:9;31419:19;;31369:75;:::o;31450:307::-;31511:4;31601:18;31593:6;31590:30;31587:56;;;31623:18;;:::i;:::-;31587:56;31661:29;31683:6;31661:29;:::i;:::-;31653:37;;31745:4;31739;31735:15;31727:23;;31450:307;;;:::o;31763:308::-;31825:4;31915:18;31907:6;31904:30;31901:56;;;31937:18;;:::i;:::-;31901:56;31975:29;31997:6;31975:29;:::i;:::-;31967:37;;32059:4;32053;32049:15;32041:23;;31763:308;;;:::o;32077:132::-;32144:4;32167:3;32159:11;;32197:4;32192:3;32188:14;32180:22;;32077:132;;;:::o;32215:141::-;32264:4;32287:3;32279:11;;32310:3;32307:1;32300:14;32344:4;32341:1;32331:18;32323:26;;32215:141;;;:::o;32362:114::-;32429:6;32463:5;32457:12;32447:22;;32362:114;;;:::o;32482:98::-;32533:6;32567:5;32561:12;32551:22;;32482:98;;;:::o;32586:99::-;32638:6;32672:5;32666:12;32656:22;;32586:99;;;:::o;32691:113::-;32761:4;32793;32788:3;32784:14;32776:22;;32691:113;;;:::o;32810:184::-;32909:11;32943:6;32938:3;32931:19;32983:4;32978:3;32974:14;32959:29;;32810:184;;;;:::o;33000:168::-;33083:11;33117:6;33112:3;33105:19;33157:4;33152:3;33148:14;33133:29;;33000:168;;;;:::o;33174:147::-;33275:11;33312:3;33297:18;;33174:147;;;;:::o;33327:169::-;33411:11;33445:6;33440:3;33433:19;33485:4;33480:3;33476:14;33461:29;;33327:169;;;;:::o;33502:148::-;33604:11;33641:3;33626:18;;33502:148;;;;:::o;33656:305::-;33696:3;33715:20;33733:1;33715:20;:::i;:::-;33710:25;;33749:20;33767:1;33749:20;:::i;:::-;33744:25;;33903:1;33835:66;33831:74;33828:1;33825:81;33822:107;;;33909:18;;:::i;:::-;33822:107;33953:1;33950;33946:9;33939:16;;33656:305;;;;:::o;33967:185::-;34007:1;34024:20;34042:1;34024:20;:::i;:::-;34019:25;;34058:20;34076:1;34058:20;:::i;:::-;34053:25;;34097:1;34087:35;;34102:18;;:::i;:::-;34087:35;34144:1;34141;34137:9;34132:14;;33967:185;;;;:::o;34158:348::-;34198:7;34221:20;34239:1;34221:20;:::i;:::-;34216:25;;34255:20;34273:1;34255:20;:::i;:::-;34250:25;;34443:1;34375:66;34371:74;34368:1;34365:81;34360:1;34353:9;34346:17;34342:105;34339:131;;;34450:18;;:::i;:::-;34339:131;34498:1;34495;34491:9;34480:20;;34158:348;;;;:::o;34512:191::-;34552:4;34572:20;34590:1;34572:20;:::i;:::-;34567:25;;34606:20;34624:1;34606:20;:::i;:::-;34601:25;;34645:1;34642;34639:8;34636:34;;;34650:18;;:::i;:::-;34636:34;34695:1;34692;34688:9;34680:17;;34512:191;;;;:::o;34709:96::-;34746:7;34775:24;34793:5;34775:24;:::i;:::-;34764:35;;34709:96;;;:::o;34811:90::-;34845:7;34888:5;34881:13;34874:21;34863:32;;34811:90;;;:::o;34907:149::-;34943:7;34983:66;34976:5;34972:78;34961:89;;34907:149;;;:::o;35062:126::-;35099:7;35139:42;35132:5;35128:54;35117:65;;35062:126;;;:::o;35194:77::-;35231:7;35260:5;35249:16;;35194:77;;;:::o;35277:109::-;35313:7;35353:26;35346:5;35342:38;35331:49;;35277:109;;;:::o;35392:154::-;35476:6;35471:3;35466;35453:30;35538:1;35529:6;35524:3;35520:16;35513:27;35392:154;;;:::o;35552:307::-;35620:1;35630:113;35644:6;35641:1;35638:13;35630:113;;;35729:1;35724:3;35720:11;35714:18;35710:1;35705:3;35701:11;35694:39;35666:2;35663:1;35659:10;35654:15;;35630:113;;;35761:6;35758:1;35755:13;35752:101;;;35841:1;35832:6;35827:3;35823:16;35816:27;35752:101;35601:258;35552:307;;;:::o;35865:320::-;35909:6;35946:1;35940:4;35936:12;35926:22;;35993:1;35987:4;35983:12;36014:18;36004:81;;36070:4;36062:6;36058:17;36048:27;;36004:81;36132:2;36124:6;36121:14;36101:18;36098:38;36095:84;;;36151:18;;:::i;:::-;36095:84;35916:269;35865:320;;;:::o;36191:281::-;36274:27;36296:4;36274:27;:::i;:::-;36266:6;36262:40;36404:6;36392:10;36389:22;36368:18;36356:10;36353:34;36350:62;36347:88;;;36415:18;;:::i;:::-;36347:88;36455:10;36451:2;36444:22;36234:238;36191:281;;:::o;36478:233::-;36517:3;36540:24;36558:5;36540:24;:::i;:::-;36531:33;;36586:66;36579:5;36576:77;36573:103;;;36656:18;;:::i;:::-;36573:103;36703:1;36696:5;36692:13;36685:20;;36478:233;;;:::o;36717:176::-;36749:1;36766:20;36784:1;36766:20;:::i;:::-;36761:25;;36800:20;36818:1;36800:20;:::i;:::-;36795:25;;36839:1;36829:35;;36844:18;;:::i;:::-;36829:35;36885:1;36882;36878:9;36873:14;;36717:176;;;;:::o;36899:180::-;36947:77;36944:1;36937:88;37044:4;37041:1;37034:15;37068:4;37065:1;37058:15;37085:180;37133:77;37130:1;37123:88;37230:4;37227:1;37220:15;37254:4;37251:1;37244:15;37271:180;37319:77;37316:1;37309:88;37416:4;37413:1;37406:15;37440:4;37437:1;37430:15;37457:180;37505:77;37502:1;37495:88;37602:4;37599:1;37592:15;37626:4;37623:1;37616:15;37643:180;37691:77;37688:1;37681:88;37788:4;37785:1;37778:15;37812:4;37809:1;37802:15;37829:180;37877:77;37874:1;37867:88;37974:4;37971:1;37964:15;37998:4;37995:1;37988:15;38015:117;38124:1;38121;38114:12;38138:117;38247:1;38244;38237:12;38261:117;38370:1;38367;38360:12;38384:117;38493:1;38490;38483:12;38507:117;38616:1;38613;38606:12;38630:117;38739:1;38736;38729:12;38753:102;38794:6;38845:2;38841:7;38836:2;38829:5;38825:14;38821:28;38811:38;;38753:102;;;:::o;38861:230::-;39001:34;38997:1;38989:6;38985:14;38978:58;39070:13;39065:2;39057:6;39053:15;39046:38;38861:230;:::o;39097:237::-;39237:34;39233:1;39225:6;39221:14;39214:58;39306:20;39301:2;39293:6;39289:15;39282:45;39097:237;:::o;39340:225::-;39480:34;39476:1;39468:6;39464:14;39457:58;39549:8;39544:2;39536:6;39532:15;39525:33;39340:225;:::o;39571:224::-;39711:34;39707:1;39699:6;39695:14;39688:58;39780:7;39775:2;39767:6;39763:15;39756:32;39571:224;:::o;39801:178::-;39941:30;39937:1;39929:6;39925:14;39918:54;39801:178;:::o;39985:223::-;40125:34;40121:1;40113:6;40109:14;40102:58;40194:6;40189:2;40181:6;40177:15;40170:31;39985:223;:::o;40214:175::-;40354:27;40350:1;40342:6;40338:14;40331:51;40214:175;:::o;40395:228::-;40535:34;40531:1;40523:6;40519:14;40512:58;40604:11;40599:2;40591:6;40587:15;40580:36;40395:228;:::o;40629:249::-;40769:34;40765:1;40757:6;40753:14;40746:58;40838:32;40833:2;40825:6;40821:15;40814:57;40629:249;:::o;40884:182::-;41024:34;41020:1;41012:6;41008:14;41001:58;40884:182;:::o;41072:::-;41212:34;41208:1;41200:6;41196:14;41189:58;41072:182;:::o;41260:234::-;41400:34;41396:1;41388:6;41384:14;41377:58;41469:17;41464:2;41456:6;41452:15;41445:42;41260:234;:::o;41500:174::-;41640:26;41636:1;41628:6;41624:14;41617:50;41500:174;:::o;41680:220::-;41820:34;41816:1;41808:6;41804:14;41797:58;41889:3;41884:2;41876:6;41872:15;41865:28;41680:220;:::o;41906:176::-;42046:28;42042:1;42034:6;42030:14;42023:52;41906:176;:::o;42088:114::-;;:::o;42208:231::-;42348:34;42344:1;42336:6;42332:14;42325:58;42417:14;42412:2;42404:6;42400:15;42393:39;42208:231;:::o;42445:233::-;42585:34;42581:1;42573:6;42569:14;42562:58;42654:16;42649:2;42641:6;42637:15;42630:41;42445:233;:::o;42684:122::-;42757:24;42775:5;42757:24;:::i;:::-;42750:5;42747:35;42737:63;;42796:1;42793;42786:12;42737:63;42684:122;:::o;42812:116::-;42882:21;42897:5;42882:21;:::i;:::-;42875:5;42872:32;42862:60;;42918:1;42915;42908:12;42862:60;42812:116;:::o;42934:120::-;43006:23;43023:5;43006:23;:::i;:::-;42999:5;42996:34;42986:62;;43044:1;43041;43034:12;42986:62;42934:120;:::o;43060:122::-;43133:24;43151:5;43133:24;:::i;:::-;43126:5;43123:35;43113:63;;43172:1;43169;43162:12;43113:63;43060:122;:::o;43188:120::-;43260:23;43277:5;43260:23;:::i;:::-;43253:5;43250:34;43240:62;;43298:1;43295;43288:12;43240:62;43188:120;:::o

Swarm Source

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