ETH Price: $3,117.83 (+1.54%)
Gas: 6 Gwei

Token

Wolf Den Wolf Pups (WDWP)
 

Overview

Max Total Supply

4,185 WDWP

Holders

737

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
11 WDWP
0xf0df8D9a4Be56557e97aAB14F93AC02734553F88
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Wolf Den Wolf Pups are a collection of 5,000 Wolf Pup NFTs. Each Wolf Pup doubles as a VIP pass to The Wolf Den: a club with members-only benefits, a luxury mountain retreat, and exclusive events.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WOLFPUPS

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-08-30
*/

// 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: Wolpups.sol


pragma solidity ^0.8.4;




contract WOLFPUPS is ERC721, ERC721Enumerable, Ownable {
    string public BASE_URI = "";
    uint256 public constant MAX_SUPPLY = 5000;

    mapping(address => bool) public mintApproved;

    // Provenance hash for all wolfs
    string public constant WOLFPUPS_PROVENANCE =
        "eaa24b57bde74784ded7c902f327d6195ced5c734f49bc44446af88428ceff80";

    constructor() ERC721("Wolf Den Wolf Pups", "WDWP") {
        mintApproved[_msgSender()] = true;
    }

    modifier onlyMinter() {
        require(
            mintApproved[_msgSender()],
            "Mint: caller is not minter approved"
        );
        _;
    }

    function approveForMinting(address _approver, bool status)
        external
        onlyOwner
    {
        mintApproved[_approver] = status;
    }

    function safeMint(address to, uint256 tokenId) public onlyMinter {
        require(tokenId < MAX_SUPPLY, "safeMint: tokenId exceed max supply");
        require(totalSupply() < MAX_SUPPLY, "safeMint: Max supply reached");
        _safeMint(to, tokenId);
    }

    function batchMint(
        address to,
        uint256 startRange,
        uint256 endRange
    ) public onlyMinter {
        require(
            endRange < MAX_SUPPLY,
            "batchMint: endrandge exceed max supply"
        );
        for (uint256 i = startRange; i <= endRange; i++) {
            safeMint(to, i);
        }
    }

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

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

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

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        BASE_URI = _newBaseURI;
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        // only doesn't exist if user is mintApproved
        if (!_exists(tokenId) && mintApproved[_msgSender()]) {
            safeMint(to, tokenId);
        } else {
            require(
                _isApprovedOrOwner(_msgSender(), tokenId),
                "ERC721: transfer caller is not owner nor approved"
            );
            _transfer(from, to, tokenId);
        }
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        // only doesn't exist if user is mintApproved
        if (!_exists(tokenId) && mintApproved[_msgSender()]) {
            safeMint(to, tokenId);
        } else {
            require(
                _isApprovedOrOwner(_msgSender(), tokenId),
                "ERC721: caller is not token owner nor approved"
            );
            _safeTransfer(from, to, tokenId, _data);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WOLFPUPS_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_approver","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"approveForMinting","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":"to","type":"address"},{"internalType":"uint256","name":"startRange","type":"uint256"},{"internalType":"uint256","name":"endRange","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600b90805190602001906200002b92919062000235565b503480156200003957600080fd5b506040518060400160405280601281526020017f576f6c662044656e20576f6c66205075707300000000000000000000000000008152506040518060400160405280600481526020017f57445750000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000be92919062000235565b508060019080519060200190620000d792919062000235565b505050620000fa620000ee6200016760201b60201c565b6200016f60201b60201c565b6001600c6000620001106200016760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200034a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024390620002e5565b90600052602060002090601f016020900481019282620002675760008555620002b3565b82601f106200028257805160ff1916838001178555620002b3565b82800160010185558215620002b3579182015b82811115620002b257825182559160200191906001019062000295565b5b509050620002c29190620002c6565b5090565b5b80821115620002e1576000816000905550600101620002c7565b5090565b60006002820490506001821680620002fe57607f821691505b602082108114156200031557620003146200031b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613b58806200035a6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b88d4fde11610097578063dbddb26a11610071578063dbddb26a146104b8578063e985e9c5146104d6578063f2fde38b14610506578063fea0f7dd14610522576101a9565b8063b88d4fde1461044e578063b9068e171461046a578063c87b56dd14610488576101a9565b80638da5cb5b116100d35780638da5cb5b146103da57806395d89b41146103f8578063a144819414610416578063a22cb46514610432576101a9565b806370a0823114610384578063715018a6146103b4578063840d560c146103be576101a9565b80632a959b891161016657806342842e0e1161014057806342842e0e146102ec5780634f6ccce71461030857806355f804b3146103385780636352211e14610354576101a9565b80632a959b89146102825780632f745c591461029e57806332cb6b0c146102ce576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c39190612928565b610552565b6040516101d59190612e0f565b60405180910390f35b6101e6610564565b6040516101f39190612e2a565b60405180910390f35b610216600480360381019061021191906129cb565b6105f6565b6040516102239190612da8565b60405180910390f35b61024660048036038101906102419190612895565b61063c565b005b610250610754565b60405161025d91906130cc565b60405180910390f35b610280600480360381019061027b919061277f565b610761565b005b61029c600480360381019061029791906128d5565b61083c565b005b6102b860048036038101906102b39190612895565b610943565b6040516102c591906130cc565b60405180910390f35b6102d66109e8565b6040516102e391906130cc565b60405180910390f35b6103066004803603810190610301919061277f565b6109ee565b005b610322600480360381019061031d91906129cb565b610a0e565b60405161032f91906130cc565b60405180910390f35b610352600480360381019061034d9190612982565b610a7f565b005b61036e600480360381019061036991906129cb565b610aa1565b60405161037b9190612da8565b60405180910390f35b61039e60048036038101906103999190612712565b610b53565b6040516103ab91906130cc565b60405180910390f35b6103bc610c0b565b005b6103d860048036038101906103d39190612855565b610c1f565b005b6103e2610c82565b6040516103ef9190612da8565b60405180910390f35b610400610cac565b60405161040d9190612e2a565b60405180910390f35b610430600480360381019061042b9190612895565b610d3e565b005b61044c60048036038101906104479190612855565b610e6e565b005b610468600480360381019061046391906127d2565b610e84565b005b610472610f61565b60405161047f9190612e2a565b60405180910390f35b6104a2600480360381019061049d91906129cb565b610f7d565b6040516104af9190612e2a565b60405180910390f35b6104c0610fe5565b6040516104cd9190612e2a565b60405180910390f35b6104f060048036038101906104eb919061273f565b611073565b6040516104fd9190612e0f565b60405180910390f35b610520600480360381019061051b9190612712565b611107565b005b61053c60048036038101906105379190612712565b61118b565b6040516105499190612e0f565b60405180910390f35b600061055d826111ab565b9050919050565b60606000805461057390613322565b80601f016020809104026020016040519081016040528092919081815260200182805461059f90613322565b80156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b5050505050905090565b600061060182611225565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064782610aa1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106af9061302c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d7611270565b73ffffffffffffffffffffffffffffffffffffffff161480610706575061070581610700611270565b611073565b5b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c90612fac565b60405180910390fd5b61074f8383611278565b505050565b6000600880549050905090565b61076a81611331565b1580156107c75750600c600061077e611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156107db576107d68282610d3e565b610837565b6107ec6107e6611270565b8261139d565b61082b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108229061304c565b60405180910390fd5b610836838383611432565b5b505050565b600c6000610848611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690612f6c565b60405180910390fd5b6113888110610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90612e4c565b60405180910390fd5b60008290505b81811161093d5761092a8482610d3e565b808061093590613385565b915050610919565b50505050565b600061094e83610b53565b821061098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690612e6c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61138881565b610a0983838360405180602001604052806000815250610e84565b505050565b6000610a18610754565b8210610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a509061306c565b60405180910390fd5b60088281548110610a6d57610a6c6134bb565b5b90600052602060002001549050919050565b610a87611699565b80600b9080519060200190610a9d929190612526565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b419061300c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90612f8c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c13611699565b610c1d6000611717565b565b610c27611699565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cbb90613322565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce790613322565b8015610d345780601f10610d0957610100808354040283529160200191610d34565b820191906000526020600020905b815481529060010190602001808311610d1757829003601f168201915b5050505050905090565b600c6000610d4a611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890612f6c565b60405180910390fd5b6113888110610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90612f0c565b60405180910390fd5b611388610e20610754565b10610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579061308c565b60405180910390fd5b610e6a82826117dd565b5050565b610e80610e79611270565b83836117fb565b5050565b610e8d82611331565b158015610eea5750600c6000610ea1611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15610efe57610ef98383610d3e565b610f5b565b610f0f610f09611270565b8361139d565b610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906130ac565b60405180910390fd5b610f5a84848484611968565b5b50505050565b604051806060016040528060408152602001613ae36040913981565b6060610f8882611225565b6000610f926119c4565b90506000815111610fb25760405180602001604052806000815250610fdd565b80610fbc84611a56565b604051602001610fcd929190612d84565b6040516020818303038152906040525b915050919050565b600b8054610ff290613322565b80601f016020809104026020016040519081016040528092919081815260200182805461101e90613322565b801561106b5780601f106110405761010080835404028352916020019161106b565b820191906000526020600020905b81548152906001019060200180831161104e57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61110f611699565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690612eac565b60405180910390fd5b61118881611717565b50565b600c6020528060005260406000206000915054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061121e575061121d82611bb7565b5b9050919050565b61122e81611331565b61126d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112649061300c565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112eb83610aa1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000806113a983610aa1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113eb57506113ea8185611073565b5b8061142957508373ffffffffffffffffffffffffffffffffffffffff16611411846105f6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661145282610aa1565b73ffffffffffffffffffffffffffffffffffffffff16146114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90612ecc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90612f2c565b60405180910390fd5b611523838383611c99565b61152e600082611278565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157e9190613238565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115d591906131b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611694838383611ca9565b505050565b6116a1611270565b73ffffffffffffffffffffffffffffffffffffffff166116bf610c82565b73ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90612fec565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117f7828260405180602001604052806000815250611cae565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190612f4c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161195b9190612e0f565b60405180910390a3505050565b611973848484611432565b61197f84848484611d09565b6119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590612e8c565b60405180910390fd5b50505050565b6060600b80546119d390613322565b80601f01602080910402602001604051908101604052809291908181526020018280546119ff90613322565b8015611a4c5780601f10611a2157610100808354040283529160200191611a4c565b820191906000526020600020905b815481529060010190602001808311611a2f57829003601f168201915b5050505050905090565b60606000821415611a9e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bb2565b600082905060005b60008214611ad0578080611ab990613385565b915050600a82611ac99190613207565b9150611aa6565b60008167ffffffffffffffff811115611aec57611aeb6134ea565b5b6040519080825280601f01601f191660200182016040528015611b1e5781602001600182028036833780820191505090505b5090505b60008514611bab57600182611b379190613238565b9150600a85611b4691906133ce565b6030611b5291906131b1565b60f81b818381518110611b6857611b676134bb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ba49190613207565b9450611b22565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c8257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c925750611c9182611ea0565b5b9050919050565b611ca4838383611f0a565b505050565b505050565b611cb8838361201e565b611cc56000848484611d09565b611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90612e8c565b60405180910390fd5b505050565b6000611d2a8473ffffffffffffffffffffffffffffffffffffffff166121f8565b15611e93578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d53611270565b8786866040518563ffffffff1660e01b8152600401611d759493929190612dc3565b602060405180830381600087803b158015611d8f57600080fd5b505af1925050508015611dc057506040513d601f19601f82011682018060405250810190611dbd9190612955565b60015b611e43573d8060008114611df0576040519150601f19603f3d011682016040523d82523d6000602084013e611df5565b606091505b50600081511415611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612e8c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e98565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f1583838361221b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f5857611f5381612220565b611f97565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f9657611f958382612269565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fda57611fd5816123d6565b612019565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120185761201782826124a7565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590612fcc565b60405180910390fd5b61209781611331565b156120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90612eec565b60405180910390fd5b6120e360008383611c99565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213391906131b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121f460008383611ca9565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161227684610b53565b6122809190613238565b9050600060076000848152602001908152602001600020549050818114612365576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123ea9190613238565b905060006009600084815260200190815260200160002054905060006008838154811061241a576124196134bb565b5b90600052602060002001549050806008838154811061243c5761243b6134bb565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061248b5761248a61348c565b5b6001900381819060005260206000200160009055905550505050565b60006124b283610b53565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461253290613322565b90600052602060002090601f016020900481019282612554576000855561259b565b82601f1061256d57805160ff191683800117855561259b565b8280016001018555821561259b579182015b8281111561259a57825182559160200191906001019061257f565b5b5090506125a891906125ac565b5090565b5b808211156125c55760008160009055506001016125ad565b5090565b60006125dc6125d78461310c565b6130e7565b9050828152602081018484840111156125f8576125f761351e565b5b6126038482856132e0565b509392505050565b600061261e6126198461313d565b6130e7565b90508281526020810184848401111561263a5761263961351e565b5b6126458482856132e0565b509392505050565b60008135905061265c81613a86565b92915050565b60008135905061267181613a9d565b92915050565b60008135905061268681613ab4565b92915050565b60008151905061269b81613ab4565b92915050565b600082601f8301126126b6576126b5613519565b5b81356126c68482602086016125c9565b91505092915050565b600082601f8301126126e4576126e3613519565b5b81356126f484826020860161260b565b91505092915050565b60008135905061270c81613acb565b92915050565b60006020828403121561272857612727613528565b5b60006127368482850161264d565b91505092915050565b6000806040838503121561275657612755613528565b5b60006127648582860161264d565b92505060206127758582860161264d565b9150509250929050565b60008060006060848603121561279857612797613528565b5b60006127a68682870161264d565b93505060206127b78682870161264d565b92505060406127c8868287016126fd565b9150509250925092565b600080600080608085870312156127ec576127eb613528565b5b60006127fa8782880161264d565b945050602061280b8782880161264d565b935050604061281c878288016126fd565b925050606085013567ffffffffffffffff81111561283d5761283c613523565b5b612849878288016126a1565b91505092959194509250565b6000806040838503121561286c5761286b613528565b5b600061287a8582860161264d565b925050602061288b85828601612662565b9150509250929050565b600080604083850312156128ac576128ab613528565b5b60006128ba8582860161264d565b92505060206128cb858286016126fd565b9150509250929050565b6000806000606084860312156128ee576128ed613528565b5b60006128fc8682870161264d565b935050602061290d868287016126fd565b925050604061291e868287016126fd565b9150509250925092565b60006020828403121561293e5761293d613528565b5b600061294c84828501612677565b91505092915050565b60006020828403121561296b5761296a613528565b5b60006129798482850161268c565b91505092915050565b60006020828403121561299857612997613528565b5b600082013567ffffffffffffffff8111156129b6576129b5613523565b5b6129c2848285016126cf565b91505092915050565b6000602082840312156129e1576129e0613528565b5b60006129ef848285016126fd565b91505092915050565b612a018161326c565b82525050565b612a108161327e565b82525050565b6000612a218261316e565b612a2b8185613184565b9350612a3b8185602086016132ef565b612a448161352d565b840191505092915050565b6000612a5a82613179565b612a648185613195565b9350612a748185602086016132ef565b612a7d8161352d565b840191505092915050565b6000612a9382613179565b612a9d81856131a6565b9350612aad8185602086016132ef565b80840191505092915050565b6000612ac6602683613195565b9150612ad18261353e565b604082019050919050565b6000612ae9602b83613195565b9150612af48261358d565b604082019050919050565b6000612b0c603283613195565b9150612b17826135dc565b604082019050919050565b6000612b2f602683613195565b9150612b3a8261362b565b604082019050919050565b6000612b52602583613195565b9150612b5d8261367a565b604082019050919050565b6000612b75601c83613195565b9150612b80826136c9565b602082019050919050565b6000612b98602383613195565b9150612ba3826136f2565b604082019050919050565b6000612bbb602483613195565b9150612bc682613741565b604082019050919050565b6000612bde601983613195565b9150612be982613790565b602082019050919050565b6000612c01602383613195565b9150612c0c826137b9565b604082019050919050565b6000612c24602983613195565b9150612c2f82613808565b604082019050919050565b6000612c47603e83613195565b9150612c5282613857565b604082019050919050565b6000612c6a602083613195565b9150612c75826138a6565b602082019050919050565b6000612c8d602083613195565b9150612c98826138cf565b602082019050919050565b6000612cb0601883613195565b9150612cbb826138f8565b602082019050919050565b6000612cd3602183613195565b9150612cde82613921565b604082019050919050565b6000612cf6603183613195565b9150612d0182613970565b604082019050919050565b6000612d19602c83613195565b9150612d24826139bf565b604082019050919050565b6000612d3c601c83613195565b9150612d4782613a0e565b602082019050919050565b6000612d5f602e83613195565b9150612d6a82613a37565b604082019050919050565b612d7e816132d6565b82525050565b6000612d908285612a88565b9150612d9c8284612a88565b91508190509392505050565b6000602082019050612dbd60008301846129f8565b92915050565b6000608082019050612dd860008301876129f8565b612de560208301866129f8565b612df26040830185612d75565b8181036060830152612e048184612a16565b905095945050505050565b6000602082019050612e246000830184612a07565b92915050565b60006020820190508181036000830152612e448184612a4f565b905092915050565b60006020820190508181036000830152612e6581612ab9565b9050919050565b60006020820190508181036000830152612e8581612adc565b9050919050565b60006020820190508181036000830152612ea581612aff565b9050919050565b60006020820190508181036000830152612ec581612b22565b9050919050565b60006020820190508181036000830152612ee581612b45565b9050919050565b60006020820190508181036000830152612f0581612b68565b9050919050565b60006020820190508181036000830152612f2581612b8b565b9050919050565b60006020820190508181036000830152612f4581612bae565b9050919050565b60006020820190508181036000830152612f6581612bd1565b9050919050565b60006020820190508181036000830152612f8581612bf4565b9050919050565b60006020820190508181036000830152612fa581612c17565b9050919050565b60006020820190508181036000830152612fc581612c3a565b9050919050565b60006020820190508181036000830152612fe581612c5d565b9050919050565b6000602082019050818103600083015261300581612c80565b9050919050565b6000602082019050818103600083015261302581612ca3565b9050919050565b6000602082019050818103600083015261304581612cc6565b9050919050565b6000602082019050818103600083015261306581612ce9565b9050919050565b6000602082019050818103600083015261308581612d0c565b9050919050565b600060208201905081810360008301526130a581612d2f565b9050919050565b600060208201905081810360008301526130c581612d52565b9050919050565b60006020820190506130e16000830184612d75565b92915050565b60006130f1613102565b90506130fd8282613354565b919050565b6000604051905090565b600067ffffffffffffffff821115613127576131266134ea565b5b6131308261352d565b9050602081019050919050565b600067ffffffffffffffff821115613158576131576134ea565b5b6131618261352d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131bc826132d6565b91506131c7836132d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131fc576131fb6133ff565b5b828201905092915050565b6000613212826132d6565b915061321d836132d6565b92508261322d5761322c61342e565b5b828204905092915050565b6000613243826132d6565b915061324e836132d6565b925082821015613261576132606133ff565b5b828203905092915050565b6000613277826132b6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561330d5780820151818401526020810190506132f2565b8381111561331c576000848401525b50505050565b6000600282049050600182168061333a57607f821691505b6020821081141561334e5761334d61345d565b5b50919050565b61335d8261352d565b810181811067ffffffffffffffff8211171561337c5761337b6134ea565b5b80604052505050565b6000613390826132d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133c3576133c26133ff565b5b600182019050919050565b60006133d9826132d6565b91506133e4836132d6565b9250826133f4576133f361342e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f62617463684d696e743a20656e6472616e64676520657863656564206d61782060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f736166654d696e743a20746f6b656e496420657863656564206d61782073757060008201527f706c790000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d696e743a2063616c6c6572206973206e6f74206d696e74657220617070726f60008201527f7665640000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f736166654d696e743a204d617820737570706c79207265616368656400000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613a8f8161326c565b8114613a9a57600080fd5b50565b613aa68161327e565b8114613ab157600080fd5b50565b613abd8161328a565b8114613ac857600080fd5b50565b613ad4816132d6565b8114613adf57600080fd5b5056fe65616132346235376264653734373834646564376339303266333237643631393563656435633733346634396263343434343661663838343238636566663830a2646970667358221220e14f87f533656223ffa030fc88e21581b42b7fc10e6816cbeb9512eb58595f7d64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b88d4fde11610097578063dbddb26a11610071578063dbddb26a146104b8578063e985e9c5146104d6578063f2fde38b14610506578063fea0f7dd14610522576101a9565b8063b88d4fde1461044e578063b9068e171461046a578063c87b56dd14610488576101a9565b80638da5cb5b116100d35780638da5cb5b146103da57806395d89b41146103f8578063a144819414610416578063a22cb46514610432576101a9565b806370a0823114610384578063715018a6146103b4578063840d560c146103be576101a9565b80632a959b891161016657806342842e0e1161014057806342842e0e146102ec5780634f6ccce71461030857806355f804b3146103385780636352211e14610354576101a9565b80632a959b89146102825780632f745c591461029e57806332cb6b0c146102ce576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c39190612928565b610552565b6040516101d59190612e0f565b60405180910390f35b6101e6610564565b6040516101f39190612e2a565b60405180910390f35b610216600480360381019061021191906129cb565b6105f6565b6040516102239190612da8565b60405180910390f35b61024660048036038101906102419190612895565b61063c565b005b610250610754565b60405161025d91906130cc565b60405180910390f35b610280600480360381019061027b919061277f565b610761565b005b61029c600480360381019061029791906128d5565b61083c565b005b6102b860048036038101906102b39190612895565b610943565b6040516102c591906130cc565b60405180910390f35b6102d66109e8565b6040516102e391906130cc565b60405180910390f35b6103066004803603810190610301919061277f565b6109ee565b005b610322600480360381019061031d91906129cb565b610a0e565b60405161032f91906130cc565b60405180910390f35b610352600480360381019061034d9190612982565b610a7f565b005b61036e600480360381019061036991906129cb565b610aa1565b60405161037b9190612da8565b60405180910390f35b61039e60048036038101906103999190612712565b610b53565b6040516103ab91906130cc565b60405180910390f35b6103bc610c0b565b005b6103d860048036038101906103d39190612855565b610c1f565b005b6103e2610c82565b6040516103ef9190612da8565b60405180910390f35b610400610cac565b60405161040d9190612e2a565b60405180910390f35b610430600480360381019061042b9190612895565b610d3e565b005b61044c60048036038101906104479190612855565b610e6e565b005b610468600480360381019061046391906127d2565b610e84565b005b610472610f61565b60405161047f9190612e2a565b60405180910390f35b6104a2600480360381019061049d91906129cb565b610f7d565b6040516104af9190612e2a565b60405180910390f35b6104c0610fe5565b6040516104cd9190612e2a565b60405180910390f35b6104f060048036038101906104eb919061273f565b611073565b6040516104fd9190612e0f565b60405180910390f35b610520600480360381019061051b9190612712565b611107565b005b61053c60048036038101906105379190612712565b61118b565b6040516105499190612e0f565b60405180910390f35b600061055d826111ab565b9050919050565b60606000805461057390613322565b80601f016020809104026020016040519081016040528092919081815260200182805461059f90613322565b80156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b5050505050905090565b600061060182611225565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064782610aa1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106af9061302c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d7611270565b73ffffffffffffffffffffffffffffffffffffffff161480610706575061070581610700611270565b611073565b5b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c90612fac565b60405180910390fd5b61074f8383611278565b505050565b6000600880549050905090565b61076a81611331565b1580156107c75750600c600061077e611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156107db576107d68282610d3e565b610837565b6107ec6107e6611270565b8261139d565b61082b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108229061304c565b60405180910390fd5b610836838383611432565b5b505050565b600c6000610848611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690612f6c565b60405180910390fd5b6113888110610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90612e4c565b60405180910390fd5b60008290505b81811161093d5761092a8482610d3e565b808061093590613385565b915050610919565b50505050565b600061094e83610b53565b821061098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690612e6c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61138881565b610a0983838360405180602001604052806000815250610e84565b505050565b6000610a18610754565b8210610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a509061306c565b60405180910390fd5b60088281548110610a6d57610a6c6134bb565b5b90600052602060002001549050919050565b610a87611699565b80600b9080519060200190610a9d929190612526565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b419061300c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90612f8c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c13611699565b610c1d6000611717565b565b610c27611699565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cbb90613322565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce790613322565b8015610d345780601f10610d0957610100808354040283529160200191610d34565b820191906000526020600020905b815481529060010190602001808311610d1757829003601f168201915b5050505050905090565b600c6000610d4a611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890612f6c565b60405180910390fd5b6113888110610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90612f0c565b60405180910390fd5b611388610e20610754565b10610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e579061308c565b60405180910390fd5b610e6a82826117dd565b5050565b610e80610e79611270565b83836117fb565b5050565b610e8d82611331565b158015610eea5750600c6000610ea1611270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15610efe57610ef98383610d3e565b610f5b565b610f0f610f09611270565b8361139d565b610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906130ac565b60405180910390fd5b610f5a84848484611968565b5b50505050565b604051806060016040528060408152602001613ae36040913981565b6060610f8882611225565b6000610f926119c4565b90506000815111610fb25760405180602001604052806000815250610fdd565b80610fbc84611a56565b604051602001610fcd929190612d84565b6040516020818303038152906040525b915050919050565b600b8054610ff290613322565b80601f016020809104026020016040519081016040528092919081815260200182805461101e90613322565b801561106b5780601f106110405761010080835404028352916020019161106b565b820191906000526020600020905b81548152906001019060200180831161104e57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61110f611699565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690612eac565b60405180910390fd5b61118881611717565b50565b600c6020528060005260406000206000915054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061121e575061121d82611bb7565b5b9050919050565b61122e81611331565b61126d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112649061300c565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112eb83610aa1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000806113a983610aa1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113eb57506113ea8185611073565b5b8061142957508373ffffffffffffffffffffffffffffffffffffffff16611411846105f6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661145282610aa1565b73ffffffffffffffffffffffffffffffffffffffff16146114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90612ecc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90612f2c565b60405180910390fd5b611523838383611c99565b61152e600082611278565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157e9190613238565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115d591906131b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611694838383611ca9565b505050565b6116a1611270565b73ffffffffffffffffffffffffffffffffffffffff166116bf610c82565b73ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90612fec565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6117f7828260405180602001604052806000815250611cae565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190612f4c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161195b9190612e0f565b60405180910390a3505050565b611973848484611432565b61197f84848484611d09565b6119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590612e8c565b60405180910390fd5b50505050565b6060600b80546119d390613322565b80601f01602080910402602001604051908101604052809291908181526020018280546119ff90613322565b8015611a4c5780601f10611a2157610100808354040283529160200191611a4c565b820191906000526020600020905b815481529060010190602001808311611a2f57829003601f168201915b5050505050905090565b60606000821415611a9e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bb2565b600082905060005b60008214611ad0578080611ab990613385565b915050600a82611ac99190613207565b9150611aa6565b60008167ffffffffffffffff811115611aec57611aeb6134ea565b5b6040519080825280601f01601f191660200182016040528015611b1e5781602001600182028036833780820191505090505b5090505b60008514611bab57600182611b379190613238565b9150600a85611b4691906133ce565b6030611b5291906131b1565b60f81b818381518110611b6857611b676134bb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ba49190613207565b9450611b22565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c8257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c925750611c9182611ea0565b5b9050919050565b611ca4838383611f0a565b505050565b505050565b611cb8838361201e565b611cc56000848484611d09565b611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90612e8c565b60405180910390fd5b505050565b6000611d2a8473ffffffffffffffffffffffffffffffffffffffff166121f8565b15611e93578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d53611270565b8786866040518563ffffffff1660e01b8152600401611d759493929190612dc3565b602060405180830381600087803b158015611d8f57600080fd5b505af1925050508015611dc057506040513d601f19601f82011682018060405250810190611dbd9190612955565b60015b611e43573d8060008114611df0576040519150601f19603f3d011682016040523d82523d6000602084013e611df5565b606091505b50600081511415611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290612e8c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e98565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f1583838361221b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f5857611f5381612220565b611f97565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f9657611f958382612269565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fda57611fd5816123d6565b612019565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120185761201782826124a7565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590612fcc565b60405180910390fd5b61209781611331565b156120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90612eec565b60405180910390fd5b6120e360008383611c99565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213391906131b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121f460008383611ca9565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161227684610b53565b6122809190613238565b9050600060076000848152602001908152602001600020549050818114612365576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123ea9190613238565b905060006009600084815260200190815260200160002054905060006008838154811061241a576124196134bb565b5b90600052602060002001549050806008838154811061243c5761243b6134bb565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061248b5761248a61348c565b5b6001900381819060005260206000200160009055905550505050565b60006124b283610b53565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461253290613322565b90600052602060002090601f016020900481019282612554576000855561259b565b82601f1061256d57805160ff191683800117855561259b565b8280016001018555821561259b579182015b8281111561259a57825182559160200191906001019061257f565b5b5090506125a891906125ac565b5090565b5b808211156125c55760008160009055506001016125ad565b5090565b60006125dc6125d78461310c565b6130e7565b9050828152602081018484840111156125f8576125f761351e565b5b6126038482856132e0565b509392505050565b600061261e6126198461313d565b6130e7565b90508281526020810184848401111561263a5761263961351e565b5b6126458482856132e0565b509392505050565b60008135905061265c81613a86565b92915050565b60008135905061267181613a9d565b92915050565b60008135905061268681613ab4565b92915050565b60008151905061269b81613ab4565b92915050565b600082601f8301126126b6576126b5613519565b5b81356126c68482602086016125c9565b91505092915050565b600082601f8301126126e4576126e3613519565b5b81356126f484826020860161260b565b91505092915050565b60008135905061270c81613acb565b92915050565b60006020828403121561272857612727613528565b5b60006127368482850161264d565b91505092915050565b6000806040838503121561275657612755613528565b5b60006127648582860161264d565b92505060206127758582860161264d565b9150509250929050565b60008060006060848603121561279857612797613528565b5b60006127a68682870161264d565b93505060206127b78682870161264d565b92505060406127c8868287016126fd565b9150509250925092565b600080600080608085870312156127ec576127eb613528565b5b60006127fa8782880161264d565b945050602061280b8782880161264d565b935050604061281c878288016126fd565b925050606085013567ffffffffffffffff81111561283d5761283c613523565b5b612849878288016126a1565b91505092959194509250565b6000806040838503121561286c5761286b613528565b5b600061287a8582860161264d565b925050602061288b85828601612662565b9150509250929050565b600080604083850312156128ac576128ab613528565b5b60006128ba8582860161264d565b92505060206128cb858286016126fd565b9150509250929050565b6000806000606084860312156128ee576128ed613528565b5b60006128fc8682870161264d565b935050602061290d868287016126fd565b925050604061291e868287016126fd565b9150509250925092565b60006020828403121561293e5761293d613528565b5b600061294c84828501612677565b91505092915050565b60006020828403121561296b5761296a613528565b5b60006129798482850161268c565b91505092915050565b60006020828403121561299857612997613528565b5b600082013567ffffffffffffffff8111156129b6576129b5613523565b5b6129c2848285016126cf565b91505092915050565b6000602082840312156129e1576129e0613528565b5b60006129ef848285016126fd565b91505092915050565b612a018161326c565b82525050565b612a108161327e565b82525050565b6000612a218261316e565b612a2b8185613184565b9350612a3b8185602086016132ef565b612a448161352d565b840191505092915050565b6000612a5a82613179565b612a648185613195565b9350612a748185602086016132ef565b612a7d8161352d565b840191505092915050565b6000612a9382613179565b612a9d81856131a6565b9350612aad8185602086016132ef565b80840191505092915050565b6000612ac6602683613195565b9150612ad18261353e565b604082019050919050565b6000612ae9602b83613195565b9150612af48261358d565b604082019050919050565b6000612b0c603283613195565b9150612b17826135dc565b604082019050919050565b6000612b2f602683613195565b9150612b3a8261362b565b604082019050919050565b6000612b52602583613195565b9150612b5d8261367a565b604082019050919050565b6000612b75601c83613195565b9150612b80826136c9565b602082019050919050565b6000612b98602383613195565b9150612ba3826136f2565b604082019050919050565b6000612bbb602483613195565b9150612bc682613741565b604082019050919050565b6000612bde601983613195565b9150612be982613790565b602082019050919050565b6000612c01602383613195565b9150612c0c826137b9565b604082019050919050565b6000612c24602983613195565b9150612c2f82613808565b604082019050919050565b6000612c47603e83613195565b9150612c5282613857565b604082019050919050565b6000612c6a602083613195565b9150612c75826138a6565b602082019050919050565b6000612c8d602083613195565b9150612c98826138cf565b602082019050919050565b6000612cb0601883613195565b9150612cbb826138f8565b602082019050919050565b6000612cd3602183613195565b9150612cde82613921565b604082019050919050565b6000612cf6603183613195565b9150612d0182613970565b604082019050919050565b6000612d19602c83613195565b9150612d24826139bf565b604082019050919050565b6000612d3c601c83613195565b9150612d4782613a0e565b602082019050919050565b6000612d5f602e83613195565b9150612d6a82613a37565b604082019050919050565b612d7e816132d6565b82525050565b6000612d908285612a88565b9150612d9c8284612a88565b91508190509392505050565b6000602082019050612dbd60008301846129f8565b92915050565b6000608082019050612dd860008301876129f8565b612de560208301866129f8565b612df26040830185612d75565b8181036060830152612e048184612a16565b905095945050505050565b6000602082019050612e246000830184612a07565b92915050565b60006020820190508181036000830152612e448184612a4f565b905092915050565b60006020820190508181036000830152612e6581612ab9565b9050919050565b60006020820190508181036000830152612e8581612adc565b9050919050565b60006020820190508181036000830152612ea581612aff565b9050919050565b60006020820190508181036000830152612ec581612b22565b9050919050565b60006020820190508181036000830152612ee581612b45565b9050919050565b60006020820190508181036000830152612f0581612b68565b9050919050565b60006020820190508181036000830152612f2581612b8b565b9050919050565b60006020820190508181036000830152612f4581612bae565b9050919050565b60006020820190508181036000830152612f6581612bd1565b9050919050565b60006020820190508181036000830152612f8581612bf4565b9050919050565b60006020820190508181036000830152612fa581612c17565b9050919050565b60006020820190508181036000830152612fc581612c3a565b9050919050565b60006020820190508181036000830152612fe581612c5d565b9050919050565b6000602082019050818103600083015261300581612c80565b9050919050565b6000602082019050818103600083015261302581612ca3565b9050919050565b6000602082019050818103600083015261304581612cc6565b9050919050565b6000602082019050818103600083015261306581612ce9565b9050919050565b6000602082019050818103600083015261308581612d0c565b9050919050565b600060208201905081810360008301526130a581612d2f565b9050919050565b600060208201905081810360008301526130c581612d52565b9050919050565b60006020820190506130e16000830184612d75565b92915050565b60006130f1613102565b90506130fd8282613354565b919050565b6000604051905090565b600067ffffffffffffffff821115613127576131266134ea565b5b6131308261352d565b9050602081019050919050565b600067ffffffffffffffff821115613158576131576134ea565b5b6131618261352d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131bc826132d6565b91506131c7836132d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131fc576131fb6133ff565b5b828201905092915050565b6000613212826132d6565b915061321d836132d6565b92508261322d5761322c61342e565b5b828204905092915050565b6000613243826132d6565b915061324e836132d6565b925082821015613261576132606133ff565b5b828203905092915050565b6000613277826132b6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561330d5780820151818401526020810190506132f2565b8381111561331c576000848401525b50505050565b6000600282049050600182168061333a57607f821691505b6020821081141561334e5761334d61345d565b5b50919050565b61335d8261352d565b810181811067ffffffffffffffff8211171561337c5761337b6134ea565b5b80604052505050565b6000613390826132d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133c3576133c26133ff565b5b600182019050919050565b60006133d9826132d6565b91506133e4836132d6565b9250826133f4576133f361342e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f62617463684d696e743a20656e6472616e64676520657863656564206d61782060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f736166654d696e743a20746f6b656e496420657863656564206d61782073757060008201527f706c790000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d696e743a2063616c6c6572206973206e6f74206d696e74657220617070726f60008201527f7665640000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f736166654d696e743a204d617820737570706c79207265616368656400000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613a8f8161326c565b8114613a9a57600080fd5b50565b613aa68161327e565b8114613ab157600080fd5b50565b613abd8161328a565b8114613ac857600080fd5b50565b613ad4816132d6565b8114613adf57600080fd5b5056fe65616132346235376264653734373834646564376339303266333237643631393563656435633733346634396263343434343661663838343238636566663830a2646970667358221220e14f87f533656223ffa030fc88e21581b42b7fc10e6816cbeb9512eb58595f7d64736f6c63430008070033

Deployed Bytecode Sourcemap

46217:3205:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47878:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26744:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28257:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40650:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48320:525;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47297:350;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40318:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46313:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29364:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40840:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48207:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26455:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;:::i;:::-;;46866:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4625:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26913:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47026:263;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48853:566;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46454:120;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27088:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46279:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28726:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5531:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46363:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47878:212;48017:4;48046:36;48070:11;48046:23;:36::i;:::-;48039:43;;47878:212;;;:::o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;28396:15;:24;28412:7;28396:24;;;;;;;;;;;;;;;;;;;;;28389:31;;28257:171;;;:::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;27913:11;;:2;:11;;;;27905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:5;27997:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28022:37;28039:5;28046:12;:10;:12::i;:::-;28022:16;:37::i;:::-;27997:62;27975:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27844:347;27774:417;;:::o;40650:113::-;40711:7;40738:10;:17;;;;40731:24;;40650:113;:::o;48320:525::-;48514:16;48522:7;48514;:16::i;:::-;48513:17;:47;;;;;48534:12;:26;48547:12;:10;:12::i;:::-;48534:26;;;;;;;;;;;;;;;;;;;;;;;;;48513:47;48509:329;;;48577:21;48586:2;48590:7;48577:8;:21::i;:::-;48509:329;;;48657:41;48676:12;:10;:12::i;:::-;48690:7;48657:18;:41::i;:::-;48631:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;48798:28;48808:4;48814:2;48818:7;48798:9;:28::i;:::-;48509:329;48320:525;;;:::o;47297:350::-;46749:12;:26;46762:12;:10;:12::i;:::-;46749:26;;;;;;;;;;;;;;;;;;;;;;;;;46727:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;46350:4:::1;47451:8;:21;47429:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;47554:9;47566:10;47554:22;;47549:91;47583:8;47578:1;:13;47549:91;;47613:15;47622:2;47626:1;47613:8;:15::i;:::-;47593:3;;;;;:::i;:::-;;;;47549:91;;;;47297:350:::0;;;:::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40540:12;:19;40553:5;40540:19;;;;;;;;;;;;;;;:26;40560:5;40540:26;;;;;;;;;;;;40533:33;;40318:256;;;;:::o;46313:41::-;46350:4;46313:41;:::o;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;:::-;29364:185;;;:::o;40840:233::-;40915:7;40951:30;:28;:30::i;:::-;40943:5;:38;40935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:10;41059:5;41048:17;;;;;;;;:::i;:::-;;;;;;;;;;41041:24;;40840:233;;;:::o;48207:105::-;4511:13;:11;:13::i;:::-;48293:11:::1;48282:8;:22;;;;;;;;;;;;:::i;:::-;;48207:105:::0;:::o;26455:222::-;26527:7;26547:13;26563:7;:16;26571:7;26563:16;;;;;;;;;;;;;;;;;;;;;26547:32;;26615:1;26598:19;;:5;:19;;;;26590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26664:5;26657:12;;;26455:222;;;:::o;26186:207::-;26258:7;26303:1;26286:19;;:5;:19;;;;26278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;:16;26379:5;26369:16;;;;;;;;;;;;;;;;26362:23;;26186:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;46866:152::-;4511:13;:11;:13::i;:::-;47004:6:::1;46978:12;:23;46991:9;46978:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;46866:152:::0;;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26913:104;:::o;47026:263::-;46749:12;:26;46762:12;:10;:12::i;:::-;46749:26;;;;;;;;;;;;;;;;;;;;;;;;;46727:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;46350:4:::1;47110:7;:20;47102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46350:4;47189:13;:11;:13::i;:::-;:26;47181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47259:22;47269:2;47273:7;47259:9;:22::i;:::-;47026:263:::0;;:::o;28500:155::-;28595:52;28614:12;:10;:12::i;:::-;28628:8;28638;28595:18;:52::i;:::-;28500:155;;:::o;48853:566::-;49080:16;49088:7;49080;:16::i;:::-;49079:17;:47;;;;;49100:12;:26;49113:12;:10;:12::i;:::-;49100:26;;;;;;;;;;;;;;;;;;;;;;;;;49079:47;49075:337;;;49143:21;49152:2;49156:7;49143:8;:21::i;:::-;49075:337;;;49223:41;49242:12;:10;:12::i;:::-;49256:7;49223:18;:41::i;:::-;49197:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;49361:39;49375:4;49381:2;49385:7;49394:5;49361:13;:39::i;:::-;49075:337;48853:566;;;;:::o;46454:120::-;;;;;;;;;;;;;;;;;;;:::o;27088:281::-;27161:13;27187:23;27202:7;27187:14;:23::i;:::-;27223:21;27247:10;:8;:10::i;:::-;27223:34;;27299:1;27281:7;27275:21;:25;:86;;;;;;;;;;;;;;;;;27327:7;27336:18;:7;:16;:18::i;:::-;27310:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27275:86;27268:93;;;27088:281;;;:::o;46279:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28726:164::-;28823:4;28847:18;:25;28866:5;28847:25;;;;;;;;;;;;;;;:35;28873:8;28847:35;;;;;;;;;;;;;;;;;;;;;;;;;28840:42;;28726:164;;;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;46363:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;40010:224::-;40112:4;40151:35;40136:50;;;:11;:50;;;;:90;;;;40190:36;40214:11;40190:23;:36::i;:::-;40136:90;40129:97;;40010:224;;;:::o;36232:135::-;36314:16;36322:7;36314;:16::i;:::-;36306:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36232:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;31450:127::-;31515:4;31567:1;31539:30;;:7;:16;31547:7;31539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31532:37;;31450:127;;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;31912:16;;:7;:16;;;:52;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31912:52;:87;;;;31992:7;31968:31;;:20;31980:7;31968:11;:20::i;:::-;:31;;;31912:87;31904:96;;;31744:264;;;;:::o;34767:625::-;34926:4;34899:31;;:23;34914:7;34899:14;:23::i;:::-;:31;;;34891:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:1;34991:16;;:2;:16;;;;34983:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;35226:1;35207:9;:15;35217:4;35207:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35255:1;35238:9;:13;35248:2;35238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35286:2;35267:7;:16;35275:7;35267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35325:7;35321:2;35306:27;;35315:4;35306:27;;;;;;;;;;;;35346:38;35366:4;35372:2;35376:7;35346:19;:38::i;:::-;34767:625;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;32350:110::-;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;:::-;32350:110;;:::o;35828:315::-;35983:8;35974:17;;:5;:17;;;;35966:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36070:8;36032:18;:25;36051:5;36032:25;;;;;;;;;;;;;;;:35;36058:8;36032:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36116:8;36094:41;;36109:5;36094:41;;;36126:8;36094:41;;;;;;:::i;:::-;;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30824:313;;;;:::o;48098:101::-;48150:13;48183:8;48176:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48098:101;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;25817:305::-;25919:4;25971:25;25956:40;;;:11;:40;;;;:105;;;;26028:33;26013:48;;;:11;:48;;;;25956:105;:158;;;;26078:36;26102:11;26078:23;:36::i;:::-;25956:158;25936:178;;25817:305;;;:::o;47655:215::-;47817:45;47844:4;47850:2;47854:7;47817:26;:45::i;:::-;47655:215;;;:::o;38867:125::-;;;;:::o;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32687:319;;;:::o;36931:853::-;37085:4;37106:15;:2;:13;;;:15::i;:::-;37102:675;;;37158:2;37142:36;;;37179:12;:10;:12::i;:::-;37193:4;37199:7;37208:4;37142:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37400:1;37383:6;:13;:18;37379:328;;;37426:60;;;;;;;;;;:::i;:::-;;;;;;;;37379:328;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;37274:41;;;37264:51;;;:6;:51;;;;37257:58;;;;;37102:675;37761:4;37754:11;;36931:853;;;;;;;:::o;17479:157::-;17564:4;17603:25;17588:40;;;:11;:40;;;;17581:47;;17479:157;;;:::o;41686:589::-;41830:45;41857:4;41863:2;41867:7;41830:26;:45::i;:::-;41908:1;41892:18;;:4;:18;;;41888:187;;;41927:40;41959:7;41927:31;:40::i;:::-;41888:187;;;41997:2;41989:10;;:4;:10;;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;41985:90;41888:187;42103:1;42089:16;;:2;:16;;;42085:183;;;42122:45;42159:7;42122:36;:45::i;:::-;42085:183;;;42195:4;42189:10;;:2;:10;;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;:::-;42185:83;42085:183;41686:589;;;:::o;33342:439::-;33436:1;33422:16;;:2;:16;;;;33414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33495:16;33503:7;33495;:16::i;:::-;33494:17;33486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;33632:1;33615:9;:13;33625:2;33615:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33663:2;33644:7;:16;33652:7;33644:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33708:7;33704:2;33683:33;;33700:1;33683:33;;;;;;;;;;;;33729:44;33757:1;33761:2;33765:7;33729:19;:44::i;:::-;33342:439;;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;38356:126::-;;;;:::o;42998:164::-;43102:10;:17;;;;43075:15;:24;43091:7;43075:24;;;;;;;;;;;:44;;;;43130:10;43146:7;43130:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:164;:::o;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44055:51;;44117:18;44138:17;:26;44156:7;44138:26;;;;;;;;;;;;44117:47;;44285:14;44271:10;:28;44267:328;;44316:19;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:34;44357:14;44338:34;;;;;;;;;;;;44316:56;;44422:11;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:30;44408:10;44389:30;;;;;;;;;;;:44;;;;44539:10;44506:17;:30;44524:11;44506:30;;;;;;;;;;;:43;;;;44301:294;44267:328;44691:17;:26;44709:7;44691:26;;;;;;;;;;;44684:33;;;44735:12;:18;44748:4;44735:18;;;;;;;;;;;;;;;:34;44754:14;44735:34;;;;;;;;;;;44728:41;;;43870:907;;43789:988;;:::o;45072:1079::-;45325:22;45370:1;45350:10;:17;;;;:21;;;;:::i;:::-;45325:46;;45382:18;45403:15;:24;45419:7;45403:24;;;;;;;;;;;;45382:45;;45754:19;45776:10;45787:14;45776:26;;;;;;;;:::i;:::-;;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45951:10;45920:15;:28;45936:11;45920:28;;;;;;;;;;;:41;;;;46092:15;:24;46108:7;46092:24;;;;;;;;;;;46085:31;;;46127:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45143:1008;;;45072:1079;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;42661:37;;42736:7;42709:12;:16;42722:2;42709:16;;;;;;;;;;;;;;;:24;42726:6;42709:24;;;;;;;;;;;:34;;;;42783:6;42754:17;:26;42772:7;42754:26;;;;;;;;;;;:35;;;;42650:147;42576:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:619::-;5697:6;5705;5713;5762:2;5750:9;5741:7;5737:23;5733:32;5730:119;;;5768:79;;:::i;:::-;5730:119;5888:1;5913:53;5958:7;5949:6;5938:9;5934:22;5913:53;:::i;:::-;5903:63;;5859:117;6015:2;6041:53;6086:7;6077:6;6066:9;6062:22;6041:53;:::i;:::-;6031:63;;5986:118;6143:2;6169:53;6214:7;6205:6;6194:9;6190:22;6169:53;:::i;:::-;6159:63;;6114:118;5620:619;;;;;:::o;6245:327::-;6303:6;6352:2;6340:9;6331:7;6327:23;6323:32;6320:119;;;6358:79;;:::i;:::-;6320:119;6478:1;6503:52;6547:7;6538:6;6527:9;6523:22;6503:52;:::i;:::-;6493:62;;6449:116;6245:327;;;;:::o;6578:349::-;6647:6;6696:2;6684:9;6675:7;6671:23;6667:32;6664:119;;;6702:79;;:::i;:::-;6664:119;6822:1;6847:63;6902:7;6893:6;6882:9;6878:22;6847:63;:::i;:::-;6837:73;;6793:127;6578:349;;;;:::o;6933:509::-;7002:6;7051:2;7039:9;7030:7;7026:23;7022:32;7019:119;;;7057:79;;:::i;:::-;7019:119;7205:1;7194:9;7190:17;7177:31;7235:18;7227:6;7224:30;7221:117;;;7257:79;;:::i;:::-;7221:117;7362:63;7417:7;7408:6;7397:9;7393:22;7362:63;:::i;:::-;7352:73;;7148:287;6933:509;;;;:::o;7448:329::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:53;7752:7;7743:6;7732:9;7728:22;7707:53;:::i;:::-;7697:63;;7653:117;7448:329;;;;:::o;7783:118::-;7870:24;7888:5;7870:24;:::i;:::-;7865:3;7858:37;7783:118;;:::o;7907:109::-;7988:21;8003:5;7988:21;:::i;:::-;7983:3;7976:34;7907:109;;:::o;8022:360::-;8108:3;8136:38;8168:5;8136:38;:::i;:::-;8190:70;8253:6;8248:3;8190:70;:::i;:::-;8183:77;;8269:52;8314:6;8309:3;8302:4;8295:5;8291:16;8269:52;:::i;:::-;8346:29;8368:6;8346:29;:::i;:::-;8341:3;8337:39;8330:46;;8112:270;8022:360;;;;:::o;8388:364::-;8476:3;8504:39;8537:5;8504:39;:::i;:::-;8559:71;8623:6;8618:3;8559:71;:::i;:::-;8552:78;;8639:52;8684:6;8679:3;8672:4;8665:5;8661:16;8639:52;:::i;:::-;8716:29;8738:6;8716:29;:::i;:::-;8711:3;8707:39;8700:46;;8480:272;8388:364;;;;:::o;8758:377::-;8864:3;8892:39;8925:5;8892:39;:::i;:::-;8947:89;9029:6;9024:3;8947:89;:::i;:::-;8940:96;;9045:52;9090:6;9085:3;9078:4;9071:5;9067:16;9045:52;:::i;:::-;9122:6;9117:3;9113:16;9106:23;;8868:267;8758:377;;;;:::o;9141:366::-;9283:3;9304:67;9368:2;9363:3;9304:67;:::i;:::-;9297:74;;9380:93;9469:3;9380:93;:::i;:::-;9498:2;9493:3;9489:12;9482:19;;9141:366;;;:::o;9513:::-;9655:3;9676:67;9740:2;9735:3;9676:67;:::i;:::-;9669:74;;9752:93;9841:3;9752:93;:::i;:::-;9870:2;9865:3;9861:12;9854:19;;9513:366;;;:::o;9885:::-;10027:3;10048:67;10112:2;10107:3;10048:67;:::i;:::-;10041:74;;10124:93;10213:3;10124:93;:::i;:::-;10242:2;10237:3;10233:12;10226:19;;9885:366;;;:::o;10257:::-;10399:3;10420:67;10484:2;10479:3;10420:67;:::i;:::-;10413:74;;10496:93;10585:3;10496:93;:::i;:::-;10614:2;10609:3;10605:12;10598:19;;10257:366;;;:::o;10629:::-;10771:3;10792:67;10856:2;10851:3;10792:67;:::i;:::-;10785:74;;10868:93;10957:3;10868:93;:::i;:::-;10986:2;10981:3;10977:12;10970:19;;10629:366;;;:::o;11001:::-;11143:3;11164:67;11228:2;11223:3;11164:67;:::i;:::-;11157:74;;11240:93;11329:3;11240:93;:::i;:::-;11358:2;11353:3;11349:12;11342:19;;11001:366;;;:::o;11373:::-;11515:3;11536:67;11600:2;11595:3;11536:67;:::i;:::-;11529:74;;11612:93;11701:3;11612:93;:::i;:::-;11730:2;11725:3;11721:12;11714:19;;11373:366;;;:::o;11745:::-;11887:3;11908:67;11972:2;11967:3;11908:67;:::i;:::-;11901:74;;11984:93;12073:3;11984:93;:::i;:::-;12102:2;12097:3;12093:12;12086:19;;11745:366;;;:::o;12117:::-;12259:3;12280:67;12344:2;12339:3;12280:67;:::i;:::-;12273:74;;12356:93;12445:3;12356:93;:::i;:::-;12474:2;12469:3;12465:12;12458:19;;12117:366;;;:::o;12489:::-;12631:3;12652:67;12716:2;12711:3;12652:67;:::i;:::-;12645:74;;12728:93;12817:3;12728:93;:::i;:::-;12846:2;12841:3;12837:12;12830:19;;12489:366;;;:::o;12861:::-;13003:3;13024:67;13088:2;13083:3;13024:67;:::i;:::-;13017:74;;13100:93;13189:3;13100:93;:::i;:::-;13218:2;13213:3;13209:12;13202:19;;12861:366;;;:::o;13233:::-;13375:3;13396:67;13460:2;13455:3;13396:67;:::i;:::-;13389:74;;13472:93;13561:3;13472:93;:::i;:::-;13590:2;13585:3;13581:12;13574:19;;13233:366;;;:::o;13605:::-;13747:3;13768:67;13832:2;13827:3;13768:67;:::i;:::-;13761:74;;13844:93;13933:3;13844:93;:::i;:::-;13962:2;13957:3;13953:12;13946:19;;13605:366;;;:::o;13977:::-;14119:3;14140:67;14204:2;14199:3;14140:67;:::i;:::-;14133:74;;14216:93;14305:3;14216:93;:::i;:::-;14334:2;14329:3;14325:12;14318:19;;13977:366;;;:::o;14349:::-;14491:3;14512:67;14576:2;14571:3;14512:67;:::i;:::-;14505:74;;14588:93;14677:3;14588:93;:::i;:::-;14706:2;14701:3;14697:12;14690:19;;14349:366;;;:::o;14721:::-;14863:3;14884:67;14948:2;14943:3;14884:67;:::i;:::-;14877:74;;14960:93;15049:3;14960:93;:::i;:::-;15078:2;15073:3;15069:12;15062:19;;14721:366;;;:::o;15093:::-;15235:3;15256:67;15320:2;15315:3;15256:67;:::i;:::-;15249:74;;15332:93;15421:3;15332:93;:::i;:::-;15450:2;15445:3;15441:12;15434:19;;15093:366;;;:::o;15465:::-;15607:3;15628:67;15692:2;15687:3;15628:67;:::i;:::-;15621:74;;15704:93;15793:3;15704:93;:::i;:::-;15822:2;15817:3;15813:12;15806:19;;15465:366;;;:::o;15837:::-;15979:3;16000:67;16064:2;16059:3;16000:67;:::i;:::-;15993:74;;16076:93;16165:3;16076:93;:::i;:::-;16194:2;16189:3;16185:12;16178:19;;15837:366;;;:::o;16209:::-;16351:3;16372:67;16436:2;16431:3;16372:67;:::i;:::-;16365:74;;16448:93;16537:3;16448:93;:::i;:::-;16566:2;16561:3;16557:12;16550:19;;16209:366;;;:::o;16581:118::-;16668:24;16686:5;16668:24;:::i;:::-;16663:3;16656:37;16581:118;;:::o;16705:435::-;16885:3;16907:95;16998:3;16989:6;16907:95;:::i;:::-;16900:102;;17019:95;17110:3;17101:6;17019:95;:::i;:::-;17012:102;;17131:3;17124:10;;16705:435;;;;;:::o;17146:222::-;17239:4;17277:2;17266:9;17262:18;17254:26;;17290:71;17358:1;17347:9;17343:17;17334:6;17290:71;:::i;:::-;17146:222;;;;:::o;17374:640::-;17569:4;17607:3;17596:9;17592:19;17584:27;;17621:71;17689:1;17678:9;17674:17;17665:6;17621:71;:::i;:::-;17702:72;17770:2;17759:9;17755:18;17746:6;17702:72;:::i;:::-;17784;17852:2;17841:9;17837:18;17828:6;17784:72;:::i;:::-;17903:9;17897:4;17893:20;17888:2;17877:9;17873:18;17866:48;17931:76;18002:4;17993:6;17931:76;:::i;:::-;17923:84;;17374:640;;;;;;;:::o;18020:210::-;18107:4;18145:2;18134:9;18130:18;18122:26;;18158:65;18220:1;18209:9;18205:17;18196:6;18158:65;:::i;:::-;18020:210;;;;:::o;18236:313::-;18349:4;18387:2;18376:9;18372:18;18364:26;;18436:9;18430:4;18426:20;18422:1;18411:9;18407:17;18400:47;18464:78;18537:4;18528:6;18464:78;:::i;:::-;18456:86;;18236:313;;;;:::o;18555:419::-;18721:4;18759:2;18748:9;18744:18;18736:26;;18808:9;18802:4;18798:20;18794:1;18783:9;18779:17;18772:47;18836:131;18962:4;18836:131;:::i;:::-;18828:139;;18555:419;;;:::o;18980:::-;19146:4;19184:2;19173:9;19169:18;19161:26;;19233:9;19227:4;19223:20;19219:1;19208:9;19204:17;19197:47;19261:131;19387:4;19261:131;:::i;:::-;19253:139;;18980:419;;;:::o;19405:::-;19571:4;19609:2;19598:9;19594:18;19586:26;;19658:9;19652:4;19648:20;19644:1;19633:9;19629:17;19622:47;19686:131;19812:4;19686:131;:::i;:::-;19678:139;;19405:419;;;:::o;19830:::-;19996:4;20034:2;20023:9;20019:18;20011:26;;20083:9;20077:4;20073:20;20069:1;20058:9;20054:17;20047:47;20111:131;20237:4;20111:131;:::i;:::-;20103:139;;19830:419;;;:::o;20255:::-;20421:4;20459:2;20448:9;20444:18;20436:26;;20508:9;20502:4;20498:20;20494:1;20483:9;20479:17;20472:47;20536:131;20662:4;20536:131;:::i;:::-;20528:139;;20255:419;;;:::o;20680:::-;20846:4;20884:2;20873:9;20869:18;20861:26;;20933:9;20927:4;20923:20;20919:1;20908:9;20904:17;20897:47;20961:131;21087:4;20961:131;:::i;:::-;20953:139;;20680:419;;;:::o;21105:::-;21271:4;21309:2;21298:9;21294:18;21286:26;;21358:9;21352:4;21348:20;21344:1;21333:9;21329:17;21322:47;21386:131;21512:4;21386:131;:::i;:::-;21378:139;;21105:419;;;:::o;21530:::-;21696:4;21734:2;21723:9;21719:18;21711:26;;21783:9;21777:4;21773:20;21769:1;21758:9;21754:17;21747:47;21811:131;21937:4;21811:131;:::i;:::-;21803:139;;21530:419;;;:::o;21955:::-;22121:4;22159:2;22148:9;22144:18;22136:26;;22208:9;22202:4;22198:20;22194:1;22183:9;22179:17;22172:47;22236:131;22362:4;22236:131;:::i;:::-;22228:139;;21955:419;;;:::o;22380:::-;22546:4;22584:2;22573:9;22569:18;22561:26;;22633:9;22627:4;22623:20;22619:1;22608:9;22604:17;22597:47;22661:131;22787:4;22661:131;:::i;:::-;22653:139;;22380:419;;;:::o;22805:::-;22971:4;23009:2;22998:9;22994:18;22986:26;;23058:9;23052:4;23048:20;23044:1;23033:9;23029:17;23022:47;23086:131;23212:4;23086:131;:::i;:::-;23078:139;;22805:419;;;:::o;23230:::-;23396:4;23434:2;23423:9;23419:18;23411:26;;23483:9;23477:4;23473:20;23469:1;23458:9;23454:17;23447:47;23511:131;23637:4;23511:131;:::i;:::-;23503:139;;23230:419;;;:::o;23655:::-;23821:4;23859:2;23848:9;23844:18;23836:26;;23908:9;23902:4;23898:20;23894:1;23883:9;23879:17;23872:47;23936:131;24062:4;23936:131;:::i;:::-;23928:139;;23655:419;;;:::o;24080:::-;24246:4;24284:2;24273:9;24269:18;24261:26;;24333:9;24327:4;24323:20;24319:1;24308:9;24304:17;24297:47;24361:131;24487:4;24361:131;:::i;:::-;24353:139;;24080:419;;;:::o;24505:::-;24671:4;24709:2;24698:9;24694:18;24686:26;;24758:9;24752:4;24748:20;24744:1;24733:9;24729:17;24722:47;24786:131;24912:4;24786:131;:::i;:::-;24778:139;;24505:419;;;:::o;24930:::-;25096:4;25134:2;25123:9;25119:18;25111:26;;25183:9;25177:4;25173:20;25169:1;25158:9;25154:17;25147:47;25211:131;25337:4;25211:131;:::i;:::-;25203:139;;24930:419;;;:::o;25355:::-;25521:4;25559:2;25548:9;25544:18;25536:26;;25608:9;25602:4;25598:20;25594:1;25583:9;25579:17;25572:47;25636:131;25762:4;25636:131;:::i;:::-;25628:139;;25355:419;;;:::o;25780:::-;25946:4;25984:2;25973:9;25969:18;25961:26;;26033:9;26027:4;26023:20;26019:1;26008:9;26004:17;25997:47;26061:131;26187:4;26061:131;:::i;:::-;26053:139;;25780:419;;;:::o;26205:::-;26371:4;26409:2;26398:9;26394:18;26386:26;;26458:9;26452:4;26448:20;26444:1;26433:9;26429:17;26422:47;26486:131;26612:4;26486:131;:::i;:::-;26478:139;;26205:419;;;:::o;26630:::-;26796:4;26834:2;26823:9;26819:18;26811:26;;26883:9;26877:4;26873:20;26869:1;26858:9;26854:17;26847:47;26911:131;27037:4;26911:131;:::i;:::-;26903:139;;26630:419;;;:::o;27055:222::-;27148:4;27186:2;27175:9;27171:18;27163:26;;27199:71;27267:1;27256:9;27252:17;27243:6;27199:71;:::i;:::-;27055:222;;;;:::o;27283:129::-;27317:6;27344:20;;:::i;:::-;27334:30;;27373:33;27401:4;27393:6;27373:33;:::i;:::-;27283:129;;;:::o;27418:75::-;27451:6;27484:2;27478:9;27468:19;;27418:75;:::o;27499:307::-;27560:4;27650:18;27642:6;27639:30;27636:56;;;27672:18;;:::i;:::-;27636:56;27710:29;27732:6;27710:29;:::i;:::-;27702:37;;27794:4;27788;27784:15;27776:23;;27499:307;;;:::o;27812:308::-;27874:4;27964:18;27956:6;27953:30;27950:56;;;27986:18;;:::i;:::-;27950:56;28024:29;28046:6;28024:29;:::i;:::-;28016:37;;28108:4;28102;28098:15;28090:23;;27812:308;;;:::o;28126:98::-;28177:6;28211:5;28205:12;28195:22;;28126:98;;;:::o;28230:99::-;28282:6;28316:5;28310:12;28300:22;;28230:99;;;:::o;28335:168::-;28418:11;28452:6;28447:3;28440:19;28492:4;28487:3;28483:14;28468:29;;28335:168;;;;:::o;28509:169::-;28593:11;28627:6;28622:3;28615:19;28667:4;28662:3;28658:14;28643:29;;28509:169;;;;:::o;28684:148::-;28786:11;28823:3;28808:18;;28684:148;;;;:::o;28838:305::-;28878:3;28897:20;28915:1;28897:20;:::i;:::-;28892:25;;28931:20;28949:1;28931:20;:::i;:::-;28926:25;;29085:1;29017:66;29013:74;29010:1;29007:81;29004:107;;;29091:18;;:::i;:::-;29004:107;29135:1;29132;29128:9;29121:16;;28838:305;;;;:::o;29149:185::-;29189:1;29206:20;29224:1;29206:20;:::i;:::-;29201:25;;29240:20;29258:1;29240:20;:::i;:::-;29235:25;;29279:1;29269:35;;29284:18;;:::i;:::-;29269:35;29326:1;29323;29319:9;29314:14;;29149:185;;;;:::o;29340:191::-;29380:4;29400:20;29418:1;29400:20;:::i;:::-;29395:25;;29434:20;29452:1;29434:20;:::i;:::-;29429:25;;29473:1;29470;29467:8;29464:34;;;29478:18;;:::i;:::-;29464:34;29523:1;29520;29516:9;29508:17;;29340:191;;;;:::o;29537:96::-;29574:7;29603:24;29621:5;29603:24;:::i;:::-;29592:35;;29537:96;;;:::o;29639:90::-;29673:7;29716:5;29709:13;29702:21;29691:32;;29639:90;;;:::o;29735:149::-;29771:7;29811:66;29804:5;29800:78;29789:89;;29735:149;;;:::o;29890:126::-;29927:7;29967:42;29960:5;29956:54;29945:65;;29890:126;;;:::o;30022:77::-;30059:7;30088:5;30077:16;;30022:77;;;:::o;30105:154::-;30189:6;30184:3;30179;30166:30;30251:1;30242:6;30237:3;30233:16;30226:27;30105:154;;;:::o;30265:307::-;30333:1;30343:113;30357:6;30354:1;30351:13;30343:113;;;30442:1;30437:3;30433:11;30427:18;30423:1;30418:3;30414:11;30407:39;30379:2;30376:1;30372:10;30367:15;;30343:113;;;30474:6;30471:1;30468:13;30465:101;;;30554:1;30545:6;30540:3;30536:16;30529:27;30465:101;30314:258;30265:307;;;:::o;30578:320::-;30622:6;30659:1;30653:4;30649:12;30639:22;;30706:1;30700:4;30696:12;30727:18;30717:81;;30783:4;30775:6;30771:17;30761:27;;30717:81;30845:2;30837:6;30834:14;30814:18;30811:38;30808:84;;;30864:18;;:::i;:::-;30808:84;30629:269;30578:320;;;:::o;30904:281::-;30987:27;31009:4;30987:27;:::i;:::-;30979:6;30975:40;31117:6;31105:10;31102:22;31081:18;31069:10;31066:34;31063:62;31060:88;;;31128:18;;:::i;:::-;31060:88;31168:10;31164:2;31157:22;30947:238;30904:281;;:::o;31191:233::-;31230:3;31253:24;31271:5;31253:24;:::i;:::-;31244:33;;31299:66;31292:5;31289:77;31286:103;;;31369:18;;:::i;:::-;31286:103;31416:1;31409:5;31405:13;31398:20;;31191:233;;;:::o;31430:176::-;31462:1;31479:20;31497:1;31479:20;:::i;:::-;31474:25;;31513:20;31531:1;31513:20;:::i;:::-;31508:25;;31552:1;31542:35;;31557:18;;:::i;:::-;31542:35;31598:1;31595;31591:9;31586:14;;31430:176;;;;:::o;31612:180::-;31660:77;31657:1;31650:88;31757:4;31754:1;31747:15;31781:4;31778:1;31771:15;31798:180;31846:77;31843:1;31836:88;31943:4;31940:1;31933:15;31967:4;31964:1;31957:15;31984:180;32032:77;32029:1;32022:88;32129:4;32126:1;32119:15;32153:4;32150:1;32143:15;32170:180;32218:77;32215:1;32208:88;32315:4;32312:1;32305:15;32339:4;32336:1;32329:15;32356:180;32404:77;32401:1;32394:88;32501:4;32498:1;32491:15;32525:4;32522:1;32515:15;32542:180;32590:77;32587:1;32580:88;32687:4;32684:1;32677:15;32711:4;32708:1;32701:15;32728:117;32837:1;32834;32827:12;32851:117;32960:1;32957;32950:12;32974:117;33083:1;33080;33073:12;33097:117;33206:1;33203;33196:12;33220:102;33261:6;33312:2;33308:7;33303:2;33296:5;33292:14;33288:28;33278:38;;33220:102;;;:::o;33328:225::-;33468:34;33464:1;33456:6;33452:14;33445:58;33537:8;33532:2;33524:6;33520:15;33513:33;33328:225;:::o;33559:230::-;33699:34;33695:1;33687:6;33683:14;33676:58;33768:13;33763:2;33755:6;33751:15;33744:38;33559:230;:::o;33795:237::-;33935:34;33931:1;33923:6;33919:14;33912:58;34004:20;33999:2;33991:6;33987:15;33980:45;33795:237;:::o;34038:225::-;34178:34;34174:1;34166:6;34162:14;34155:58;34247:8;34242:2;34234:6;34230:15;34223:33;34038:225;:::o;34269:224::-;34409:34;34405:1;34397:6;34393:14;34386:58;34478:7;34473:2;34465:6;34461:15;34454:32;34269:224;:::o;34499:178::-;34639:30;34635:1;34627:6;34623:14;34616:54;34499:178;:::o;34683:222::-;34823:34;34819:1;34811:6;34807:14;34800:58;34892:5;34887:2;34879:6;34875:15;34868:30;34683:222;:::o;34911:223::-;35051:34;35047:1;35039:6;35035:14;35028:58;35120:6;35115:2;35107:6;35103:15;35096:31;34911:223;:::o;35140:175::-;35280:27;35276:1;35268:6;35264:14;35257:51;35140:175;:::o;35321:222::-;35461:34;35457:1;35449:6;35445:14;35438:58;35530:5;35525:2;35517:6;35513:15;35506:30;35321:222;:::o;35549:228::-;35689:34;35685:1;35677:6;35673:14;35666:58;35758:11;35753:2;35745:6;35741:15;35734:36;35549:228;:::o;35783:249::-;35923:34;35919:1;35911:6;35907:14;35900:58;35992:32;35987:2;35979:6;35975:15;35968:57;35783:249;:::o;36038:182::-;36178:34;36174:1;36166:6;36162:14;36155:58;36038:182;:::o;36226:::-;36366:34;36362:1;36354:6;36350:14;36343:58;36226:182;:::o;36414:174::-;36554:26;36550:1;36542:6;36538:14;36531:50;36414:174;:::o;36594:220::-;36734:34;36730:1;36722:6;36718:14;36711:58;36803:3;36798:2;36790:6;36786:15;36779:28;36594:220;:::o;36820:236::-;36960:34;36956:1;36948:6;36944:14;36937:58;37029:19;37024:2;37016:6;37012:15;37005:44;36820:236;:::o;37062:231::-;37202:34;37198:1;37190:6;37186:14;37179:58;37271:14;37266:2;37258:6;37254:15;37247:39;37062:231;:::o;37299:178::-;37439:30;37435:1;37427:6;37423:14;37416:54;37299:178;:::o;37483:233::-;37623:34;37619:1;37611:6;37607:14;37600:58;37692:16;37687:2;37679:6;37675:15;37668:41;37483:233;:::o;37722:122::-;37795:24;37813:5;37795:24;:::i;:::-;37788:5;37785:35;37775:63;;37834:1;37831;37824:12;37775:63;37722:122;:::o;37850:116::-;37920:21;37935:5;37920:21;:::i;:::-;37913:5;37910:32;37900:60;;37956:1;37953;37946:12;37900:60;37850:116;:::o;37972:120::-;38044:23;38061:5;38044:23;:::i;:::-;38037:5;38034:34;38024:62;;38082:1;38079;38072:12;38024:62;37972:120;:::o;38098:122::-;38171:24;38189:5;38171:24;:::i;:::-;38164:5;38161:35;38151:63;;38210:1;38207;38200:12;38151:63;38098:122;:::o

Swarm Source

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